From 7fe2591167252fa21dbd5ef5570a9950446848d8 Mon Sep 17 00:00:00 2001 From: Michael Yong Date: Mon, 10 Aug 2026 13:33:48 -0700 Subject: [PATCH 1/9] Add experimental sent-message editing --- .../AppLayout.plugin-panel-header.test.tsx | 1 + .../AppLayout.root-compose-project.test.tsx | 1 + .../promptbox/FollowUpPromptBox.tsx | 34 +- .../promptbox/InlineMessageEditorFrame.tsx | 71 +++ .../banner/QueuedMessagesList.test.tsx | 3 + .../promptbox/banner/QueuedMessagesList.tsx | 23 +- .../components/thread/embedded-chat/index.ts | 6 +- .../useComposerAttachmentUploads.test.tsx | 58 +- .../useComposerAttachmentUploads.ts | 157 +++-- .../timeline/ConversationMessageContent.tsx | 6 + .../thread/timeline/MessageActionBar.test.tsx | 39 ++ .../thread/timeline/MessageActionBar.tsx | 38 +- .../ThreadTimelineRows.actions.test.tsx | 146 +++++ .../thread/timeline/ThreadTimelineRows.tsx | 77 ++- .../thread/timeline/ThreadTimelineSurface.tsx | 8 + .../src/components/thread/timeline/index.ts | 3 + .../src/components/thread/timeline/types.ts | 23 + .../cache-owners/mutation-cache-effects.ts | 17 + .../cache-owners/realtime-cache-registry.ts | 18 + .../hooks/mutations/mutation-request-types.ts | 5 + .../thread-runtime-mutations.test.tsx | 56 ++ .../mutations/thread-runtime-mutations.ts | 29 +- apps/app/src/lib/lifecycle-errors.ts | 3 + apps/app/src/lib/mutation-errors.ts | 1 + apps/app/src/lib/system-config-atoms.ts | 1 + .../views/SettingsView.experiments.test.tsx | 12 + apps/app/src/views/SettingsView.stories.tsx | 7 + apps/app/src/views/SettingsView.tsx | 24 + .../ThreadDetailPromptArea.test.tsx | 157 ++++- .../thread-detail/ThreadDetailPromptArea.tsx | 309 +++++++++- .../views/thread-detail/ThreadDetailView.tsx | 218 ++++++- .../thread-detail/sentMessageEdit.test.ts | 43 ++ .../views/thread-detail/sentMessageEdit.ts | 52 ++ .../__tests__/command-output/settings.test.ts | 20 + .../command-output/thread-actions.test.ts | 77 +++ apps/cli/src/commands/thread/actions.ts | 58 ++ apps/desktop/test/preload-build.test.ts | 1 + apps/host-daemon/src/app.test.ts | 3 + .../src/command-dispatch-support.test.ts | 3 + apps/host-daemon/src/command-dispatch.test.ts | 80 ++- apps/host-daemon/src/command-dispatch.ts | 13 + .../src/command-handlers/thread.ts | 34 +- apps/host-daemon/src/provider-cli-health.ts | 2 +- apps/host-daemon/src/runtime-manager.test.ts | 3 + .../src/terminals/terminal-manager.test.ts | 3 + .../test/command/dispatch-helpers.ts | 5 + apps/server/src/routes/threads/actions.ts | 22 + .../skills/builtin-skills/bb-cli/SKILL.md | 8 + .../services/threads/thread-edit-message.ts | 542 +++++++++++++++++ .../src/services/threads/thread-send.ts | 37 +- apps/server/test/system/experiments.test.ts | 6 + .../test/threads/thread-edit-message.test.ts | 559 ++++++++++++++++++ .../threads/thread-runtime-config.test.ts | 1 + docs/configuration.md | 4 + .../src/claude-code/adapter.test.ts | 49 ++ .../agent-runtime/src/claude-code/adapter.ts | 8 + .../bridge/__tests__/bridge.test.ts | 50 +- .../src/claude-code/bridge/bridge.ts | 3 + .../src/claude-code/bridge/commands.ts | 1 + .../agent-runtime/src/claude-code/schemas.ts | 1 + .../src/claude-code/translate-message.ts | 21 + .../agent-runtime/src/codex/adapter.test.ts | 21 + packages/agent-runtime/src/codex/adapter.ts | 4 + packages/agent-runtime/src/pi/adapter.test.ts | 29 +- packages/agent-runtime/src/pi/adapter.ts | 11 + .../src/pi/bridge/__tests__/bridge.test.ts | 59 +- .../agent-runtime/src/pi/bridge/bridge.ts | 27 +- .../src/pi/bridge/sdk-session.ts | 4 + .../agent-runtime/src/provider-adapter.ts | 1 + .../src/runtime-thread-rewind.test.ts | 79 +++ packages/agent-runtime/src/runtime.ts | 184 ++++++ packages/agent-runtime/src/types.ts | 24 + packages/db/src/data/events.ts | 65 +- packages/db/src/data/index.ts | 4 + packages/db/test/experiments.test.ts | 1 + packages/domain/src/change-kinds.ts | 1 + packages/domain/src/experiments.ts | 1 + packages/domain/src/provider-event.ts | 2 + packages/host-daemon-contract/src/commands.ts | 22 + packages/host-daemon-contract/src/session.ts | 1 + .../test/contract.test.ts | 3 + .../bundled-types/bb-plugin-sdk.d.ts | 431 +++++++++++++- packages/sdk/src/areas/threads.ts | 30 + packages/sdk/test/public-types.test.ts | 2 + packages/sdk/test/sdk.test.ts | 54 ++ packages/server-contract/src/api/threads.ts | 28 + packages/server-contract/src/public-api.ts | 18 + .../src/generated/plugin-sdk-dts.generated.ts | 2 +- .../src/generated/templates.generated.ts | 2 +- .../src/templates/bb-guide-threads.md | 12 + .../src/parse-operation-message.ts | 7 +- .../test/build-thread-timeline.test.ts | 14 + plans/issue-1114-edit-sent-message.md | 245 ++++++++ 93 files changed, 4504 insertions(+), 144 deletions(-) create mode 100644 apps/app/src/components/promptbox/InlineMessageEditorFrame.tsx create mode 100644 apps/app/src/views/thread-detail/sentMessageEdit.test.ts create mode 100644 apps/app/src/views/thread-detail/sentMessageEdit.ts create mode 100644 apps/server/src/services/threads/thread-edit-message.ts create mode 100644 apps/server/test/threads/thread-edit-message.test.ts create mode 100644 packages/agent-runtime/src/runtime-thread-rewind.test.ts create mode 100644 plans/issue-1114-edit-sent-message.md diff --git a/apps/app/src/components/layout/AppLayout.plugin-panel-header.test.tsx b/apps/app/src/components/layout/AppLayout.plugin-panel-header.test.tsx index 7dff45cb33..d9c5b63421 100644 --- a/apps/app/src/components/layout/AppLayout.plugin-panel-header.test.tsx +++ b/apps/app/src/components/layout/AppLayout.plugin-panel-header.test.tsx @@ -28,6 +28,7 @@ vi.mock("@/hooks/queries/system-queries", () => ({ data: { experiments: { claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: true, }, diff --git a/apps/app/src/components/layout/AppLayout.root-compose-project.test.tsx b/apps/app/src/components/layout/AppLayout.root-compose-project.test.tsx index b2f91fa6c8..e0f56f87db 100644 --- a/apps/app/src/components/layout/AppLayout.root-compose-project.test.tsx +++ b/apps/app/src/components/layout/AppLayout.root-compose-project.test.tsx @@ -24,6 +24,7 @@ vi.mock("@/hooks/queries/system-queries", () => ({ data: { experiments: { claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: true, }, diff --git a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx index da5a3b06d9..2714194e0a 100644 --- a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx +++ b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx @@ -168,6 +168,8 @@ export interface FollowUpComposerProps { onChangeMessage: (value: string, mentionRanges: PromptTextMention[]) => void; onModifierSubmit: () => void; onSubmit: () => void; + /** Accessible label and tooltip for the primary submit action. */ + submitTitle?: string; compactPromptPlaceholder: string; promptPlaceholder: string; canModifierSubmit: boolean; @@ -716,21 +718,23 @@ function FollowUpPromptBoxWithComposer({ composer.isFollowUpSubmitting || (steerOnPrimarySubmit && !composer.canModifierSubmit), onModifierSubmit, - title: canQueueFollowUp - ? steerOnPrimarySubmit - ? "Steer current run (Enter)" - : "Queue follow-up (Enter)" - : isStopping - ? "Stopping run..." - : isLoadingExecutionOptions - ? "Loading models..." - : isLoadingPendingInteractions - ? "Checking pending interactions..." - : isProvisioning - ? "Provisioning..." - : isUnavailable - ? "Unavailable" - : "Submit (Enter)", + title: + composer.submitTitle ?? + (canQueueFollowUp + ? steerOnPrimarySubmit + ? "Steer current run (Enter)" + : "Queue follow-up (Enter)" + : isStopping + ? "Stopping run..." + : isLoadingExecutionOptions + ? "Loading models..." + : isLoadingPendingInteractions + ? "Checking pending interactions..." + : isProvisioning + ? "Provisioning..." + : isUnavailable + ? "Unavailable" + : "Submit (Enter)"), isRunning: canStopRuntime, }} typeahead={typeahead} diff --git a/apps/app/src/components/promptbox/InlineMessageEditorFrame.tsx b/apps/app/src/components/promptbox/InlineMessageEditorFrame.tsx new file mode 100644 index 0000000000..d95f22b4d7 --- /dev/null +++ b/apps/app/src/components/promptbox/InlineMessageEditorFrame.tsx @@ -0,0 +1,71 @@ +import type { ReactNode } from "react"; +import { Button } from "@bb/shared-ui/button"; +import { Icon } from "@bb/shared-ui/icon"; +import { cn } from "@bb/shared-ui/lib/utils"; + +import { PromptStackCard } from "@/components/promptbox/banner/PromptStackCard"; + +interface InlineMessageEditorFrameProps { + cancelLabel: string; + children: ReactNode; + label: string; + onCancel: () => void; + variant?: "embedded" | "cap"; +} + +/** Shared chrome for compact editors shown inline with a message. */ +export function InlineMessageEditorFrame({ + cancelLabel, + children, + label, + onCancel, + variant = "embedded", +}: InlineMessageEditorFrameProps) { + const header = ( +
+ + + {label} + + +
+ ); + + if (variant === "cap") { + return ( +
+ + {header} + +
{children}
+
+ ); + } + + return ( +
+ {header} + {children} +
+ ); +} diff --git a/apps/app/src/components/promptbox/banner/QueuedMessagesList.test.tsx b/apps/app/src/components/promptbox/banner/QueuedMessagesList.test.tsx index 39cc1b10ba..889d633fa7 100644 --- a/apps/app/src/components/promptbox/banner/QueuedMessagesList.test.tsx +++ b/apps/app/src/components/promptbox/banner/QueuedMessagesList.test.tsx @@ -387,6 +387,9 @@ describe("QueuedMessagesList", () => { ), ).toBe(true); const editingLabel = getByText(/Editing queued message/u); + expect( + editingLabel.closest('[data-inline-message-editor-frame="embedded"]'), + ).not.toBeNull(); const dismissButton = getByRole("button", { name: "Stop editing queued message", }); diff --git a/apps/app/src/components/promptbox/banner/QueuedMessagesList.tsx b/apps/app/src/components/promptbox/banner/QueuedMessagesList.tsx index 5e88c382d4..e63e6f0538 100644 --- a/apps/app/src/components/promptbox/banner/QueuedMessagesList.tsx +++ b/apps/app/src/components/promptbox/banner/QueuedMessagesList.tsx @@ -54,6 +54,7 @@ import { Icon } from "@bb/shared-ui/icon"; import { PromptStackCard } from "@/components/promptbox/banner/PromptStackCard"; import { useScrollOverflowState } from "@/components/thread/timeline/useScrollOverflowState"; import { OverflowFade } from "@/components/ui/overflow-fade"; +import { InlineMessageEditorFrame } from "@/components/promptbox/InlineMessageEditorFrame"; import { useBottomAnchoredScroll } from "@/components/ui/bottom-anchored-scroll-body"; import { Tooltip, @@ -936,23 +937,13 @@ function QueuedMessageInlineEditorSlot({ className="relative z-10 border-b border-border/35 px-2.5 py-1 last:border-b-0" > -
-
- - Editing queued message {editor.queuedMessageIndex + 1} - -
+ {editor.content} -
+ ); diff --git a/apps/app/src/components/thread/embedded-chat/index.ts b/apps/app/src/components/thread/embedded-chat/index.ts index 862a3141a5..4a4cca8000 100644 --- a/apps/app/src/components/thread/embedded-chat/index.ts +++ b/apps/app/src/components/thread/embedded-chat/index.ts @@ -11,6 +11,10 @@ export { type InlineQueuedMessageEditState, } from "./useInlineQueuedMessageEditing"; export { useActiveComposerDraft } from "./useActiveComposerDraft"; -export { useComposerAttachmentUploads } from "./useComposerAttachmentUploads"; +export { + useComposerAttachmentUploads, + useDraftAttachmentUploads, + type DraftAttachmentUploadTarget, +} from "./useComposerAttachmentUploads"; export { useComposerTypeahead } from "./useComposerTypeahead"; export { useQueuedMessageActions } from "./useQueuedMessageActions"; diff --git a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.test.tsx b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.test.tsx index c3cf62cae4..d1f846740e 100644 --- a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.test.tsx +++ b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.test.tsx @@ -3,7 +3,11 @@ import { act, renderHook } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { InlineQueuedMessageEditState } from "./useInlineQueuedMessageEditing"; -import { useComposerAttachmentUploads } from "./useComposerAttachmentUploads"; +import type { PromptDraftAttachment } from "@/lib/prompt-draft"; +import { + useComposerAttachmentUploads, + useDraftAttachmentUploads, +} from "./useComposerAttachmentUploads"; const mocks = vi.hoisted(() => ({ upload: vi.fn(), @@ -150,4 +154,56 @@ describe("useComposerAttachmentUploads", () => { expect(result.current.inlineAttachmentError).toBeNull(); expect(commitInlineQueuedMessage).not.toHaveBeenCalled(); }); + + it("does not leak a dismissed upload into a later independent draft", async () => { + const oldUpload = deferred(); + mocks.upload.mockReturnValueOnce(oldUpload.promise); + const addFirstAttachment = vi.fn(); + const addSecondAttachment = vi.fn(); + const { result, rerender } = renderHook( + ({ target }) => + useDraftAttachmentUploads({ + projectId: "proj_1", + target, + }), + { + initialProps: { + target: { + key: "edit-1", + addAttachment: addFirstAttachment, + } as { + key: string; + addAttachment: (attachment: PromptDraftAttachment) => void; + } | null, + }, + }, + ); + + let uploadPromise!: Promise; + act(() => { + uploadPromise = result.current.handleAttachFiles([ + new File(["old"], "old.txt"), + ]); + }); + expect(result.current.isAttachingFiles).toBe(true); + + rerender({ target: null }); + rerender({ + target: { key: "edit-2", addAttachment: addSecondAttachment }, + }); + await act(async () => { + oldUpload.resolve({ + type: "localFile", + path: "uploads/old.txt", + name: "old.txt", + sizeBytes: 3, + }); + await uploadPromise; + }); + + expect(addFirstAttachment).not.toHaveBeenCalled(); + expect(addSecondAttachment).not.toHaveBeenCalled(); + expect(result.current.attachmentError).toBeNull(); + expect(result.current.isAttachingFiles).toBe(false); + }); }); diff --git a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts index 0ea642e4bf..93d382344b 100644 --- a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts +++ b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts @@ -1,4 +1,4 @@ -import { useCallback, useState } from "react"; +import { useCallback, useRef, useState } from "react"; import { useUploadPromptAttachment } from "@/hooks/mutations/project-mutations"; import type { PromptDraftAttachment } from "@/lib/prompt-draft"; import type { InlineQueuedMessageEditState } from "./useInlineQueuedMessageEditing"; @@ -30,10 +30,115 @@ interface AttachmentOperationState { pendingCount: number; } +export interface DraftAttachmentUploadTarget { + /** Changes whenever a newly mounted draft must not receive older uploads. */ + key: string; + addAttachment: (attachment: PromptDraftAttachment) => void; +} + +interface UseDraftAttachmentUploadsArgs { + projectId: string; + target: DraftAttachmentUploadTarget | null; +} + +export interface UseDraftAttachmentUploadsResult { + attachmentError: string | null; + setAttachmentError: (error: string | null) => void; + handleAttachFiles: (files: File[]) => Promise; + isAttachingFiles: boolean; +} + +interface DraftAttachmentOperationState extends AttachmentOperationState { + targetKey: string | null; +} + interface InlineAttachmentOperationState extends AttachmentOperationState { editSessionId: number | null; } +/** Upload state for one independently mounted composer draft. */ +export function useDraftAttachmentUploads({ + projectId, + target, +}: UseDraftAttachmentUploadsArgs): UseDraftAttachmentUploadsResult { + const uploadPromptAttachment = useUploadPromptAttachment(); + const targetRef = useRef(target); + targetRef.current = target; + const [operation, setOperation] = useState({ + error: null, + pendingCount: 0, + targetKey: null, + }); + const targetKey = target?.key ?? null; + const isCurrentOperation = operation.targetKey === targetKey; + + const setAttachmentError = useCallback( + (error: string | null) => { + setOperation((current) => ({ + error, + pendingCount: + current.targetKey === targetKey ? current.pendingCount : 0, + targetKey, + })); + }, + [targetKey], + ); + const handleAttachFiles = useCallback( + async (files: File[]) => { + const activeTarget = targetRef.current; + if (!activeTarget || files.length === 0) return; + const capturedTargetKey = activeTarget.key; + setOperation((current) => ({ + error: null, + pendingCount: + current.targetKey === capturedTargetKey + ? current.pendingCount + 1 + : 1, + targetKey: capturedTargetKey, + })); + const failedFiles: string[] = []; + try { + for (const file of files) { + try { + const uploaded = await uploadPromptAttachment.mutateAsync({ + projectId, + file, + }); + const currentTarget = targetRef.current; + if (currentTarget?.key === capturedTargetKey) { + currentTarget.addAttachment(uploaded); + } + } catch { + failedFiles.push(file.name); + } + } + } finally { + setOperation((current) => + current.targetKey === capturedTargetKey + ? { + error: + failedFiles.length > 0 && + targetRef.current?.key === capturedTargetKey + ? `Failed to attach: ${failedFiles.join(", ")}` + : current.error, + pendingCount: Math.max(0, current.pendingCount - 1), + targetKey: capturedTargetKey, + } + : current, + ); + } + }, + [projectId, uploadPromptAttachment], + ); + + return { + attachmentError: isCurrentOperation ? operation.error : null, + setAttachmentError, + handleAttachFiles, + isAttachingFiles: isCurrentOperation && operation.pendingCount > 0, + }; +} + /** * Uploads dropped/picked files for either independently mounted composer. The * inline owner is captured per invocation so a dismissed edit session cannot @@ -47,8 +152,15 @@ export function useComposerAttachmentUploads({ commitInlineQueuedMessage, }: UseComposerAttachmentUploadsArgs): UseComposerAttachmentUploadsResult { const uploadPromptAttachment = useUploadPromptAttachment(); - const [bottomOperation, setBottomOperation] = - useState({ error: null, pendingCount: 0 }); + const { + attachmentError: bottomAttachmentError, + setAttachmentError: setBottomAttachmentError, + handleAttachFiles: handleAttachBottomFiles, + isAttachingFiles: isAttachingBottomFiles, + } = useDraftAttachmentUploads({ + projectId, + target: { key: "bottom", addAttachment: addDraftAttachment }, + }); const [inlineOperation, setInlineOperation] = useState({ editSessionId: null, @@ -56,9 +168,6 @@ export function useComposerAttachmentUploads({ pendingCount: 0, }); - const setBottomAttachmentError = useCallback((error: string | null) => { - setBottomOperation((current) => ({ ...current, error })); - }, []); const setInlineAttachmentError = useCallback( (error: string | null) => { const editSessionId = inlineEditingQueuedMessage?.editSessionId ?? null; @@ -72,38 +181,6 @@ export function useComposerAttachmentUploads({ [inlineEditingQueuedMessage?.editSessionId], ); - const handleAttachBottomFiles = useCallback( - async (files: File[]) => { - if (files.length === 0) return; - setBottomOperation((current) => ({ - error: null, - pendingCount: current.pendingCount + 1, - })); - const failedFiles: string[] = []; - try { - for (const file of files) { - try { - const uploaded = await uploadPromptAttachment.mutateAsync({ - projectId, - file, - }); - addDraftAttachment(uploaded); - } catch { - failedFiles.push(file.name); - } - } - } finally { - setBottomOperation((current) => ({ - error: - failedFiles.length > 0 - ? `Failed to attach: ${failedFiles.join(", ")}` - : current.error, - pendingCount: Math.max(0, current.pendingCount - 1), - })); - } - }, - [addDraftAttachment, projectId, uploadPromptAttachment], - ); const handleAttachInlineFiles = useCallback( async (files: File[]) => { if (!inlineEditingQueuedMessage || files.length === 0) return; @@ -178,10 +255,10 @@ export function useComposerAttachmentUploads({ inlineOperation.editSessionId === currentInlineEditSessionId; return { - bottomAttachmentError: bottomOperation.error, + bottomAttachmentError, setBottomAttachmentError, handleAttachBottomFiles, - isAttachingBottomFiles: bottomOperation.pendingCount > 0, + isAttachingBottomFiles, inlineAttachmentError: isCurrentInlineOperation ? inlineOperation.error : null, diff --git a/apps/app/src/components/thread/timeline/ConversationMessageContent.tsx b/apps/app/src/components/thread/timeline/ConversationMessageContent.tsx index 6ae276e3bb..d6ec524358 100644 --- a/apps/app/src/components/thread/timeline/ConversationMessageContent.tsx +++ b/apps/app/src/components/thread/timeline/ConversationMessageContent.tsx @@ -86,6 +86,7 @@ export interface ConversationMessageContentUserProps extends ConversationMessage initiator: TimelineUserConversationRow["initiator"]; mentions: readonly PromptTextMention[]; onAddToChat?: ThreadTimelineAddToChatHandler; + onEdit?: () => void; resolveMentionLink?: PromptMentionLinkResolver; resolveSegmentLinkHref?: TimelineTitleLinkResolver; onOpenLink?: ThreadTimelineLinkHandler; @@ -187,6 +188,7 @@ interface UserConversationMessageProps { mentions: readonly PromptTextMention[]; mobileActionDisplay: "inline" | "overflow"; onAddToChat?: ThreadTimelineAddToChatHandler; + onEdit?: () => void; onOpenLink?: ThreadTimelineLinkHandler; onOpenLocalFileLink?: ThreadTimelineLocalFileLinkHandler; projectId?: string; @@ -376,6 +378,7 @@ function UserConversationMessage({ mentions, mobileActionDisplay, onAddToChat, + onEdit, onOpenLink, onOpenLocalFileLink, pluginActions = [], @@ -491,6 +494,7 @@ function UserConversationMessage({ {messageText || addToChatAttachments.length > 0 || + onEdit !== undefined || pluginActions.length > 0 ? (
@@ -711,6 +716,7 @@ export function ConversationMessageContent( mentions={props.mentions} mobileActionDisplay={props.mobileActionDisplay ?? "overflow"} onAddToChat={props.onAddToChat} + onEdit={props.onEdit} onOpenLink={props.onOpenLink} onOpenLocalFileLink={onOpenLocalFileLink} projectId={projectId} diff --git a/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx b/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx index 87dd0cc931..25ed7e38d8 100644 --- a/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx +++ b/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx @@ -70,6 +70,22 @@ describe("MessageActionBar", () => { expect(onSendToMain).toHaveBeenCalledTimes(1); }); + it("renders edit as a native action and fires its handler", () => { + const onEdit = vi.fn(); + render( + , + ); + + fireEvent.click(screen.getByRole("button", { name: "Edit message" })); + + expect(onEdit).toHaveBeenCalledTimes(1); + }); + it("orders agent actions as copy, add, then fork", () => { const { container } = render( { ).toEqual(["Copy message", "Add to chat", "Fork into new thread"]); }); + it("includes edit in the compact mobile overflow", () => { + mockMobileCoarsePointer(); + const onEdit = vi.fn(); + render( + , + ); + + fireEvent.click(screen.getByRole("button", { name: "Message actions" })); + const content = + document.body.querySelector('[data-side="top"]'); + if (!content) throw new Error("Missing mobile message action menu"); + fireEvent.click( + within(content).getByRole("button", { name: "Edit message" }), + ); + + expect(onEdit).toHaveBeenCalledTimes(1); + }); + it("renders plugin actions after the native ones and fires their handlers", () => { const onSelect = vi.fn(); const { container } = render( diff --git a/apps/app/src/components/thread/timeline/MessageActionBar.tsx b/apps/app/src/components/thread/timeline/MessageActionBar.tsx index 5385989a31..68e087848e 100644 --- a/apps/app/src/components/thread/timeline/MessageActionBar.tsx +++ b/apps/app/src/components/thread/timeline/MessageActionBar.tsx @@ -55,6 +55,7 @@ interface MessageActionBarProps { text: string, attachments?: readonly PromptDraftAttachment[], ) => void; + onEdit?: () => void; onFork?: () => void; /** * Hand this message back to the main thread. Supplied only inside a side chat @@ -68,7 +69,7 @@ interface MessageActionBarProps { } interface MessageOverflowAction { - icon: "Copy" | "MessageSquarePlus" | "Fork" | "ArrowTurnBackward"; + icon: "Copy" | "Edit" | "MessageSquarePlus" | "Fork" | "ArrowTurnBackward"; /** Set on plugin-contributed actions; renders PluginActionIcon over `icon`. */ plugin?: { pluginId: string | null; icon: string | null }; /** Render key when `label` may not be unique (plugin actions). */ @@ -210,6 +211,7 @@ export function MessageActionBar({ mobileActionDisplay, addToChatAttachments = [], onAddToChat, + onEdit, onFork, onSendToMain, disabled, @@ -254,6 +256,15 @@ export function MessageActionBar({ }, ] : []), + ...(onEdit + ? [ + { + icon: "Edit" as const, + label: "Edit message", + onSelect: onEdit, + }, + ] + : []), ...(hasAddToChat ? [ { @@ -295,6 +306,7 @@ export function MessageActionBar({ if ( !hasCopy && + !onEdit && !hasAddToChat && !onFork && !onSendToMain && @@ -329,6 +341,30 @@ export function MessageActionBar({ ) : null} + {onEdit ? ( + + + + + + Edit message + + + ) : null} {hasAddToChat ? ( diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx index 74ea54d44b..14c1136701 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx @@ -322,6 +322,152 @@ describe("ThreadTimelineRows actions", () => { ).toContain("max-md:pointer-coarse:size-7"); }); + it("offers edit on every accepted user message, including the first turn", () => { + const onEditMessage = vi.fn(); + renderWithRouter( + , + ); + + const editButtons = screen.getAllByRole("button", { + name: "Edit message", + }); + expect(editButtons).toHaveLength(2); + fireEvent.click(editButtons[0]!); + expect(onEditMessage).toHaveBeenNthCalledWith(1, { + expectedRequestSequence: 3, + input: [{ type: "text", text: "An earlier request.", mentions: [] }], + }); + + fireEvent.click(editButtons[1]!); + expect(onEditMessage).toHaveBeenCalledWith({ + expectedRequestSequence: 7, + input: [ + { type: "text", text: "The latest request.", mentions: [] }, + { type: "localImage", path: "uploads/screenshot.png" }, + { type: "localFile", path: "uploads/spec.md" }, + ], + }); + }); + + it("replaces the matching sent message with an inline editor host", () => { + const onHostElementChange = vi.fn(); + const view = renderWithRouter( + , + ); + + const host = view.container.querySelector( + "[data-sent-message-inline-editor-host]", + ); + expect(host).not.toBeNull(); + expect(onHostElementChange).toHaveBeenCalledWith(host); + expect(screen.queryByText("The original request.")).toBeNull(); + expect( + screen.getByText("The existing response remains visible."), + ).toBeTruthy(); + + view.unmount(); + expect(onHostElementChange.mock.calls.at(-1)?.[0]).toBeNull(); + }); + + it("does not offer edit for a steer request", () => { + const markup = toMarkup( + , + ); + + expect(markup).not.toContain('aria-label="Edit message"'); + }); + + it("offers edit for an attachment-only request without requiring add-to-chat", () => { + const onEditMessage = vi.fn(); + renderWithRouter( + , + ); + + fireEvent.click(screen.getByRole("button", { name: "Edit message" })); + expect(onEditMessage).toHaveBeenCalledWith({ + expectedRequestSequence: 11, + input: [{ type: "localImage", path: "uploads/screenshot.png" }], + }); + }); + it("keeps the last real user action footer inline when a remote-image-only row follows", () => { const { container } = renderWithRouter( | undefined; + inlineMessageEditorRequestSequence: number | null; onMessageAddToChat: ThreadTimelineAddToChatHandler | undefined; onSendToMainMessage: ThreadTimelineSendToMainMessageHandler | undefined; onSelectionAddToChat: ThreadTimelineAddToChatHandler | undefined; @@ -896,6 +909,9 @@ function ConversationRow({ ); const { canSpawnChild, + inlineMessageEditorHostRef, + inlineMessageEditorRequestSequence, + onEditMessage, onForkMessage, onMessageAddToChat, onSendToMainMessage, @@ -916,6 +932,19 @@ function ConversationRow({ workspaceRootPath, } = useTimelineRendererStaticContext(); const senderThreadMetadataById = useSenderThreadMetadataContext(); + if ( + row.role === "user" && + inlineMessageEditorRequestSequence === row.sourceSeqStart + ) { + return ( +
+
+
+ ); + } // The narrow, stable message reference plugin actions receive — sourced // from row fields, never the row object itself. const messageReference: ThreadChatMessageReference = { @@ -951,6 +980,37 @@ function ConversationRow({ // anchor (thread-start) row — pass null for every other generated row so a // later cross-thread agent message in a forked thread keeps its own icon. const childOrigin = isForkSeedAnchorRow(row) ? threadChildOrigin : null; + const canEditMessage = + onEditMessage !== undefined && + row.initiator === "user" && + row.turnRequest.kind === "message" && + row.turnRequest.status === "accepted" && + (row.attachments?.imageUrls.length ?? 0) === 0; + const onEdit = canEditMessage + ? () => { + const input: PromptInput[] = []; + if (row.text.trim().length > 0) { + input.push({ + type: "text", + text: row.text, + mentions: [...row.mentions], + }); + } + for (const url of row.attachments?.imageUrls ?? []) { + input.push({ type: "image", url }); + } + for (const path of row.attachments?.localImagePaths ?? []) { + input.push({ type: "localImage", path }); + } + for (const path of row.attachments?.localFilePaths ?? []) { + input.push({ type: "localFile", path }); + } + onEditMessage({ + expectedRequestSequence: row.sourceSeqStart, + input, + }); + } + : undefined; return ( findLastActionableUserMessageId( rows, - props.onSelectionAddToChat !== undefined, + props.onSelectionAddToChat !== undefined || + props.onEditMessage !== undefined, ), - [props.onSelectionAddToChat, rows], + [props.onEditMessage, props.onSelectionAddToChat, rows], ); const scopeActive = isRunningThreadRuntimeDisplayStatus( props.threadRuntimeDisplayStatus, @@ -2018,6 +2080,11 @@ function ThreadTimelineRowsForTimelineView(props: ThreadTimelineRowsProps) { canSpawnChild: props.canSpawnChild ?? false, getViewRows, onForkMessage: props.onForkMessage, + onEditMessage: props.onEditMessage, + inlineMessageEditorHostRef: + props.inlineMessageEditor?.onHostElementChange, + inlineMessageEditorRequestSequence: + props.inlineMessageEditor?.expectedRequestSequence ?? null, onMessageAddToChat: props.onMessageAddToChat, onSendToMainMessage: props.onSendToMainMessage, onSelectionAddToChat: selectionAddToChatHandler, @@ -2047,6 +2114,8 @@ function ThreadTimelineRowsForTimelineView(props: ThreadTimelineRowsProps) { props.canSpawnChild, getViewRows, props.onForkMessage, + props.onEditMessage, + props.inlineMessageEditor, props.onMessageAddToChat, props.onSendToMainMessage, selectionAddToChatHandler, diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineSurface.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineSurface.tsx index c7f2bf4d81..63a2230eae 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineSurface.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineSurface.tsx @@ -20,6 +20,8 @@ import type { TimelineTitleActionResolver } from "./TimelineTitleView.js"; import { TimelineWorkingIndicator } from "./TimelineWorkingIndicator.js"; import type { ThreadTimelineForkMessageHandler, + ThreadTimelineEditMessageHandler, + ThreadTimelineInlineMessageEditor, ThreadTimelineAddToChatHandler, ThreadTimelineSendToMainMessageHandler, ThreadTimelineConsumerMessageAction, @@ -46,6 +48,8 @@ export interface ThreadTimelineSurfaceProps { loadingContent?: ReactNode; leadingContent?: ReactNode; onForkMessage?: ThreadTimelineForkMessageHandler; + onEditMessage?: ThreadTimelineEditMessageHandler; + inlineMessageEditor?: ThreadTimelineInlineMessageEditor; onMessageAddToChat?: ThreadTimelineAddToChatHandler; onSendToMainMessage?: ThreadTimelineSendToMainMessageHandler; onSelectionAddToChat?: ThreadTimelineAddToChatHandler; @@ -147,6 +151,8 @@ export function ThreadTimelineSurface({ loadingContent, leadingContent, onForkMessage, + onEditMessage, + inlineMessageEditor, onMessageAddToChat, onSendToMainMessage, onSelectionAddToChat, @@ -218,6 +224,8 @@ export function ThreadTimelineSurface({ canSpawnChild={canSpawnChild} threadChildOrigin={threadChildOrigin} onForkMessage={onForkMessage} + onEditMessage={onEditMessage} + inlineMessageEditor={inlineMessageEditor} onMessageAddToChat={onMessageAddToChat} onSendToMainMessage={onSendToMainMessage} onSelectionAddToChat={onSelectionAddToChat} diff --git a/apps/app/src/components/thread/timeline/index.ts b/apps/app/src/components/thread/timeline/index.ts index d5837c6e1d..383c6ae29b 100644 --- a/apps/app/src/components/thread/timeline/index.ts +++ b/apps/app/src/components/thread/timeline/index.ts @@ -30,6 +30,9 @@ export { type ThreadContextWindowIndicatorProps, } from "./ThreadContextWindowIndicator.js"; export type { + ThreadTimelineEditMessageHandler, + ThreadTimelineEditMessageTarget, + ThreadTimelineInlineMessageEditor, ThreadTimelineForkMessageHandler, ThreadTimelineAddToChatHandler, ThreadTimelineSendToMainMessageHandler, diff --git a/apps/app/src/components/thread/timeline/types.ts b/apps/app/src/components/thread/timeline/types.ts index a46487b64d..f1c2b3aa2b 100644 --- a/apps/app/src/components/thread/timeline/types.ts +++ b/apps/app/src/components/thread/timeline/types.ts @@ -1,4 +1,5 @@ import type { ThreadChatMessageReference } from "@bb/plugin-sdk"; +import type { PromptInput } from "@bb/domain"; import type { MarkdownPreviewLocalFileLink, MarkdownPreviewLocalFileLinkHandler, @@ -33,6 +34,28 @@ export type ThreadTimelineForkMessageHandler = ( target: ThreadTimelineForkMessageTarget, ) => void; +export interface ThreadTimelineEditMessageTarget { + /** Event sequence of the user request the edit would replace. */ + expectedRequestSequence: number; + /** User-visible input reconstructed from the unchanged timeline row. */ + input: PromptInput[]; +} + +/** + * Start a client-local edit session for an eligible user request. + * Supplying this handler only enables the affordance; the row never mutates + * thread or provider state itself. + */ +export type ThreadTimelineEditMessageHandler = ( + target: ThreadTimelineEditMessageTarget, +) => void; + +/** Client-local editor mounted in place of one user conversation row. */ +export interface ThreadTimelineInlineMessageEditor { + expectedRequestSequence: number; + onHostElementChange: (element: HTMLDivElement | null) => void; +} + export interface ThreadTimelineSendToMainMessageTarget { /** Visible text of the side-chat agent message to hand back to the main thread. */ messageText: string; diff --git a/apps/app/src/hooks/cache-owners/mutation-cache-effects.ts b/apps/app/src/hooks/cache-owners/mutation-cache-effects.ts index 832d5192d4..37b113f98e 100644 --- a/apps/app/src/hooks/cache-owners/mutation-cache-effects.ts +++ b/apps/app/src/hooks/cache-owners/mutation-cache-effects.ts @@ -212,6 +212,23 @@ export function invalidateThreadAcceptedMessageQueriesWithoutRealtime({ }); } +export function invalidateThreadHistoryRewriteQueries({ + queryClient, + threadId, +}: ThreadArg): void { + invalidateThreadAcceptedMessageQueriesWithoutRealtime({ + queryClient, + threadId, + }); + queryClient.invalidateQueries({ queryKey: threadSearchQueryKeyPrefix() }); + invalidateQueryKeys({ + queryClient, + queryKeys: getProjectPromptHistoryInvalidationQueryKeys({ + projectId: undefined, + }), + }); +} + export function invalidateThreadStopQueries({ queryClient, threadId, diff --git a/apps/app/src/hooks/cache-owners/realtime-cache-registry.ts b/apps/app/src/hooks/cache-owners/realtime-cache-registry.ts index 3759688ea5..8613294601 100644 --- a/apps/app/src/hooks/cache-owners/realtime-cache-registry.ts +++ b/apps/app/src/hooks/cache-owners/realtime-cache-registry.ts @@ -269,6 +269,18 @@ export const REALTIME_THREAD_CHANGE_REGISTRY = { dirtyThreadPromptHistoryQueriesForTurnRequests, // Follow-up recall is built from client turn requests. ], }, + "history-rewritten": { + flush: "immediate", + dirty: [ + dirtyThreadListQueries, + dirtyThreadDetailQueries, + dirtyThreadSearchQueries, + dirtyThreadTimelineRewriteQueries, + dirtyThreadQueueContentQueries, + dirtyProjectPromptHistoryQueries, + dirtyThreadPendingInteractionQueries, + ], + }, "interactions-changed": { flush: "debounced", dirty: [ @@ -673,6 +685,12 @@ function dirtyThreadTimelineQueries({ }); } +function dirtyThreadTimelineRewriteQueries({ + threadId, +}: ThreadRealtimeDirtyContext): QueryKey[] { + return getThreadTimelineInvalidationQueryKeys({ threadId }); +} + function dirtyThreadQueueContentQueries({ threadId, }: ThreadRealtimeDirtyContext): QueryKey[] { diff --git a/apps/app/src/hooks/mutations/mutation-request-types.ts b/apps/app/src/hooks/mutations/mutation-request-types.ts index 8fe79a4eea..733687338a 100644 --- a/apps/app/src/hooks/mutations/mutation-request-types.ts +++ b/apps/app/src/hooks/mutations/mutation-request-types.ts @@ -1,5 +1,6 @@ import type { EnvironmentActionRequest, + EditMessageRequest, SendMessageRequest, } from "@bb/server-contract"; @@ -10,3 +11,7 @@ export type RequestEnvironmentActionMutationRequest = { export interface SendThreadMessageMutationRequest extends SendMessageRequest { id: string; } + +export interface EditMessageMutationRequest extends EditMessageRequest { + id: string; +} diff --git a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx index 2935f16d54..a35f7eccc3 100644 --- a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx +++ b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx @@ -18,6 +18,7 @@ import { useClearThreadGoal, useCreateThreadQueuedMessage, useDeleteThreadQueuedMessage, + useEditThreadMessage, useSetThreadQueuedMessageGroupBoundary, useSendThreadMessage, } from "./thread-runtime-mutations"; @@ -30,6 +31,7 @@ vi.mock("@/lib/sdk", async (importOriginal) => { threads: { cancelPlan: vi.fn(), clearGoal: vi.fn(), + editMessage: vi.fn(), queuedMessages: { create: vi.fn(), delete: vi.fn(), @@ -115,6 +117,11 @@ const executionInputSources = { beforeEach(() => { vi.mocked(sdk.threads.cancelPlan).mockResolvedValue({ ok: true }); vi.mocked(sdk.threads.clearGoal).mockResolvedValue({ ok: true }); + vi.mocked(sdk.threads.editMessage).mockResolvedValue({ + ok: true, + operationId: "edit-op-1", + requestSequence: 42, + }); vi.mocked(sdk.threads.send).mockResolvedValue({ ok: true }); vi.mocked(sdk.threads.queuedMessages.create).mockResolvedValue( makeQueuedMessage(), @@ -129,6 +136,55 @@ afterEach(() => { }); describe("thread runtime mutations", () => { + it("keeps the existing timeline while an edit is pending and invalidates it after success", async () => { + const { queryClient, wrapper } = createQueryClientTestHarness(); + const invalidateQueries = vi.spyOn(queryClient, "invalidateQueries"); + const edit = deferred<{ + ok: true; + operationId: string; + requestSequence: number; + }>(); + vi.mocked(sdk.threads.editMessage).mockReturnValueOnce(edit.promise); + const timeline = makeBannerTimeline(); + queryClient.setQueryData(threadTimelineQueryKey("thread-1"), timeline); + const { result } = renderHook(() => useEditThreadMessage(), { + wrapper, + }); + + let editPromise!: Promise; + act(() => { + editPromise = result.current.mutateAsync({ + id: "thread-1", + operationId: "edit-op-1", + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }); + }); + await waitFor(() => expect(sdk.threads.editMessage).toHaveBeenCalledOnce()); + expect(queryClient.getQueryData(threadTimelineQueryKey("thread-1"))).toBe( + timeline, + ); + expect(invalidateQueries).not.toHaveBeenCalled(); + + edit.resolve({ + ok: true, + operationId: "edit-op-1", + requestSequence: 42, + }); + await act(async () => { + await editPromise; + }); + expect(sdk.threads.editMessage).toHaveBeenCalledWith({ + threadId: "thread-1", + operationId: "edit-op-1", + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }); + expect(invalidateQueries).toHaveBeenCalledWith( + expect.objectContaining({ queryKey: threadTimelineQueryKey("thread-1") }), + ); + }); + it.each([ ["Plan", useCancelThreadPlan, () => sdk.threads.cancelPlan], ["Goal", useClearThreadGoal, () => sdk.threads.clearGoal], diff --git a/apps/app/src/hooks/mutations/thread-runtime-mutations.ts b/apps/app/src/hooks/mutations/thread-runtime-mutations.ts index 947dbad54d..bf78ebd0d3 100644 --- a/apps/app/src/hooks/mutations/thread-runtime-mutations.ts +++ b/apps/app/src/hooks/mutations/thread-runtime-mutations.ts @@ -11,7 +11,10 @@ import type { import { BbHttpError, sdk } from "@/lib/sdk"; import { wsManager } from "@/lib/ws"; import type { QueuedMessageReorderRequest } from "@/lib/queued-message-reorder"; -import type { SendThreadMessageMutationRequest } from "./mutation-request-types"; +import type { + EditMessageMutationRequest, + SendThreadMessageMutationRequest, +} from "./mutation-request-types"; import { applyCreateThreadResult, applyQueuedMessageCreateResult, @@ -46,7 +49,10 @@ import { type StopThreadTransaction, type UpdateQueuedMessageTransaction, } from "../cache-owners/thread-runtime-cache-owner"; -import { invalidateThreadBannerQueries } from "../cache-owners/mutation-cache-effects"; +import { + invalidateThreadBannerQueries, + invalidateThreadHistoryRewriteQueries, +} from "../cache-owners/mutation-cache-effects"; interface CreateThreadQueuedMessageMutationRequest extends CreateQueuedMessageRequest { id: string; @@ -209,6 +215,25 @@ export function useSendThreadMessage() { }); } +export function useEditThreadMessage() { + const queryClient = useQueryClient(); + return useMutation({ + meta: { + errorMessage: "Failed to edit the message.", + lifecycleOperation: "edit_message", + showErrorToast: false, + }, + mutationFn: ({ id, ...request }: EditMessageMutationRequest) => + sdk.threads.editMessage({ threadId: id, ...request }), + onSuccess: (_result, variables) => { + invalidateThreadHistoryRewriteQueries({ + queryClient, + threadId: variables.id, + }); + }, + }); +} + export function useCreateThreadQueuedMessage() { const queryClient = useQueryClient(); diff --git a/apps/app/src/lib/lifecycle-errors.ts b/apps/app/src/lib/lifecycle-errors.ts index 23e8911ce6..f843a3a2cc 100644 --- a/apps/app/src/lib/lifecycle-errors.ts +++ b/apps/app/src/lib/lifecycle-errors.ts @@ -11,6 +11,7 @@ export type LifecycleErrorOperation = | "archive_thread" | "commit" | "create_thread" + | "edit_message" | "load_diff" | "load_git_status" | "load_thread_storage" @@ -88,6 +89,8 @@ function operationTitle(operation: LifecycleErrorOperation): string { return "Commit failed"; case "create_thread": return "Failed to create thread"; + case "edit_message": + return "Failed to edit message"; case "load_diff": return "Failed to load diff"; case "load_git_status": diff --git a/apps/app/src/lib/mutation-errors.ts b/apps/app/src/lib/mutation-errors.ts index 256e156e95..9f8a135f4b 100644 --- a/apps/app/src/lib/mutation-errors.ts +++ b/apps/app/src/lib/mutation-errors.ts @@ -82,6 +82,7 @@ function toLifecycleErrorOperation( case "archive_thread": case "commit": case "create_thread": + case "edit_message": case "load_diff": case "load_git_status": case "load_thread_storage": diff --git a/apps/app/src/lib/system-config-atoms.ts b/apps/app/src/lib/system-config-atoms.ts index b62795a708..2d3f59910b 100644 --- a/apps/app/src/lib/system-config-atoms.ts +++ b/apps/app/src/lib/system-config-atoms.ts @@ -15,6 +15,7 @@ const unavailableSystemConfig: SystemConfigResponse = { keybindingOverrides: [], experiments: { claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: false, }, diff --git a/apps/app/src/views/SettingsView.experiments.test.tsx b/apps/app/src/views/SettingsView.experiments.test.tsx index 75abe83d7c..88099fb196 100644 --- a/apps/app/src/views/SettingsView.experiments.test.tsx +++ b/apps/app/src/views/SettingsView.experiments.test.tsx @@ -6,6 +6,7 @@ import { ExperimentsSettingsSection } from "./SettingsView"; afterEach(cleanup); function renderSection(overrides?: { + onEditMessagesEnabledChange?: (enabled: boolean) => void; onNewOnboardingEnabledChange?: (enabled: boolean) => void; onToolsHubEnabledChange?: (enabled: boolean) => void; }) { @@ -13,8 +14,12 @@ function renderSection(overrides?: { { + it("reports edit-message changes", () => { + const onChange = vi.fn(); + renderSection({ onEditMessagesEnabledChange: onChange }); + fireEvent.click(screen.getByLabelText("Edit messages")); + expect(onChange).toHaveBeenCalledWith(true); + }); + it("reports new onboarding changes", () => { const onChange = vi.fn(); renderSection({ onNewOnboardingEnabledChange: onChange }); diff --git a/apps/app/src/views/SettingsView.stories.tsx b/apps/app/src/views/SettingsView.stories.tsx index 466e7f2ba4..7a72325ecb 100644 --- a/apps/app/src/views/SettingsView.stories.tsx +++ b/apps/app/src/views/SettingsView.stories.tsx @@ -341,6 +341,7 @@ function ExperimentsStory() { state.experiments.claudeCodeMockCliTraffic } disabled={false} + editMessagesEnabled={state.experiments.editMessages} newOnboardingEnabled={state.experiments.newOnboarding} onClaudeCodeMockCliTrafficEnabledChange={(enabled) => state.setExperiments((current) => ({ @@ -348,6 +349,12 @@ function ExperimentsStory() { claudeCodeMockCliTraffic: enabled, })) } + onEditMessagesEnabledChange={(enabled) => + state.setExperiments((current) => ({ + ...current, + editMessages: enabled, + })) + } onNewOnboardingEnabledChange={(enabled) => state.setExperiments((current) => ({ ...current, diff --git a/apps/app/src/views/SettingsView.tsx b/apps/app/src/views/SettingsView.tsx index 76691dc212..a3704fb25f 100644 --- a/apps/app/src/views/SettingsView.tsx +++ b/apps/app/src/views/SettingsView.tsx @@ -211,8 +211,10 @@ export interface ExperimentsSettingsSectionProps { /** True while the config query hasn't loaded or a toggle write is in flight. */ disabled: boolean; claudeCodeMockCliTrafficEnabled: boolean; + editMessagesEnabled: boolean; newOnboardingEnabled: boolean; onClaudeCodeMockCliTrafficEnabledChange: (enabled: boolean) => void; + onEditMessagesEnabledChange: (enabled: boolean) => void; onNewOnboardingEnabledChange: (enabled: boolean) => void; onToolsHubEnabledChange: (enabled: boolean) => void; toolsHubEnabled: boolean; @@ -953,13 +955,16 @@ export function ProviderSettingsSection({ } const CLAUDE_CODE_MOCK_CLI_TRAFFIC_EXPERIMENT_LABEL = "Mock CLI Traffic"; +const EDIT_MESSAGES_EXPERIMENT_LABEL = "Edit messages"; const NEW_ONBOARDING_EXPERIMENT_LABEL = "New onboarding"; const EXTENSIONS_EXPERIMENT_LABEL = "Extensions"; export function ExperimentsSettingsSection({ claudeCodeMockCliTrafficEnabled, disabled, + editMessagesEnabled, newOnboardingEnabled, onClaudeCodeMockCliTrafficEnabledChange, + onEditMessagesEnabledChange, onNewOnboardingEnabledChange, onToolsHubEnabledChange, toolsHubEnabled, @@ -983,6 +988,18 @@ export function ExperimentsSettingsSection({ /> + + + + + updateExperimentsMutation.mutate({ + ...experiments, + editMessages: enabled, + }) + } newOnboardingEnabled={experiments.newOnboarding} onNewOnboardingEnabledChange={(enabled) => updateExperimentsMutation.mutate({ diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx index 22dbdfc904..f152c91183 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx @@ -30,7 +30,10 @@ import { resetPluginSlotStoreForTest, setPluginSlotRegistrations, } from "@/lib/plugin-slots"; -import { ThreadDetailPromptArea } from "./ThreadDetailPromptArea"; +import { + ThreadDetailPromptArea, + type ThreadDetailSentMessageEdit, +} from "./ThreadDetailPromptArea"; const mocks = vi.hoisted(() => ({ cancelThreadPlanMutate: vi.fn(), @@ -87,6 +90,7 @@ vi.mock("@/components/promptbox/FollowUpPromptBox", () => ({ pluginComposerHost, showScrollToBottomButton, stack, + suppressPluginComposerCustomizations, textEffects, }: { attachments: { @@ -97,6 +101,7 @@ vi.mock("@/components/promptbox/FollowUpPromptBox", () => ({ message: string; onChangeMessage: (message: string, mentions: []) => void; onSubmit: () => void; + submitTitle?: string; submitMode: { kind: string; reason?: string }; } | null; execution: { @@ -116,6 +121,7 @@ vi.mock("@/components/promptbox/FollowUpPromptBox", () => ({ pluginComposerHost?: PluginComposerHost | null; showScrollToBottomButton?: boolean; stack: ReactNode; + suppressPluginComposerCustomizations?: boolean; textEffects?: readonly { effect: { className: string }; }[]; @@ -126,6 +132,10 @@ vi.mock("@/components/promptbox/FollowUpPromptBox", () => ({
{composer?.submitMode.kind}:{composer?.submitMode.reason ?? ""}
+
{composer?.submitTitle ?? "Submit"}
+
+ {suppressPluginComposerCustomizations ? "true" : "false"} +
{execution.model.active?.model}
{execution.reasoning.value}
@@ -626,6 +636,7 @@ interface RenderPromptAreaOptions { modelFallback?: ThreadTimelineModelFallback | null; pendingInteractions?: readonly PendingInteraction[]; pendingInteractionsInitialLoading?: boolean; + sentMessageEdit?: ThreadDetailSentMessageEdit; thread?: ThreadWithRuntime; } @@ -636,6 +647,7 @@ function buildPromptAreaElement({ modelFallback = null, pendingInteractions = [], pendingInteractionsInitialLoading = false, + sentMessageEdit, thread = makeThread(), }: RenderPromptAreaOptions = {}) { return ( @@ -665,6 +677,7 @@ function buildPromptAreaElement({ isPending: false, mutateAsync: vi.fn(), }} + sentMessageEdit={sentMessageEdit} steerActiveThreadOnEnter={false} thread={thread} workspaceChangedFilesSection={null} @@ -706,11 +719,153 @@ beforeEach(() => { afterEach(() => { cleanup(); + document + .querySelectorAll("[data-sent-message-editor-test-host]") + .forEach((element) => element.remove()); resetPluginSlotStoreForTest(); vi.clearAllMocks(); }); describe("ThreadDetailPromptArea", () => { + it("keeps sent-message edit submission out of the normal send path", () => { + mocks.defaultExecutionOptions = { + model: "gpt-5", + permissionMode: "auto", + reasoningLevel: "medium", + serviceTier: "default", + source: "client/turn/requested", + }; + mocks.promptDraft.text = "Untouched follow-up draft"; + const onSubmit = vi.fn(); + const onCancel = vi.fn(); + const updateDraft = vi.fn(); + const hostElement = document.createElement("div"); + hostElement.dataset.sentMessageEditorTestHost = ""; + document.body.append(hostElement); + + renderPromptArea({ + sentMessageEdit: { + draft: { + text: "Edited request", + mentions: [], + attachments: [], + }, + expectedRequestSequence: 42, + hostElement, + isSubmitting: false, + operationId: "edit-operation-1", + onCancel, + onSubmit, + updateDraft, + }, + }); + + const inlineEditor = within(hostElement); + const editingLabel = inlineEditor.getByText("Editing message"); + const editingFrame = editingLabel.closest( + '[data-inline-message-editor-frame="cap"]', + ); + expect(editingFrame).not.toBeNull(); + expect(editingLabel.closest("section")?.className).toContain("-mb-5"); + expect(editingLabel.closest("section")?.className).toContain( + "rounded-b-none", + ); + expect(inlineEditor.getByTestId("submit-title").textContent).toBe( + "Submit edit (Enter)", + ); + expect( + inlineEditor.getByTestId("plugin-customizations-suppressed").textContent, + ).toBe("true"); + expect( + ( + inlineEditor.getByRole("textbox", { + name: "Composer message", + }) as HTMLInputElement + ).value, + ).toBe("Edited request"); + const bottomComposer = screen + .getAllByTestId("follow-up-prompt-box") + .find((element) => !hostElement.contains(element)); + expect(bottomComposer).toBeDefined(); + expect( + ( + within(bottomComposer!).getByRole("textbox", { + name: "Composer message", + }) as HTMLInputElement + ).value, + ).toBe("Untouched follow-up draft"); + fireEvent.click( + inlineEditor.getByRole("button", { + name: "Simulate plugin replacement", + }), + ); + expect(updateDraft).toHaveBeenCalledTimes(1); + expect(mocks.promptDraft.setDraft).not.toHaveBeenCalled(); + + fireEvent.click( + inlineEditor.getByRole("button", { name: "Submit composer" }), + ); + + expect(onSubmit).toHaveBeenCalledWith({ + execution: { + model: "gpt-5", + permissionMode: "auto", + reasoningLevel: "medium", + serviceTier: undefined, + supportsServiceTier: false, + executionInputSources: {}, + }, + expectedRequestSequence: 42, + input: [{ type: "text", text: "Edited request", mentions: [] }], + }); + expect(mocks.promptDraft.clearIfCurrentMatches).not.toHaveBeenCalled(); + expect(mocks.createQueuedMessageMutateAsync).not.toHaveBeenCalled(); + + fireEvent.click( + inlineEditor.getByRole("button", { + name: "Stop editing sent message", + }), + ); + expect(onCancel).toHaveBeenCalledTimes(1); + }); + + it("blocks a staged sent-message edit when the thread becomes ineligible", () => { + mocks.defaultExecutionOptions = { + model: "gpt-5", + permissionMode: "auto", + reasoningLevel: "medium", + serviceTier: "default", + source: "client/turn/requested", + }; + mocks.queuedMessages = [makeQueuedMessage()]; + const hostElement = document.createElement("div"); + hostElement.dataset.sentMessageEditorTestHost = ""; + document.body.append(hostElement); + const onSubmit = vi.fn(); + + renderPromptArea({ + sentMessageEdit: { + draft: { text: "Edited request", mentions: [], attachments: [] }, + expectedRequestSequence: 42, + hostElement, + isSubmitting: false, + operationId: "edit-operation-1", + onCancel: vi.fn(), + onSubmit, + updateDraft: vi.fn(), + }, + }); + + const inlineEditor = within(hostElement); + expect(inlineEditor.getByTestId("submit-mode").textContent).toBe( + "blocked:unavailable", + ); + fireEvent.click( + inlineEditor.getByRole("button", { name: "Submit composer" }), + ); + expect(onSubmit).not.toHaveBeenCalled(); + }); + it("keeps the queued drawer adjacent to the bottom composer", () => { mocks.queuedMessages = [makeQueuedMessage()]; diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx index d531629ecb..d8a30d677f 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx @@ -1,4 +1,5 @@ import { useCallback, useMemo, useRef, useState } from "react"; +import { createPortal } from "react-dom"; import { useNavigate } from "react-router-dom"; import type { IconName } from "@bb/shared-ui/icon"; import type { PromptMentionLinkResolver } from "@/components/promptbox/editor/prompt-mention-link"; @@ -10,6 +11,8 @@ import { isPluginPendingInteraction, PERSONAL_PROJECT_ID } from "@bb/domain"; import type { EnvironmentStatus, PendingInteraction, + PromptInput, + PromptTextMention, ThreadQueuedMessage, ThreadPullRequest, ThreadTimelineActivePromptMode, @@ -45,6 +48,7 @@ import { ThreadPromptModeCard } from "@/components/promptbox/banner/ThreadPrompt import { ThreadWorkflowCard } from "@/components/promptbox/banner/ThreadWorkflowCard"; import { ThreadBackgroundCommandsCard } from "@/components/promptbox/banner/ThreadBackgroundCommandsCard"; import { ThreadModelFallbackCard } from "@/components/promptbox/banner/ThreadModelFallbackCard"; +import { InlineMessageEditorFrame } from "@/components/promptbox/InlineMessageEditorFrame"; import type { WorkspaceChangedFileSelection, WorkspaceChangedFilesSection, @@ -62,6 +66,7 @@ import { useProjectDisplayName } from "@/hooks/queries/sidebar-navigation-query" import { useActiveComposerDraft, useComposerAttachmentUploads, + useDraftAttachmentUploads, useComposerTypeahead, useInlineQueuedMessageEditing, useQueuedMessageActions, @@ -86,6 +91,11 @@ import { getProjectComposeRoutePath } from "@/lib/route-paths"; import { getThreadDisplayTitle } from "@/lib/thread-title"; import { buildThreadHandoffLocationState } from "@/lib/thread-handoff-request"; import { appToast } from "@/components/ui/app-toast"; +import { + promptDraftToInput, + type PromptDraftAttachment, + type PromptDraftState, +} from "@/lib/prompt-draft"; import { FollowUpPromptBox, type FollowUpComposerProps, @@ -105,6 +115,23 @@ import { const ignorePromptBannerFileClick = () => {}; +export interface ThreadDetailSentMessageEdit { + draft: PromptDraftState; + expectedRequestSequence: number; + hostElement: HTMLDivElement | null; + isSubmitting: boolean; + operationId: string; + onCancel: () => void; + onSubmit: (target: { + execution: FollowUpExecutionSelection; + expectedRequestSequence: number; + input: PromptInput[]; + }) => void; + updateDraft: ( + update: (current: PromptDraftState) => PromptDraftState, + ) => void; +} + export const THREAD_DETAIL_COMPOSER_TEXTAREA_ID = "thread-detail-follow-up-composer"; @@ -179,6 +206,8 @@ interface ThreadDetailPromptAreaProps { /** Pull request summary for the active thread branch. Null when there is no PR. */ pullRequest: ThreadPullRequest | null; sendMessage: SendMessageMutationLike; + /** Present only while a sent-message editor is mounted in the timeline. */ + sentMessageEdit?: ThreadDetailSentMessageEdit; steerActiveThreadOnEnter: boolean; /** * Bumped by the timeline host each time a quote is appended to the shared @@ -223,6 +252,7 @@ export function ThreadDetailPromptArea({ childThreadsSection, pullRequest, sendMessage, + sentMessageEdit, steerActiveThreadOnEnter, composerFocusRequestNonce, thread, @@ -256,9 +286,11 @@ export function ThreadDetailPromptArea({ const focusBottomPluginComposer = useCallback(() => { setBottomPluginFocusNonce((nonce) => nonce + 1); }, []); - const focusQueuedPluginComposer = useCallback(() => { + const focusInlinePluginComposer = useCallback(() => { setEditFocusNonce((nonce) => nonce + 1); }, []); + const sentMessageEditRef = useRef(sentMessageEdit); + sentMessageEditRef.current = sentMessageEdit; const clearInlineAttachmentErrorRef = useRef<() => void>(() => {}); const { inlineEditingQueuedMessage, @@ -310,6 +342,22 @@ export function ThreadDetailPromptArea({ inlineEditingQueuedMessageRef, commitInlineQueuedMessage, }); + const updateSentMessageEditDraft = sentMessageEdit?.updateDraft; + const addSentMessageEditAttachment = useCallback( + (attachment: PromptDraftAttachment) => { + updateSentMessageEditDraft?.((current) => + current.attachments.some( + (existing) => existing.path === attachment.path, + ) + ? current + : { + ...current, + attachments: [...current.attachments, attachment], + }, + ); + }, + [updateSentMessageEditDraft], + ); const { bottomAttachmentError, setBottomAttachmentError, @@ -326,6 +374,19 @@ export function ThreadDetailPromptArea({ inlineEditingQueuedMessageRef, commitInlineQueuedMessage, }); + const { + attachmentError: sentMessageAttachmentError, + handleAttachFiles: handleAttachSentMessageFiles, + isAttachingFiles: isAttachingSentMessageFiles, + } = useDraftAttachmentUploads({ + projectId, + target: sentMessageEdit + ? { + key: sentMessageEdit.operationId, + addAttachment: addSentMessageEditAttachment, + } + : null, + }); clearInlineAttachmentErrorRef.current = () => setInlineAttachmentError(null); const promptTextEffects = useComposerTextEffects(promptDraft.storageKey); const queuedComposerTextEffectKey = inlineEditingQueuedMessage @@ -334,6 +395,11 @@ export function ThreadDetailPromptArea({ const queuedComposerTextEffects = useComposerTextEffects( queuedComposerTextEffectKey, ); + const sentMessageComposerTextEffects = useComposerTextEffects( + sentMessageEdit + ? `sent-message:${thread.id}:${sentMessageEdit.operationId}` + : null, + ); const [expandedBannerSection, setExpandedBannerSection] = useState(null); const pullRequestSection = @@ -587,13 +653,13 @@ export function ThreadDetailPromptArea({ commitInlineQueuedMessage({ ...current, draft }); } }, - focus: focusQueuedPluginComposer, + focus: focusInlinePluginComposer, }; }, [ inlineEditingQueuedMessage, inlineEditingQueuedMessageRef, commitInlineQueuedMessage, - focusQueuedPluginComposer, + focusInlinePluginComposer, thread.id, ]); const normalPluginComposerHost = useMemo( @@ -613,6 +679,27 @@ export function ThreadDetailPromptArea({ : null, [activeComposerDraft, queuedPluginComposerHostBinding], ); + const sentMessagePluginComposerHost = + useMemo(() => { + if (!sentMessageEdit) return null; + const { draft, operationId } = sentMessageEdit; + return { + scope: { kind: "thread", threadId: thread.id }, + textEffectKey: `sent-message:${thread.id}:${operationId}`, + draft, + getCurrent: () => { + const current = sentMessageEditRef.current; + return current?.operationId === operationId ? current.draft : draft; + }, + setDraft: (nextDraft) => { + const current = sentMessageEditRef.current; + if (current?.operationId === operationId) { + current.updateDraft(() => nextDraft); + } + }, + focus: focusInlinePluginComposer, + }; + }, [focusInlinePluginComposer, sentMessageEdit, thread.id]); usePublishPluginComposerHost( queuedPluginComposerHost ?? normalPluginComposerHost, ); @@ -854,6 +941,33 @@ export function ThreadDetailPromptArea({ promptDraft.removeAttachment, ], ); + const sentMessageAttachmentsConfig = useMemo( + () => + sentMessageEdit + ? { + items: sentMessageEdit.draft.attachments, + projectId, + isAttaching: isAttachingSentMessageFiles, + error: sentMessageAttachmentError, + onAttachFiles: handleAttachSentMessageFiles, + onRemove: (path: string) => { + sentMessageEdit.updateDraft((current) => ({ + ...current, + attachments: current.attachments.filter( + (attachment) => attachment.path !== path, + ), + })); + }, + } + : null, + [ + handleAttachSentMessageFiles, + isAttachingSentMessageFiles, + projectId, + sentMessageAttachmentError, + sentMessageEdit, + ], + ); const inlineAttachmentsConfig = useMemo( () => ({ items: activeComposerDraft.attachments, @@ -921,6 +1035,85 @@ export function ThreadDetailPromptArea({ thread.id, ], ); + const sentMessageEditInput = useMemo( + () => (sentMessageEdit ? promptDraftToInput(sentMessageEdit.draft) : []), + [sentMessageEdit], + ); + const canSubmitSentMessageEdit = + sentMessageEdit !== undefined && + sentMessageEditInput.length > 0 && + submitMode.kind === "ready" && + !shouldHideComposer && + !isDefaultExecutionOptionsLoading && + !isAttachingSentMessageFiles && + !isFollowUpSubmitting && + !isQueueMutationPending && + !sentMessageEdit.isSubmitting && + queuedMessages.length === 0 && + activeWorkflows.length === 0 && + activeBackgroundCommands.length === 0; + const handleSentMessageEditSubmit = useCallback(() => { + if (!sentMessageEdit || !canSubmitSentMessageEdit) { + return; + } + sentMessageEdit.onSubmit({ + execution: followUpExecutionSelection, + expectedRequestSequence: sentMessageEdit.expectedRequestSequence, + input: sentMessageEditInput, + }); + }, [ + canSubmitSentMessageEdit, + followUpExecutionSelection, + sentMessageEdit, + sentMessageEditInput, + ]); + const handleSentMessageEditDraftChange = useCallback( + (text: string, mentions: PromptTextMention[]) => { + sentMessageEdit?.updateDraft((current) => ({ + ...current, + text, + mentions, + })); + }, + [sentMessageEdit], + ); + const sentMessageComposerConfig = useMemo( + () => + sentMessageEdit + ? { + history: { + currentDraft: sentMessageEdit.draft, + entries: [], + onSelectEntry: (draft) => + sentMessageEdit.updateDraft(() => draft), + resetKey: `${thread.id}:${sentMessageEdit.operationId}`, + }, + isFollowUpSubmitting: sentMessageEdit.isSubmitting, + message: sentMessageEdit.draft.text, + mentionRanges: sentMessageEdit.draft.mentions, + onChangeMessage: handleSentMessageEditDraftChange, + onModifierSubmit: handleSentMessageEditSubmit, + onSubmit: handleSentMessageEditSubmit, + submitTitle: "Submit edit (Enter)", + compactPromptPlaceholder: "Edit message", + promptPlaceholder: "Edit message", + canModifierSubmit: canSubmitSentMessageEdit, + steerActiveThreadOnEnter: false, + submitMode: canSubmitSentMessageEdit + ? { kind: "ready" } + : { kind: "blocked", reason: "unavailable" }, + threadRuntimeDisplayStatus: runtimeDisplayStatus, + } + : null, + [ + canSubmitSentMessageEdit, + handleSentMessageEditDraftChange, + handleSentMessageEditSubmit, + runtimeDisplayStatus, + sentMessageEdit, + thread.id, + ], + ); const inlineComposerConfig = useMemo( () => inlineEditingQueuedMessage @@ -1023,27 +1216,30 @@ export function ThreadDetailPromptArea({ supportsServiceTier, ], ); - const inlineExecutionConfig = useMemo(() => { - if (!inlineEditingQueuedMessage) return null; + const compactExecutionConfig = useMemo(() => { const { footerAction: _footerAction, ...executionWithoutFooterAction } = bottomExecutionConfig; + return executionWithoutFooterAction; + }, [bottomExecutionConfig]); + const inlineExecutionConfig = useMemo(() => { + if (!inlineEditingQueuedMessage) return null; return { - ...executionWithoutFooterAction, + ...compactExecutionConfig, model: { - ...bottomExecutionConfig.model, + ...compactExecutionConfig.model, active: { model: inlineEditingQueuedMessage.model }, selected: inlineEditingQueuedMessage.model, }, serviceTier: { - ...bottomExecutionConfig.serviceTier, + ...compactExecutionConfig.serviceTier, value: inlineEditingQueuedMessage.serviceTier, }, reasoning: { - ...bottomExecutionConfig.reasoning, + ...compactExecutionConfig.reasoning, value: inlineEditingQueuedMessage.reasoningLevel, }, }; - }, [bottomExecutionConfig, inlineEditingQueuedMessage]); + }, [compactExecutionConfig, inlineEditingQueuedMessage]); const bottomPermissionConfig = useMemo( () => ({ @@ -1173,6 +1369,60 @@ export function ThreadDetailPromptArea({ queuedPluginComposerHost, typeaheadConfig, ]); + const sentMessageEditorPortal = useMemo(() => { + if ( + !sentMessageEdit || + !sentMessageEdit.hostElement || + !sentMessageAttachmentsConfig || + !sentMessageComposerConfig || + !sentMessagePluginComposerHost + ) { + return null; + } + return createPortal( + + + , + sentMessageEdit.hostElement, + ); + }, [ + bottomPermissionConfig, + compactExecutionConfig, + editFocusNonce, + promptActions, + sentMessageAttachmentsConfig, + sentMessageComposerConfig, + sentMessageComposerTextEffects, + sentMessageEdit, + sentMessagePluginComposerHost, + typeaheadConfig, + ]); const promptStack = useMemo( () => ( <> @@ -1348,23 +1598,26 @@ export function ThreadDetailPromptArea({ } return ( - + <> + {sentMessageEditorPortal} + + ); } diff --git a/apps/app/src/views/thread-detail/ThreadDetailView.tsx b/apps/app/src/views/thread-detail/ThreadDetailView.tsx index 20c78e0670..b0e0441ed0 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailView.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailView.tsx @@ -4,6 +4,9 @@ import { useAtom } from "jotai"; import { atomWithStorage } from "jotai/utils"; import { isRunningThreadRuntimeDisplayStatus, + type ThreadTimelineEditMessageHandler, + type ThreadTimelineEditMessageTarget, + type ThreadTimelineInlineMessageEditor, type ThreadTimelineForkMessageHandler, type ThreadTimelineSendToMainMessageHandler, type ThreadTimelineLinkHandler, @@ -37,6 +40,7 @@ import { } from "../../hooks/mutations/thread-state-mutations"; import { useCreateThreadQueuedMessage, + useEditThreadMessage, useSendThreadMessage, } from "../../hooks/mutations/thread-runtime-mutations"; import { useUpdateEnvironment } from "../../hooks/mutations/environment-mutations"; @@ -53,6 +57,7 @@ import { useThread, useThreadDetailBootstrap, useThreadPendingInteractions, + useThreadQueuedMessages, type ProjectThreadSubsetFilters, } from "../../hooks/queries/thread-queries"; import { isTransientReadError } from "@/hooks/queries/query-helpers"; @@ -97,7 +102,12 @@ import { } from "@/components/workspace/workspace-change-summary"; import { getThreadDisplayTitle } from "@/lib/thread-title"; import { getMutationErrorMessage } from "@/lib/mutation-errors"; -import type { PromptDraftAttachment } from "@/lib/prompt-draft"; +import { + arePromptDraftStatesEqual, + promptInputToDraft, + type PromptDraftAttachment, + type PromptDraftState, +} from "@/lib/prompt-draft"; import { createLocalStorageEnumStorage } from "@/lib/browser-storage"; import { getProjectComposeRoutePath, @@ -107,7 +117,11 @@ import { } from "@/lib/route-paths"; import { useGitDiffPanel } from "@/components/secondary-panel/git-diff/useGitDiffPanel"; import { ThreadDetailHeader } from "./ThreadDetailHeader"; -import { ThreadDetailPromptArea } from "./ThreadDetailPromptArea"; +import { + ThreadDetailPromptArea, + type ThreadDetailSentMessageEdit, +} from "./ThreadDetailPromptArea"; +import { canStartSentMessageEdit } from "./sentMessageEdit"; import { type ContextBannerMergeBaseConfig, isThreadDisplayStatusBannerActive, @@ -267,6 +281,14 @@ type OpenInEditorHandler = NonNullable< >; type OpenFilePreviewHandler = (relativePath: string) => void; +interface SentMessageEditSession { + draft: PromptDraftState; + originalDraft: PromptDraftState; + operationId: string; + target: ThreadTimelineEditMessageTarget; + threadId: string; +} + function getPullRequestMergeLoadingTitle( method: PullRequestMergeMethod, ): string { @@ -572,6 +594,10 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { (pendingInteractionsQuery.isLoading || pendingInteractionsQuery.isFetching); const hasPendingInteraction = getLatestPendingInteraction(pendingInteractions) !== null; + const { data: queuedMessagesForEditEligibility = [] } = + useThreadQueuedMessages(thread?.id ?? "", { + enabled: threadQueryState.status === "ready" && Boolean(thread?.id), + }); const unreadDividerState = useThreadUnreadDividerState({ routeThreadId: threadId, thread, @@ -793,6 +819,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { threadId: threadId ?? "", }); const sendMessage = useSendThreadMessage(); + const editMessage = useEditThreadMessage(); const createQueuedMessage = useCreateThreadQueuedMessage(); const requestEnvironmentAction = useRequestEnvironmentAction(); const [pullRequestMergeMethod, setPullRequestMergeMethod] = useAtom( @@ -911,6 +938,188 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { // Desktop quote actions keep their existing focus handoff. Mobile web does // not focus inputs programmatically; see PromptBoxInternal. const [composerFocusRequestNonce, setComposerFocusRequestNonce] = useState(0); + const [sentMessageEditSession, setSentMessageEditSession] = + useState(null); + const [sentMessageEditHostElement, setSentMessageEditHostElement] = + useState(null); + const activeSentMessageEditSession = + sentMessageEditSession?.threadId === thread?.id + ? sentMessageEditSession + : null; + const canEditSentMessages = + thread !== undefined && + canStartSentMessageEdit({ + activeBackgroundCommandCount: activeBackgroundCommands.length, + activeWorkflowCount: activeWorkflows.length, + archivedAt: thread.archivedAt, + deletedAt: thread.deletedAt, + hasPendingInteraction, + isExperimentEnabled: + systemConfigQuery.data?.experiments.editMessages ?? false, + isEditSessionActive: activeSentMessageEditSession !== null, + isMutationPending: + sendMessage.isPending || + createQueuedMessage.isPending || + editMessage.isPending, + isTimelinePending: timelineLoading && timelineRows.length === 0, + queuedMessageCount: queuedMessagesForEditEligibility.length, + providerId: thread.providerId, + runtimeDisplayStatus: thread.runtime.displayStatus, + }); + const enterSentMessageEdit = useCallback( + (target: ThreadTimelineEditMessageTarget) => { + if (!thread || !canEditSentMessages) { + return; + } + const editDraft = promptInputToDraft(target.input); + setSentMessageEditHostElement(null); + setSentMessageEditSession({ + draft: editDraft, + originalDraft: editDraft, + operationId: crypto.randomUUID(), + target, + threadId: thread.id, + }); + }, + [canEditSentMessages, thread], + ); + const handleEditSentMessage = useCallback( + (target) => { + if (!canEditSentMessages) { + return; + } + enterSentMessageEdit(target); + }, + [canEditSentMessages, enterSentMessageEdit], + ); + const activeSentMessageEditOperationId = + activeSentMessageEditSession?.operationId ?? null; + const updateSentMessageEditDraft = useCallback( + (update: (current: PromptDraftState) => PromptDraftState) => { + setSentMessageEditSession((current) => + current?.operationId === activeSentMessageEditOperationId + ? { ...current, draft: update(current.draft) } + : current, + ); + }, + [activeSentMessageEditOperationId], + ); + const finishCancelSentMessageEdit = useCallback((operationId: string) => { + setSentMessageEditSession((current) => + current?.operationId === operationId ? null : current, + ); + }, []); + const cancelSentMessageEdit = useCallback(() => { + const current = activeSentMessageEditSession; + if (!current) { + return; + } + if (arePromptDraftStatesEqual(current.draft, current.originalDraft)) { + finishCancelSentMessageEdit(current.operationId); + return; + } + appToast.warning("Discard this message edit?", { + description: + "The sent message and conversation are still unchanged. Your follow-up draft is unaffected.", + action: { + label: "Discard edit", + onClick: () => finishCancelSentMessageEdit(current.operationId), + }, + cancel: { label: "Keep editing", onClick: () => {} }, + }); + }, [activeSentMessageEditSession, finishCancelSentMessageEdit]); + const submitSentMessageEdit = useCallback< + ThreadDetailSentMessageEdit["onSubmit"] + >( + (target) => { + if ( + !activeSentMessageEditSession || + target.expectedRequestSequence !== + activeSentMessageEditSession.target.expectedRequestSequence + ) { + return; + } + const session = activeSentMessageEditSession; + const execution = target.execution; + void editMessage + .mutateAsync({ + id: session.threadId, + operationId: session.operationId, + expectedRequestSequence: target.expectedRequestSequence, + input: target.input, + ...(execution + ? { + model: execution.model, + permissionMode: execution.permissionMode, + reasoningLevel: execution.reasoningLevel, + executionInputSources: execution.executionInputSources, + ...(execution.supportsServiceTier && execution.serviceTier + ? { serviceTier: execution.serviceTier } + : {}), + } + : {}), + }) + .then(() => { + setSentMessageEditSession((current) => + current?.operationId === session.operationId ? null : current, + ); + }) + .catch((error) => { + appToast.error( + getMutationErrorMessage({ + error, + fallbackMessage: "Failed to edit the message", + lifecycleOperation: "edit_message", + }), + ); + }); + }, + [activeSentMessageEditSession, editMessage], + ); + const handleSentMessageEditHostElementChange = useCallback( + (element: HTMLDivElement | null) => { + setSentMessageEditHostElement(element); + }, + [], + ); + const sentMessageEditRequestSequence = + activeSentMessageEditSession?.target.expectedRequestSequence ?? null; + const inlineMessageEditor = useMemo< + ThreadTimelineInlineMessageEditor | undefined + >( + () => + sentMessageEditRequestSequence !== null + ? { + expectedRequestSequence: sentMessageEditRequestSequence, + onHostElementChange: handleSentMessageEditHostElementChange, + } + : undefined, + [handleSentMessageEditHostElementChange, sentMessageEditRequestSequence], + ); + const sentMessageEdit = useMemo( + () => + activeSentMessageEditSession + ? { + draft: activeSentMessageEditSession.draft, + expectedRequestSequence: + activeSentMessageEditSession.target.expectedRequestSequence, + hostElement: sentMessageEditHostElement, + isSubmitting: editMessage.isPending, + operationId: activeSentMessageEditSession.operationId, + onCancel: cancelSentMessageEdit, + onSubmit: submitSentMessageEdit, + updateDraft: updateSentMessageEditDraft, + } + : undefined, + [ + activeSentMessageEditSession, + cancelSentMessageEdit, + editMessage.isPending, + sentMessageEditHostElement, + submitSentMessageEdit, + updateSentMessageEditDraft, + ], + ); // Plugin useComposer() writes ride the focus bus (they can't reach this // view's local nonce); same storage key = same draft the composer shows. useEffect( @@ -2397,6 +2606,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { } composerFocusRequestNonce={composerFocusRequestNonce} sendMessage={sendMessage} + sentMessageEdit={sentMessageEdit} steerActiveThreadOnEnter={ systemConfigQuery.data?.generalSettings.steerActiveThreadOnEnter ?? defaultAppSettings.steerActiveThreadOnEnter @@ -2595,6 +2805,10 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { isThreadTimelinePending, timelineError: Boolean(timelineError), onForkMessage: isForkAvailable ? handleForkMessage : undefined, + onEditMessage: canEditSentMessages + ? handleEditSentMessage + : undefined, + inlineMessageEditor, onMessageAddToChat: handleSelectionAddToChat, onSendToMainMessage: handleSendToMainMessage, onSelectionAddToChat: handleSelectionAddToChat, diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts new file mode 100644 index 0000000000..f9f8e91e25 --- /dev/null +++ b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from "vitest"; +import { + canStartSentMessageEdit, + type SentMessageEditAvailability, +} from "./sentMessageEdit"; + +const ELIGIBLE_STATE: SentMessageEditAvailability = { + activeBackgroundCommandCount: 0, + activeWorkflowCount: 0, + archivedAt: null, + deletedAt: null, + hasPendingInteraction: false, + isExperimentEnabled: true, + isEditSessionActive: false, + isMutationPending: false, + isTimelinePending: false, + queuedMessageCount: 0, + providerId: "codex", + runtimeDisplayStatus: "idle", +}; + +describe("canStartSentMessageEdit", () => { + it("allows an idle supported-provider thread with no competing activity", () => { + expect(canStartSentMessageEdit(ELIGIBLE_STATE)).toBe(true); + }); + + it.each([ + ["another provider", { providerId: "opencode" }], + ["a disabled experiment", { isExperimentEnabled: false }], + ["an active runtime", { runtimeDisplayStatus: "active" as const }], + ["an archived thread", { archivedAt: 1 }], + ["a pending interaction", { hasPendingInteraction: true }], + ["an active workflow", { activeWorkflowCount: 1 }], + ["an active background command", { activeBackgroundCommandCount: 1 }], + ["an existing edit session", { isEditSessionActive: true }], + ["another message mutation", { isMutationPending: true }], + ["a queued message", { queuedMessageCount: 1 }], + ])("rejects %s", (_label, override) => { + expect(canStartSentMessageEdit({ ...ELIGIBLE_STATE, ...override })).toBe( + false, + ); + }); +}); diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.ts b/apps/app/src/views/thread-detail/sentMessageEdit.ts new file mode 100644 index 0000000000..9d5cfe87f7 --- /dev/null +++ b/apps/app/src/views/thread-detail/sentMessageEdit.ts @@ -0,0 +1,52 @@ +import type { ThreadRuntimeDisplayStatus } from "@bb/domain"; + +export interface SentMessageEditAvailability { + activeBackgroundCommandCount: number; + activeWorkflowCount: number; + archivedAt: number | null; + deletedAt: number | null; + hasPendingInteraction: boolean; + isExperimentEnabled: boolean; + isEditSessionActive: boolean; + isMutationPending: boolean; + isTimelinePending: boolean; + queuedMessageCount: number; + providerId: string; + runtimeDisplayStatus: ThreadRuntimeDisplayStatus; +} + +/** + * Client-side affordance policy for the UX prototype. The eventual mutation + * must repeat the full eligibility check on the server before changing state. + */ +export function canStartSentMessageEdit({ + activeBackgroundCommandCount, + activeWorkflowCount, + archivedAt, + deletedAt, + hasPendingInteraction, + isExperimentEnabled, + isEditSessionActive, + isMutationPending, + isTimelinePending, + queuedMessageCount, + providerId, + runtimeDisplayStatus, +}: SentMessageEditAvailability): boolean { + return ( + isExperimentEnabled && + (providerId === "claude-code" || + providerId === "codex" || + providerId === "pi") && + runtimeDisplayStatus === "idle" && + archivedAt === null && + deletedAt === null && + !hasPendingInteraction && + !isEditSessionActive && + !isMutationPending && + !isTimelinePending && + queuedMessageCount === 0 && + activeWorkflowCount === 0 && + activeBackgroundCommandCount === 0 + ); +} diff --git a/apps/cli/src/__tests__/command-output/settings.test.ts b/apps/cli/src/__tests__/command-output/settings.test.ts index 51c322bf56..552620a51c 100644 --- a/apps/cli/src/__tests__/command-output/settings.test.ts +++ b/apps/cli/src/__tests__/command-output/settings.test.ts @@ -88,6 +88,26 @@ describe("bb settings commands", () => { }); }); + it("enables message editing while preserving other experiment flags", async () => { + const put = vi.fn(async ({ json }) => json); + stubServerApi({ + "v1.system.config.$get": vi.fn(async () => ({ + generalSettings: defaultAppSettings, + experiments: defaultExperiments, + })), + "v1.settings.experiments.$put": put, + }); + + await runCommand( + ["settings", "experiment", "editMessages", "true"], + register, + ); + + expect(put).toHaveBeenCalledWith({ + json: { ...defaultExperiments, editMessages: true }, + }); + }); + it("enables new onboarding before replaying the setup guide", async () => { const updateExperiments = vi.fn(async ({ json }) => json); const updateGeneralSettings = vi.fn(async ({ json }) => json); diff --git a/apps/cli/src/__tests__/command-output/thread-actions.test.ts b/apps/cli/src/__tests__/command-output/thread-actions.test.ts index 686dca335d..b687e85ed8 100644 --- a/apps/cli/src/__tests__/command-output/thread-actions.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-actions.test.ts @@ -99,6 +99,83 @@ describe("bb thread action command output", () => { ); }); + it("bb thread edit-message resolves the current target and submits one atomic edit", async () => { + const getEdit = vi.fn(async () => ({ + expectedRequestSequence: 41, + input: [{ type: "text", text: "Original", mentions: [] }], + })); + const submitEdit = vi.fn(async () => ({ + ok: true, + operationId: "edit-op-server", + requestSequence: 43, + })); + stubServerApi({ + "v1.threads.:id.latest-message-edit.$get": getEdit, + "v1.threads.:id.edit-message.$post": submitEdit, + }); + + await runCommand( + ["thread", "edit-message", "thread-edit-1", "--message", "Replacement"], + register, + ); + + expect(getEdit).toHaveBeenCalledWith({ + param: { id: "thread-edit-1" }, + }); + expect(submitEdit).toHaveBeenCalledWith({ + param: { id: "thread-edit-1" }, + json: { + operationId: expect.any(String), + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + expect(collectLogLines(vi.mocked(console.log))).toContain( + "Thread thread-edit-1 message replaced; workspace changes were kept", + ); + }); + + it("bb thread edit-message accepts an explicit stale-edit guard", async () => { + vi.stubEnv("BB_THREAD_ID", "thread-edit-self"); + const getEdit = vi.fn(); + const submitEdit = vi.fn(async () => ({ + ok: true, + operationId: "edit-op-server", + requestSequence: 43, + })); + stubServerApi({ + "v1.threads.:id.latest-message-edit.$get": getEdit, + "v1.threads.:id.edit-message.$post": submitEdit, + }); + + await runCommand( + [ + "thread", + "edit-message", + "--self", + "--message", + "Replacement", + "--expected-request-sequence", + "41", + "--json", + ], + register, + ); + + expect(getEdit).not.toHaveBeenCalled(); + expect(submitEdit).toHaveBeenCalledWith({ + param: { id: "thread-edit-self" }, + json: expect.objectContaining({ expectedRequestSequence: 41 }), + }); + expect( + JSON.parse(collectLogLines(vi.mocked(console.log)).join("\n")), + ).toMatchObject({ + threadId: "thread-edit-self", + ok: true, + requestSequence: 43, + }); + }); + it("bb thread pin sends the thread id from args", async () => { const pinnedThread = fixtures.makeThread({ id: "thread-pin-1", diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index effd06b23d..7eb2f3084a 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { randomUUID } from "node:crypto"; import { threadVisibilitySchema, type PermissionMode, @@ -81,6 +82,15 @@ interface ThreadRetryCommandOptions extends ThreadActionOptions { requestId?: string; } +interface ThreadEditMessageCommandOptions { + expectedRequestSequence?: string; + json?: boolean; + message: string; + self?: boolean; +} + +type ThreadBannerActionCommandOptions = ThreadActionOptions; + type ThreadTellDeliveryMode = "auto" | "queue" | "steer"; interface PostThreadMessageArgs { @@ -356,6 +366,54 @@ export function registerActionsCommands( }), ); + parent + .command("edit-message [id]") + .description("Replace a completed user message and rerun from that point") + .requiredOption("--message ", "Replacement message text") + .option("--self", "Target the current thread (from BB_THREAD_ID)") + .option( + "--expected-request-sequence ", + "Fail if the editable message no longer has this event sequence", + ) + .option("--json", "Print machine-readable JSON output") + .action( + action( + async ( + id: string | undefined, + opts: ThreadEditMessageCommandOptions, + ) => { + const threadId = requireThreadIdOrSelf(id, opts); + const sdk = createCliBbSdk(getUrl()); + const requestedSequence = + opts.expectedRequestSequence === undefined + ? undefined + : Number.parseInt(opts.expectedRequestSequence, 10); + if ( + requestedSequence !== undefined && + (!Number.isInteger(requestedSequence) || requestedSequence < 0) + ) { + throw new Error( + "--expected-request-sequence must be a non-negative integer.", + ); + } + const expectedRequestSequence = + requestedSequence ?? + (await sdk.threads.getLatestMessageEdit({ threadId })) + .expectedRequestSequence; + const result = await sdk.threads.editMessage({ + threadId, + operationId: randomUUID(), + expectedRequestSequence, + input: buildPromptInputs({ message: opts.message }), + }); + if (outputJson(opts, { threadId, ...result })) return; + console.log( + `Thread ${threadId} message replaced; workspace changes were kept`, + ); + }, + ), + ); + parent .command("tell ") .description("Send a follow-up message to a thread") diff --git a/apps/desktop/test/preload-build.test.ts b/apps/desktop/test/preload-build.test.ts index a0ef170ea1..4f4425b1d9 100644 --- a/apps/desktop/test/preload-build.test.ts +++ b/apps/desktop/test/preload-build.test.ts @@ -123,6 +123,7 @@ async function startDesktopSmokeServer( dataDir: args.dataDir, experiments: { claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: false, }, diff --git a/apps/host-daemon/src/app.test.ts b/apps/host-daemon/src/app.test.ts index 9ecd5fd36c..b502c6aa07 100644 --- a/apps/host-daemon/src/app.test.ts +++ b/apps/host-daemon/src/app.test.ts @@ -240,6 +240,9 @@ function createFakeRuntime(): AgentRuntime { async startThread() { return { providerThreadId: "provider-thread-app-test" }; }, + async prepareThreadRewind() { + return { providerThreadId: "provider-thread-rewind-app-test" }; + }, async resumeThread() { return { providerThreadId: "provider-thread-app-test" }; }, diff --git a/apps/host-daemon/src/command-dispatch-support.test.ts b/apps/host-daemon/src/command-dispatch-support.test.ts index 99cb0e6a1b..97c515480c 100644 --- a/apps/host-daemon/src/command-dispatch-support.test.ts +++ b/apps/host-daemon/src/command-dispatch-support.test.ts @@ -48,6 +48,9 @@ function makeRuntime(args: MakeRuntimeArgs): AgentRuntime { async startThread() { return { providerThreadId: "provider-thread-test" }; }, + async prepareThreadRewind() { + return { providerThreadId: "provider-thread-rewind-test" }; + }, async resumeThread() { return { providerThreadId: "provider-thread-test" }; }, diff --git a/apps/host-daemon/src/command-dispatch.test.ts b/apps/host-daemon/src/command-dispatch.test.ts index 6a8490dc3c..330d86fd11 100644 --- a/apps/host-daemon/src/command-dispatch.test.ts +++ b/apps/host-daemon/src/command-dispatch.test.ts @@ -177,6 +177,9 @@ function createRuntime(): FakeDispatchRuntime { hostedThreadIds.add(args.threadId); return { providerThreadId: "provider-thread-1" }; }), + prepareThreadRewind: vi.fn(async () => ({ + providerThreadId: "provider-thread-rewind-1", + })), resumeThread: vi.fn(async (args: { threadId: string }) => { hostedThreadIds.add(args.threadId); return { providerThreadId: "provider-thread-1" }; @@ -851,7 +854,7 @@ describe("dispatchCommand", () => { installSource: "npmGlobal", currentVersion: "0.135.0", latestVersion: null, - minimumSupportedVersion: "0.136.0", + minimumSupportedVersion: "0.143.0", npmPackageName: "@openai/codex", npmGlobalPackageVersion: "0.135.0", installAction: { @@ -941,6 +944,81 @@ describe("dispatchCommand", () => { expect(runtime.startThread).toHaveBeenCalledOnce(); }); + it("prepares a Codex rewind through the requested retained turn", async () => { + const runtime = createRuntime(); + const manager = new RuntimeManager({ + createRuntime: () => runtime, + provisionWorkspace: async () => createWorkspace(), + }); + const command: CommandOf<"thread.rewind.prepare"> = { + type: "thread.rewind.prepare", + environmentId: "env-1", + threadId: "thread-1", + workspaceContext: { + workspacePath: WORKSPACE_PATH, + workspaceProvisionType: "unmanaged", + }, + projectId: "proj_1", + providerId: "codex", + operationId: "edit-op-1", + sourceProviderThreadId: "provider-source-1", + retainThroughProviderCheckpoint: "turn-before-edit", + options: { + model: "gpt-5", + serviceTier: "default", + reasoningLevel: "medium", + workflowsEnabled: false, + permissionMode: "full", + permissionScope: "full", + approvalReviewer: null, + permissionEscalation: null, + }, + instructions: "Be concise.", + dynamicTools: [], + injectedSkillSources: [], + instructionMode: "append", + }; + const supportedCodexStatus: ProviderCliStatus = { + displayName: "Codex", + executableName: "codex", + executablePath: "/usr/local/bin/codex", + installed: true, + installSource: "npmGlobal", + currentVersion: "0.146.0", + latestVersion: null, + minimumSupportedVersion: "0.143.0", + npmPackageName: "@openai/codex", + npmGlobalPackageVersion: "0.146.0", + installAction: null, + needsUpdate: false, + versionUnsupported: false, + }; + + await expect( + dispatchCommand(command, { + dataDir: "/tmp/bb-data", + eventSink: { + emit: vi.fn(), + flush: vi.fn(async () => undefined), + }, + fetchProjectAttachment: async () => { + throw new Error("Unexpected project attachment fetch"); + }, + getProviderCliStatusForProvider: async () => supportedCodexStatus, + runtimeManager: manager, + threadStorageRootPath: "/tmp/bb-thread-storage", + }), + ).resolves.toEqual({ providerThreadId: "provider-thread-rewind-1" }); + expect(runtime.prepareThreadRewind).toHaveBeenCalledWith( + expect.objectContaining({ + operationId: "edit-op-1", + sourceProviderThreadId: "provider-source-1", + retainThroughProviderCheckpoint: "turn-before-edit", + threadId: "thread-1", + }), + ); + }); + it("invalidates the provider maintenance runtime after a successful Codex CLI update", async () => { const dataDir = await makeTempDir("bb-command-dispatch-provider-cli-"); const staleRuntime = createRuntime(); diff --git a/apps/host-daemon/src/command-dispatch.ts b/apps/host-daemon/src/command-dispatch.ts index 01cd0a5552..e11706122b 100644 --- a/apps/host-daemon/src/command-dispatch.ts +++ b/apps/host-daemon/src/command-dispatch.ts @@ -65,6 +65,7 @@ import { } from "./provider-cli-health.js"; import { ensureThreadRuntime, + prepareThreadRewind, startThread, submitTurn, } from "./command-handlers/thread.js"; @@ -229,6 +230,18 @@ function shouldInvalidateProviderMaintenanceRuntimeAfterProviderCliInstall(args: } const commandHandlers: CommandHandlerMap = { + "thread.rewind.prepare": async (command, options) => { + const release = + await options.runtimeManager.retainEnvironmentForThreadCommand( + command.environmentId, + command.threadId, + ); + try { + return await prepareThreadRewind(command, options); + } finally { + release(); + } + }, "thread.start": async (command, options) => { const release = await options.runtimeManager.retainEnvironmentForThreadCommand( diff --git a/apps/host-daemon/src/command-handlers/thread.ts b/apps/host-daemon/src/command-handlers/thread.ts index 6fe52eb6bb..b8f75fd82f 100644 --- a/apps/host-daemon/src/command-handlers/thread.ts +++ b/apps/host-daemon/src/command-handlers/thread.ts @@ -43,7 +43,7 @@ interface StagedThreadCommandInput { } interface RequireSupportedProviderCliArgs { - command: CommandOf<"thread.start">; + command: CommandOf<"thread.start"> | CommandOf<"thread.rewind.prepare">; options: CommandDispatchOptions; } @@ -237,6 +237,38 @@ export async function startThread( } } +export async function prepareThreadRewind( + command: CommandOf<"thread.rewind.prepare">, + options: CommandDispatchOptions, +): Promise> { + await requireSupportedProviderCliForThreadStart({ command, options }); + const entry = await requireResolvedWorkspaceForCommand({ + dataDir: options.dataDir, + environmentId: command.environmentId, + injectedSkillSources: command.injectedSkillSources, + runtimeManager: options.runtimeManager, + targetThreadId: command.threadId, + workspaceContext: command.workspaceContext, + }); + return entry.runtime.prepareThreadRewind({ + ...(command.acpLaunchSpec !== undefined + ? { acpLaunchSpec: command.acpLaunchSpec } + : {}), + environmentId: command.environmentId, + threadId: command.threadId, + operationId: command.operationId, + projectId: command.projectId, + providerId: command.providerId, + sourceProviderThreadId: command.sourceProviderThreadId, + retainThroughProviderCheckpoint: command.retainThroughProviderCheckpoint, + options: command.options, + instructions: command.instructions, + dynamicTools: command.dynamicTools, + disallowedTools: command.disallowedTools, + instructionMode: command.instructionMode, + }); +} + export async function ensureThreadRuntime( command: ExistingThreadRuntimeCommand, options: CommandDispatchOptions, diff --git a/apps/host-daemon/src/provider-cli-health.ts b/apps/host-daemon/src/provider-cli-health.ts index b3b2a8979f..bec928459f 100644 --- a/apps/host-daemon/src/provider-cli-health.ts +++ b/apps/host-daemon/src/provider-cli-health.ts @@ -22,7 +22,7 @@ const NPM_VIEW_TIMEOUT_MS = 15_000; const NPM_INSTALL_STATE_TIMEOUT_MS = 5_000; const CLAUDE_CODE_INSTALL_SCRIPT_URL = "https://claude.ai/install.sh"; const CURSOR_INSTALL_SCRIPT_URL = "https://cursor.com/install"; -export const CODEX_MINIMUM_SUPPORTED_VERSION = "0.136.0"; +export const CODEX_MINIMUM_SUPPORTED_VERSION = "0.143.0"; const providerCliNodePtyLogger: HostDaemonLogger = { debug() {}, info() {}, diff --git a/apps/host-daemon/src/runtime-manager.test.ts b/apps/host-daemon/src/runtime-manager.test.ts index 466d960dd4..1d0d5a3407 100644 --- a/apps/host-daemon/src/runtime-manager.test.ts +++ b/apps/host-daemon/src/runtime-manager.test.ts @@ -257,6 +257,9 @@ function createFakeRuntime() { startThread: vi.fn(async (_args: StartThreadArgs) => ({ providerThreadId: "provider-1", })), + prepareThreadRewind: vi.fn(async () => ({ + providerThreadId: "provider-rewind-1", + })), resumeThread: vi.fn(async (_args: ResumeThreadArgs) => ({ providerThreadId: "provider-1", })), diff --git a/apps/host-daemon/src/terminals/terminal-manager.test.ts b/apps/host-daemon/src/terminals/terminal-manager.test.ts index 5d93d4e642..6c507e4a5f 100644 --- a/apps/host-daemon/src/terminals/terminal-manager.test.ts +++ b/apps/host-daemon/src/terminals/terminal-manager.test.ts @@ -212,6 +212,9 @@ function createFakeRuntime(): AgentRuntime { startThread: vi.fn(async () => ({ providerThreadId: "provider-thread", })), + prepareThreadRewind: vi.fn(async () => ({ + providerThreadId: "provider-thread-rewind", + })), resumeThread: vi.fn(async () => ({ providerThreadId: "provider-thread", })), diff --git a/apps/host-daemon/test/command/dispatch-helpers.ts b/apps/host-daemon/test/command/dispatch-helpers.ts index 7aa4fcb99c..3132cd67d5 100644 --- a/apps/host-daemon/test/command/dispatch-helpers.ts +++ b/apps/host-daemon/test/command/dispatch-helpers.ts @@ -349,6 +349,11 @@ export function createFakeRuntime() { } return { providerThreadId: `provider-${args.threadId}` }; }, + async prepareThreadRewind(args) { + return { + providerThreadId: `provider-rewind-${args.threadId}-${args.operationId}`, + }; + }, async resumeThread(args) { state.resumedAcpLaunchSpec = args.acpLaunchSpec; state.resumedEnvironmentId = args.environmentId; diff --git a/apps/server/src/routes/threads/actions.ts b/apps/server/src/routes/threads/actions.ts index fd404a0583..e706a1c228 100644 --- a/apps/server/src/routes/threads/actions.ts +++ b/apps/server/src/routes/threads/actions.ts @@ -53,6 +53,10 @@ import { resolveMessageSenderThreadId, sendThreadMessage, } from "../../services/threads/thread-send.js"; +import { + editThreadMessage, + getLatestThreadMessageEdit, +} from "../../services/threads/thread-edit-message.js"; import { buildExecutionOptions, buildThreadStopCommand, @@ -367,6 +371,24 @@ export function registerThreadActionRoutes(app: Hono, deps: AppDeps): void { ); }); + post(routes.editMessage, async (context, payload) => { + const thread = requirePublicThread(deps.db, context.req.param("id")); + const environment = await requireThreadCommandEnvironment(deps, { + thread, + }); + const result = await editThreadMessage(deps, { + environment, + payload, + thread, + }); + return context.json(result); + }); + + get(routes.latestMessageEdit, (context) => { + const thread = requirePublicThread(deps.db, context.req.param("id")); + return context.json(getLatestThreadMessageEdit(deps, thread)); + }); + post(routes.createQueuedMessage, async (context, payload) => { const thread = requirePublicThread(deps.db, context.req.param("id")); const queuedMessage = await createQueuedMessageForThread(deps, { diff --git a/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md b/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md index 6de97af7cc..fea0700c2b 100644 --- a/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md +++ b/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md @@ -105,6 +105,9 @@ message agents, or inspect projects, providers, and environments. project setup guide. Change it with `bb settings experiment newOnboarding `. Use `bb settings replay-onboarding` to enable it and show the guide again. +- The default-off `editMessages` experiment allows completed user messages in + Codex, Claude Code, and Pi threads to be replaced and rerun. Change it with + `bb settings experiment editMessages `. - Thread timeline windows are capped by event count as well as by user-message count (`BB_FF_TIMELINE_WINDOW_EVENT_BUDGET`, default 1500), because a thread with few user messages but many events would otherwise reproject its whole @@ -340,6 +343,11 @@ or artifacts, validation performed, and blockers. ` when you need a shorter or longer budget. - Use `bb thread tell "..."` when requirements change, a blocker needs clarification, or follow-up work is needed. +- Use `bb thread edit-message --message "..."` to replace and rerun + the latest completed user message in an idle Codex, Claude Code, or Pi thread. + Pass `--expected-request-sequence ` to select an earlier message. + Opening edit mode in the app is non-destructive; history changes only when the + edit is submitted successfully, and workspace changes remain. - `bb thread tell` steers by default, delivering the message immediately into the active turn. Use `--mode queue` when the message is non-urgent and the agent can finish its current work first. Steer is especially important for a diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts new file mode 100644 index 0000000000..95492b077a --- /dev/null +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -0,0 +1,542 @@ +import { createHash } from "node:crypto"; +import { and, desc, eq, lt, sql } from "drizzle-orm"; +import { + deleteThreadEventSuffixInTransaction, + events, + getExperiments, + getHighWaterMarks, + getLastStoredProviderThreadId, + getThread, + listActiveBackgroundTaskCountsByThreadIds, + listQueuedThreadMessages, + type DbQueryConnection, +} from "@bb/db"; +import { threadScope, type Thread } from "@bb/domain"; +import type { + EditMessageRequest, + EditMessageResponse, + LatestMessageEditResponse, +} from "@bb/server-contract"; +import type { + HostDaemonCommand, + HostDaemonCommandResult, +} from "@bb/host-daemon-contract"; +import type { LoggedPendingInteractionWorkSessionDeps } from "../../types.js"; +import { ApiError } from "../../errors.js"; +import { + appendThreadEventInTransaction, + createClientTurnRequestId, + parseStoredTurnRequestEvent, +} from "./thread-events.js"; +import { + buildExecutionOptions, + buildThreadStartCommand, +} from "./thread-commands.js"; +import { resolvePermissionEscalation } from "./thread-runtime-config.js"; +import { requireReadyThreadEnvironment } from "./thread-turn-dispatch.js"; +import { ensureHostSessionReadyForWork } from "../hosts/host-lifecycle.js"; +import { + LIVE_DAEMON_COMMAND_TIMEOUT_MS, + runLiveHostCommand, +} from "../hosts/live-command.js"; +import { sendThreadMessage } from "./thread-send.js"; + +type ThreadRewindPrepareCommand = Extract< + HostDaemonCommand, + { type: "thread.rewind.prepare" } +>; + +interface EditableTurn { + currentTurnId: string; + oldMaxSequence: number; + precedingProviderCheckpoint: string | null; + requestSequence: number; + sourceProviderThreadId: string; + visibleInput: ReturnType["input"]; +} + +function conflict(message: string): never { + throw new ApiError(409, "invalid_request", message); +} + +function requestFingerprint(payload: EditMessageRequest): string { + return createHash("sha256") + .update( + JSON.stringify({ + expectedRequestSequence: payload.expectedRequestSequence, + executionInputSources: payload.executionInputSources, + input: payload.input, + model: payload.model, + permissionMode: payload.permissionMode, + reasoningLevel: payload.reasoningLevel, + serviceTier: payload.serviceTier, + }), + ) + .digest("hex"); +} + +function findCommittedOperation( + db: DbQueryConnection, + args: { operationId: string; threadId: string }, +): { fingerprint: string; requestSequence: number } | null { + const row = db + .select({ data: events.data }) + .from(events) + .where( + and( + eq(events.threadId, args.threadId), + eq(events.type, "system/operation"), + sql`json_extract(${events.data}, '$.operation') = 'edit_message'`, + sql`json_extract(${events.data}, '$.operationId') = ${args.operationId}`, + ), + ) + .limit(1) + .get(); + if (!row) return null; + let data: unknown; + try { + data = JSON.parse(row.data); + } catch { + return null; + } + if (typeof data !== "object" || data === null || !("metadata" in data)) { + return null; + } + const metadata = data.metadata; + if (typeof metadata !== "object" || metadata === null) return null; + const fingerprint = Reflect.get(metadata, "fingerprint"); + const requestSequence = Reflect.get(metadata, "requestSequence"); + return typeof fingerprint === "string" && typeof requestSequence === "number" + ? { fingerprint, requestSequence } + : null; +} + +const EDIT_MESSAGE_PROVIDER_IDS = new Set(["claude-code", "codex", "pi"]); + +function storedProviderCheckpoint(data: string): string | null { + let parsed: unknown; + try { + parsed = JSON.parse(data); + } catch { + return null; + } + if (typeof parsed !== "object" || parsed === null) return null; + const checkpoint = Reflect.get(parsed, "providerCheckpointId"); + return typeof checkpoint === "string" && checkpoint.length > 0 + ? checkpoint + : null; +} + +function resolveEditableTurn( + db: DbQueryConnection, + thread: Thread, + requestSequence?: number, +): EditableTurn { + if (!EDIT_MESSAGE_PROVIDER_IDS.has(thread.providerId)) { + conflict(`Editing messages is not supported for ${thread.providerId}`); + } + if (thread.archivedAt !== null || thread.deletedAt !== null) { + conflict("The thread is not writable"); + } + if (thread.status !== "idle") { + conflict("The thread must be idle before a message can be edited"); + } + const backgroundActivity = listActiveBackgroundTaskCountsByThreadIds(db, { + threadIds: [thread.id], + })[0]; + if ( + backgroundActivity && + (backgroundActivity.activeBackgroundAgentCount > 0 || + backgroundActivity.activeBackgroundCommandCount > 0 || + backgroundActivity.activeWorkflowCount > 0) + ) { + conflict("Wait for background work to finish before editing the message"); + } + const requestRow = + requestSequence === undefined + ? (db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "client/turn/requested"), + sql`json_extract(${events.data}, '$.initiator') = 'user'`, + sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, + sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, + ), + ) + .orderBy(desc(events.sequence)) + .limit(1) + .get() ?? null) + : (db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.sequence, requestSequence), + eq(events.type, "client/turn/requested"), + ), + ) + .limit(1) + .get() ?? null); + if (!requestRow) conflict("The thread has no editable user message"); + const request = parseStoredTurnRequestEvent(requestRow); + if ( + request.initiator !== "user" || + request.senderThreadId !== null || + (request.target.kind !== "new-turn" && + request.target.kind !== "thread-start") + ) { + conflict("The selected request is not an editable user turn"); + } + + const acceptedRows = db + .select({ sequence: events.sequence, turnId: events.turnId }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/input/accepted"), + sql`json_extract(${events.data}, '$.clientRequestId') = ${request.requestId}`, + ), + ) + .orderBy(events.sequence) + .all(); + const accepted = acceptedRows.length === 1 ? acceptedRows[0] : undefined; + if (!accepted?.turnId) { + conflict("The selected request was not accepted into exactly one turn"); + } + + const rootTurn = db + .select({ turnId: events.turnId }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/started"), + eq(events.turnId, accepted.turnId), + sql`COALESCE(json_extract(${events.data}, '$.parentToolCallId'), '') = ''`, + ), + ) + .limit(1) + .get(); + if (!rootTurn) { + conflict("The selected message does not belong to a root turn"); + } + const turnAcceptedCount = db + .select({ count: sql`COUNT(*)` }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/input/accepted"), + eq(events.turnId, accepted.turnId), + ), + ) + .get()?.count; + if (turnAcceptedCount !== 1) { + conflict( + "A turn containing steers or multiple accepted messages cannot be edited", + ); + } + const completion = db + .select({ sequence: events.sequence }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/completed"), + eq(events.turnId, accepted.turnId), + ), + ) + .limit(1) + .get(); + if (!completion) conflict("The selected turn has not completed"); + + const precedingTurn = db + .select({ turnId: events.turnId }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/started"), + lt(events.sequence, requestRow.sequence), + sql`COALESCE(json_extract(${events.data}, '$.parentToolCallId'), '') = ''`, + ), + ) + .orderBy(desc(events.sequence)) + .limit(1) + .get(); + const sourceProviderThreadId = getLastStoredProviderThreadId(db, thread.id); + if (!sourceProviderThreadId) { + conflict("The provider session is unavailable"); + } + const precedingTurnId = precedingTurn?.turnId ?? null; + const precedingProviderCheckpoint = + precedingTurnId === null + ? null + : thread.providerId === "codex" + ? precedingTurnId + : (() => { + const precedingCompletion = db + .select({ data: events.data }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/completed"), + eq(events.turnId, precedingTurnId), + ), + ) + .limit(1) + .get(); + const checkpoint = precedingCompletion + ? storedProviderCheckpoint(precedingCompletion.data) + : null; + if (!checkpoint) { + conflict( + "This earlier provider turn has no editable history checkpoint", + ); + } + return checkpoint; + })(); + return { + currentTurnId: accepted.turnId, + oldMaxSequence: getHighWaterMarks(db, [thread.id])[thread.id] ?? 0, + precedingProviderCheckpoint, + requestSequence: requestRow.sequence, + sourceProviderThreadId, + visibleInput: request.input.filter( + (part) => part.visibility !== "agent-only", + ), + }; +} + +export function getLatestThreadMessageEdit( + deps: LoggedPendingInteractionWorkSessionDeps, + thread: Thread, +): LatestMessageEditResponse { + if (!getExperiments(deps.db).editMessages) { + conflict("Enable the Edit messages experiment before editing a message"); + } + if (deps.pendingInteractions.hasPendingThreadInteraction(thread.id)) { + conflict("Resolve the pending interaction before editing the message"); + } + if (listQueuedThreadMessages(deps.db, thread.id).length > 0) { + conflict("Send or remove queued messages before editing a message"); + } + const target = resolveEditableTurn(deps.db, thread); + if (target.visibleInput.length === 0) { + conflict("The message has no user-visible input to edit"); + } + return { + expectedRequestSequence: target.requestSequence, + input: target.visibleInput, + }; +} + +function rewindPrepareCommandFromStart( + start: Extract, + args: { + operationId: string; + retainThroughProviderCheckpoint: string; + sourceProviderThreadId: string; + }, +): ThreadRewindPrepareCommand { + return { + type: "thread.rewind.prepare", + environmentId: start.environmentId, + threadId: start.threadId, + workspaceContext: start.workspaceContext, + projectId: start.projectId, + providerId: start.providerId, + ...(start.acpLaunchSpec !== undefined + ? { acpLaunchSpec: start.acpLaunchSpec } + : {}), + options: start.options, + instructions: start.instructions, + dynamicTools: start.dynamicTools, + injectedSkillSources: start.injectedSkillSources, + ...(start.disallowedTools !== undefined + ? { disallowedTools: start.disallowedTools } + : {}), + instructionMode: start.instructionMode, + operationId: args.operationId, + sourceProviderThreadId: args.sourceProviderThreadId, + retainThroughProviderCheckpoint: args.retainThroughProviderCheckpoint, + }; +} + +export async function editThreadMessage( + deps: LoggedPendingInteractionWorkSessionDeps, + args: { + environment: Parameters[0]; + payload: EditMessageRequest; + thread: Thread; + }, +): Promise { + if (!getExperiments(deps.db).editMessages) { + conflict("Enable the Edit messages experiment before editing a message"); + } + const fingerprint = requestFingerprint(args.payload); + const committed = findCommittedOperation(deps.db, { + operationId: args.payload.operationId, + threadId: args.thread.id, + }); + if (committed) { + if (committed.fingerprint !== fingerprint) { + conflict("The edit operation id was already used for different input"); + } + return { + ok: true, + operationId: args.payload.operationId, + requestSequence: committed.requestSequence, + }; + } + if (deps.pendingInteractions.hasPendingThreadInteraction(args.thread.id)) { + conflict("Resolve the pending interaction before editing the message"); + } + if (listQueuedThreadMessages(deps.db, args.thread.id).length > 0) { + conflict("Send or remove queued messages before editing a message"); + } + + const target = resolveEditableTurn( + deps.db, + args.thread, + args.payload.expectedRequestSequence, + ); + const readyEnvironment = requireReadyThreadEnvironment(args.environment); + await ensureHostSessionReadyForWork(deps, { + hostId: readyEnvironment.hostId, + }); + const execution = await buildExecutionOptions( + deps, + args.payload, + { threadId: args.thread.id }, + "client/turn/requested", + ); + + let stagedProviderThreadId: string | null = null; + if (target.precedingProviderCheckpoint !== null) { + const startCommand = await buildThreadStartCommand(deps, { + thread: args.thread, + fork: null, + input: [], + requestId: createClientTurnRequestId(), + execution, + permissionEscalation: resolvePermissionEscalation({ + thread: args.thread, + initiator: "user", + }), + environment: readyEnvironment, + projectId: args.thread.projectId, + providerId: args.thread.providerId, + syncGeneratedTitle: false, + }); + const prepared: HostDaemonCommandResult<"thread.rewind.prepare"> = + await runLiveHostCommand(deps, { + command: rewindPrepareCommandFromStart(startCommand, { + operationId: args.payload.operationId, + retainThroughProviderCheckpoint: target.precedingProviderCheckpoint, + sourceProviderThreadId: target.sourceProviderThreadId, + }), + hostId: readyEnvironment.hostId, + timeoutMs: LIVE_DAEMON_COMMAND_TIMEOUT_MS, + }); + stagedProviderThreadId = prepared.providerThreadId; + } + + const requestSequence = target.oldMaxSequence + 2; + await sendThreadMessage(deps, { + beforeAppendInTransaction: ({ tx }) => { + const currentThread = getThread(tx, args.thread.id); + if (!currentThread) conflict("Thread not found"); + const currentTarget = resolveEditableTurn( + tx, + currentThread, + target.requestSequence, + ); + if ( + currentTarget.requestSequence !== target.requestSequence || + currentTarget.oldMaxSequence !== target.oldMaxSequence || + currentTarget.currentTurnId !== target.currentTurnId + ) { + conflict("The thread changed while the edit was being prepared"); + } + appendThreadEventInTransaction(tx, { + threadId: args.thread.id, + environmentId: args.thread.environmentId, + type: "system/operation", + scope: threadScope(), + data: { + operation: "edit_message", + status: "completed", + message: "Message edited", + operationId: args.payload.operationId, + metadata: { + cutoffSequence: target.requestSequence, + oldMaxSequence: target.oldMaxSequence, + removedTurnId: target.currentTurnId, + replacementProviderThreadId: stagedProviderThreadId, + fingerprint, + requestSequence, + }, + }, + }); + deleteThreadEventSuffixInTransaction(tx, { + cutoffSequence: target.requestSequence, + oldMaxSequence: target.oldMaxSequence, + threadId: args.thread.id, + }); + }, + environment: args.environment, + historyReplacement: { + forkSourceProviderThreadId: stagedProviderThreadId, + requestTargetKind: + target.precedingProviderCheckpoint === null + ? "thread-start" + : "new-turn", + }, + payload: { + input: args.payload.input, + mode: "start", + ...(args.payload.model !== undefined + ? { model: args.payload.model } + : {}), + ...(args.payload.serviceTier !== undefined + ? { serviceTier: args.payload.serviceTier } + : {}), + ...(args.payload.reasoningLevel !== undefined + ? { reasoningLevel: args.payload.reasoningLevel } + : {}), + ...(args.payload.permissionMode !== undefined + ? { permissionMode: args.payload.permissionMode } + : {}), + ...(args.payload.executionInputSources !== undefined + ? { executionInputSources: args.payload.executionInputSources } + : {}), + }, + thread: args.thread, + trigger: "user", + }); + deps.hub.notifyThread(args.thread.id, ["history-rewritten"], { + projectId: args.thread.projectId, + }); + return { + ok: true, + operationId: args.payload.operationId, + requestSequence, + }; +} diff --git a/apps/server/src/services/threads/thread-send.ts b/apps/server/src/services/threads/thread-send.ts index f26220d55d..8f69ddab84 100644 --- a/apps/server/src/services/threads/thread-send.ts +++ b/apps/server/src/services/threads/thread-send.ts @@ -23,6 +23,7 @@ import { ApiError } from "../../errors.js"; import { addRequestIdToTurnSubmitCommandPayload, buildExecutionOptions, + buildThreadStartCommand, prepareTurnSubmitCommandPayload, } from "./thread-commands.js"; import { @@ -71,6 +72,14 @@ type SendThreadMessagePayload = SendMessageRequest & { export interface SendThreadMessageArgs { beforeAppendInTransaction?: SendThreadMessageTransactionPreflight; environment: Environment; + /** + * Internal edit-message path. Presence forces a new provider session; + * a string forks from a staged provider session and null starts fresh. + */ + historyReplacement?: { + forkSourceProviderThreadId: string | null; + requestTargetKind: "new-turn" | "thread-start"; + }; payload: SendThreadMessagePayload; thread: Thread; trigger: SendThreadMessageTrigger; @@ -489,7 +498,9 @@ export async function sendThreadMessage( ); let target: TurnRequestTarget; if (mode === "start") { - target = { kind: "new-turn" }; + target = { + kind: args.historyReplacement?.requestTargetKind ?? "new-turn", + }; } else { target = { kind: mode, @@ -500,10 +511,10 @@ export async function sendThreadMessage( const requestId = createClientTurnRequestId(); if (mode === "start") { - const command = await prepareReadyThreadTurnCommand(deps, { + const commandArgs = { thread, - // A send/steer always targets an already-started thread; forking only - // happens at create time. + // Normal sends target the existing provider session. A history + // replacement deliberately starts from a staged provider fork instead. fork: null, input, ...(inputGroups !== undefined ? { inputGroups } : {}), @@ -520,7 +531,23 @@ export async function sendThreadMessage( projectId: thread.projectId, providerId: thread.providerId, syncGeneratedTitle: false, - }); + }; + const command = args.historyReplacement + ? { + command: await buildThreadStartCommand(deps, { + ...commandArgs, + fork: + args.historyReplacement.forkSourceProviderThreadId === null + ? null + : { + sourceProviderThreadId: + args.historyReplacement.forkSourceProviderThreadId, + }, + }), + mode: "thread.start" as const, + sessionId: "history-replacement", + } + : await prepareReadyThreadTurnCommand(deps, commandArgs); const queuedRequest = appendAndQueueSendThreadMessageInTransaction({ beforeAppendInTransaction: ({ tx }) => { args.beforeAppendInTransaction?.({ tx }); diff --git a/apps/server/test/system/experiments.test.ts b/apps/server/test/system/experiments.test.ts index f6806306cf..04948d0441 100644 --- a/apps/server/test/system/experiments.test.ts +++ b/apps/server/test/system/experiments.test.ts @@ -13,6 +13,7 @@ describe("experiments settings", () => { const body = systemConfigResponseSchema.parse(await readJson(response)); expect(body.experiments).toEqual({ claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: false, }); @@ -26,6 +27,7 @@ describe("experiments settings", () => { headers: { "content-type": "application/json" }, body: JSON.stringify({ claudeCodeMockCliTraffic: true, + editMessages: true, newOnboarding: true, toolsHub: true, }), @@ -33,11 +35,13 @@ describe("experiments settings", () => { expect(put.status).toBe(200); expect(experimentsSchema.parse(await readJson(put))).toEqual({ claudeCodeMockCliTraffic: true, + editMessages: true, newOnboarding: true, toolsHub: true, }); expect(getExperiments(harness.db)).toEqual({ claudeCodeMockCliTraffic: true, + editMessages: true, newOnboarding: true, toolsHub: true, }); @@ -47,6 +51,7 @@ describe("experiments settings", () => { systemConfigResponseSchema.parse(await readJson(config)).experiments, ).toEqual({ claudeCodeMockCliTraffic: true, + editMessages: true, newOnboarding: true, toolsHub: true, }); @@ -63,6 +68,7 @@ describe("experiments settings", () => { headers: { "content-type": "application/json" }, body: JSON.stringify({ claudeCodeMockCliTraffic: false, + editMessages: false, newOnboarding: false, toolsHub: false, }), diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts new file mode 100644 index 0000000000..3e5e0c33b0 --- /dev/null +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -0,0 +1,559 @@ +import { + createPromptHistoryEntry, + getThread, + listEvents, + listStoredProjectPromptHistoryRows, + listStoredThreadPromptHistoryRows, + setExperiments, +} from "@bb/db"; +import { + defaultExperiments, + encodeClientTurnRequestIdNumber, + threadScope, + turnScope, +} from "@bb/domain"; +import { describe, expect, it } from "vitest"; +import { + editThreadMessage, + getLatestThreadMessageEdit, +} from "../../src/services/threads/thread-edit-message.js"; +import { + listQueuedThreadCommands, + reportQueuedCommandError, + reportQueuedCommandSuccess, + waitForQueuedCommand, +} from "../helpers/commands.js"; +import { + seedEnvironment, + seedHostSession, + seedProjectWithSource, + seedStoredEvent, + seedThread, +} from "../helpers/seed.js"; +import { withTestHarness, type TestAppHarness } from "../helpers/test-app.js"; + +function seedCompletedTurn( + harness: TestAppHarness, + args: { + providerThreadId: string; + providerCheckpointId?: string; + initiator?: "agent" | "user"; + requestSequence: number; + senderThreadId?: string; + text: string; + threadId: string; + turnId: string; + }, +): void { + const requestId = encodeClientTurnRequestIdNumber({ + value: args.requestSequence, + }); + seedStoredEvent(harness.deps, { + threadId: args.threadId, + providerThreadId: args.providerThreadId, + sequence: args.requestSequence, + type: "client/turn/requested", + scope: threadScope(), + data: { + direction: "outbound", + requestId, + input: [{ type: "text", text: args.text, mentions: [] }], + target: + args.requestSequence === 2 + ? { kind: "thread-start" } + : { kind: "new-turn" }, + execution: { + model: "gpt-5", + serviceTier: "default", + reasoningLevel: "medium" as const, + permissionMode: "full", + source: "client/turn/requested", + }, + initiator: args.initiator ?? "user", + senderThreadId: args.senderThreadId ?? null, + request: { method: "turn/start", params: {} }, + source: "tell", + }, + }); + seedStoredEvent(harness.deps, { + threadId: args.threadId, + providerThreadId: args.providerThreadId, + sequence: args.requestSequence + 1, + type: "turn/started", + scope: turnScope(args.turnId), + data: { providerThreadId: args.providerThreadId }, + }); + seedStoredEvent(harness.deps, { + threadId: args.threadId, + providerThreadId: args.providerThreadId, + sequence: args.requestSequence + 2, + type: "turn/input/accepted", + scope: turnScope(args.turnId), + data: { + providerThreadId: args.providerThreadId, + clientRequestId: requestId, + }, + }); + seedStoredEvent(harness.deps, { + threadId: args.threadId, + providerThreadId: args.providerThreadId, + sequence: args.requestSequence + 3, + type: "item/completed", + scope: turnScope(args.turnId), + itemId: `message-${args.turnId}`, + itemKind: "agentMessage", + data: { + item: { + id: `message-${args.turnId}`, + type: "agentMessage", + text: `Reply to ${args.text}`, + }, + }, + }); + seedStoredEvent(harness.deps, { + threadId: args.threadId, + providerThreadId: args.providerThreadId, + sequence: args.requestSequence + 4, + type: "turn/completed", + scope: turnScope(args.turnId), + data: { + providerThreadId: args.providerThreadId, + status: "completed", + ...(args.providerCheckpointId !== undefined + ? { providerCheckpointId: args.providerCheckpointId } + : {}), + }, + }); +} + +function seedEditableThread( + harness: TestAppHarness, + args: { + editMessagesExperiment?: boolean; + firstProviderCheckpoint?: string | null; + includeSecondTurn?: boolean; + providerId?: "claude-code" | "codex" | "pi"; + } = {}, +) { + setExperiments(harness.db, { + ...defaultExperiments, + editMessages: args.editMessagesExperiment ?? true, + }); + const { host } = seedHostSession(harness.deps, { + id: "host-edit-message", + }); + const { project } = seedProjectWithSource(harness.deps, { + hostId: host.id, + path: "/tmp/edit-message", + }); + const environment = seedEnvironment(harness.deps, { + hostId: host.id, + projectId: project.id, + path: "/tmp/edit-message", + status: "ready", + }); + const thread = seedThread(harness.deps, { + projectId: project.id, + environmentId: environment.id, + providerId: args.providerId ?? "codex", + status: "idle", + }); + seedStoredEvent(harness.deps, { + threadId: thread.id, + environmentId: environment.id, + providerThreadId: "provider-original", + sequence: 1, + type: "thread/identity", + scope: threadScope(), + data: {}, + }); + seedCompletedTurn(harness, { + providerThreadId: "provider-original", + requestSequence: 2, + text: "First message", + threadId: thread.id, + turnId: "turn-first", + ...(args.firstProviderCheckpoint !== null + ? { + providerCheckpointId: + args.firstProviderCheckpoint ?? "checkpoint-first", + } + : {}), + }); + createPromptHistoryEntry(harness.db, { + input: [{ type: "text", text: "First message", mentions: [] }], + projectId: project.id, + requestSequence: 2, + scope: "project", + threadId: thread.id, + }); + if (args.includeSecondTurn !== false) { + seedCompletedTurn(harness, { + providerThreadId: "provider-original", + requestSequence: 7, + text: "Original last message", + threadId: thread.id, + turnId: "turn-last", + providerCheckpointId: "checkpoint-last", + }); + createPromptHistoryEntry(harness.db, { + input: [{ type: "text", text: "Original last message", mentions: [] }], + projectId: project.id, + requestSequence: 7, + scope: "thread", + threadId: thread.id, + }); + } + return { environment, thread }; +} + +describe("editThreadMessage", () => { + it("resolves the latest user message when a later turn was agent-initiated", async () => { + await withTestHarness(async (harness) => { + const { thread } = seedEditableThread(harness); + seedCompletedTurn(harness, { + initiator: "agent", + providerCheckpointId: "checkpoint-agent", + providerThreadId: "provider-original", + requestSequence: 12, + senderThreadId: "sender-thread", + text: "Agent follow-up", + threadId: thread.id, + turnId: "turn-agent", + }); + + expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ + expectedRequestSequence: 7, + }); + }); + }); + + it("replaces an earlier Codex turn and removes every later conversation turn", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-earlier-turn", + expectedRequestSequence: 2, + input: [ + { type: "text", text: "Replacement first message", mentions: [] }, + ], + }, + }), + ).resolves.toEqual({ + ok: true, + operationId: "edit-op-earlier-turn", + requestSequence: 13, + }); + + expect( + listQueuedThreadCommands(harness, "thread.rewind.prepare", thread.id), + ).toHaveLength(0); + await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect( + listEvents(harness.db, { threadId: thread.id }).map( + (event) => event.sequence, + ), + ).toEqual([1, 12, 13]); + }); + }); + + it("starts a fresh Codex session when editing the first turn", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + includeSecondTurn: false, + }); + + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-first-turn", + expectedRequestSequence: 2, + input: [ + { type: "text", text: "Replacement first message", mentions: [] }, + ], + }, + }), + ).resolves.toEqual({ + ok: true, + operationId: "edit-op-first-turn", + requestSequence: 8, + }); + + expect( + listQueuedThreadCommands(harness, "thread.rewind.prepare", thread.id), + ).toHaveLength(0); + await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toEqual([expect.not.objectContaining({ fork: expect.anything() })]); + expect( + listEvents(harness.db, { threadId: thread.id }).map( + (event) => event.sequence, + ), + ).toEqual([1, 7, 8]); + expect( + listStoredProjectPromptHistoryRows(harness.db, { + projectId: thread.projectId, + limit: 10, + }).map((entry) => entry.requestSequence), + ).toEqual([8]); + expect( + listStoredThreadPromptHistoryRows(harness.db, { + threadId: thread.id, + limit: 10, + }), + ).toEqual([]); + }); + }); + + it("keeps history intact until the staged Codex rewind succeeds, then replaces the suffix", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + expect(getLatestThreadMessageEdit(harness.deps, thread)).toEqual({ + expectedRequestSequence: 7, + input: [ + { + type: "text", + text: "Original last message", + mentions: [], + }, + ], + }); + + const payload = { + operationId: "edit-op-success", + expectedRequestSequence: 7, + input: [ + { type: "text" as const, text: "Replacement message", mentions: [] }, + ], + model: "gpt-5", + serviceTier: "default" as const, + reasoningLevel: "medium" as const, + permissionMode: "full" as const, + }; + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + expect(rewind.command).toMatchObject({ + sourceProviderThreadId: "provider-original", + retainThroughProviderCheckpoint: "turn-first", + threadId: thread.id, + }); + expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(11); + + if (rewind.command.type !== "thread.rewind.prepare") { + throw new Error("Expected a thread.rewind.prepare command"); + } + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: "provider-staged-rewind", + }); + await expect(editPromise).resolves.toEqual({ + ok: true, + operationId: "edit-op-success", + requestSequence: 13, + }); + + const stored = listEvents(harness.db, { threadId: thread.id }); + expect(stored.map((event) => event.sequence)).toEqual([ + 1, 2, 3, 4, 5, 6, 12, 13, + ]); + const replacement = stored.find((event) => event.sequence === 13); + expect(replacement).toMatchObject({ type: "client/turn/requested" }); + expect(JSON.parse(replacement?.data ?? "null")).toMatchObject({ + input: [{ type: "text", text: "Replacement message", mentions: [] }], + }); + expect(getThread(harness.db, thread.id)).toMatchObject({ + status: "active", + }); + await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toEqual([ + expect.objectContaining({ + fork: { sourceProviderThreadId: "provider-staged-rewind" }, + input: [{ type: "text", text: "Replacement message", mentions: [] }], + }), + ]); + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload, + }), + ).resolves.toEqual({ + ok: true, + operationId: "edit-op-success", + requestSequence: 13, + }); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toHaveLength(1); + expect( + listStoredProjectPromptHistoryRows(harness.db, { + projectId: thread.projectId, + limit: 10, + }).map((entry) => entry.requestSequence), + ).toEqual([2]); + expect( + listStoredThreadPromptHistoryRows(harness.db, { + threadId: thread.id, + limit: 10, + }).map((entry) => entry.requestSequence), + ).toEqual([13]); + }); + }); + + it.each(["claude-code", "pi"] as const)( + "stages %s history through the preceding provider checkpoint", + async (providerId) => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + providerId, + }); + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: `edit-op-${providerId}`, + expectedRequestSequence: 7, + input: [ + { type: "text", text: "Replacement message", mentions: [] }, + ], + }, + }); + + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + expect(rewind.command).toMatchObject({ + providerId, + retainThroughProviderCheckpoint: "checkpoint-first", + sourceProviderThreadId: "provider-original", + }); + if (rewind.command.type !== "thread.rewind.prepare") { + throw new Error("Expected a thread.rewind.prepare command"); + } + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: `provider-staged-${providerId}`, + }); + await expect(editPromise).resolves.toMatchObject({ + ok: true, + operationId: `edit-op-${providerId}`, + }); + }); + }, + ); + + it.each(["claude-code", "pi"] as const)( + "rejects a %s rewind through legacy history without a checkpoint", + async (providerId) => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + firstProviderCheckpoint: null, + providerId, + }); + + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: `edit-op-legacy-${providerId}`, + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }), + ).rejects.toThrow("no editable history checkpoint"); + expect( + listQueuedThreadCommands(harness, "thread.rewind.prepare", thread.id), + ).toHaveLength(0); + }); + }, + ); + + it("leaves the original suffix untouched when Codex cannot stage the rewind", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-failure", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rejectedEdit = + expect(editPromise).rejects.toThrow("Codex fork failed"); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + await reportQueuedCommandError(harness, rewind, { + errorCode: "provider_error", + errorMessage: "Codex fork failed", + }); + + await rejectedEdit; + expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(11); + expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ + expectedRequestSequence: 7, + }); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toHaveLength(0); + }); + }); + + it("rejects reads and mutations while the experiment is disabled", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + editMessagesExperiment: false, + }); + + expect(() => getLatestThreadMessageEdit(harness.deps, thread)).toThrow( + "Enable the Edit messages experiment", + ); + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-disabled", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }), + ).rejects.toThrow("Enable the Edit messages experiment"); + }); + }); +}); diff --git a/apps/server/test/threads/thread-runtime-config.test.ts b/apps/server/test/threads/thread-runtime-config.test.ts index a9d676e853..429d89dba8 100644 --- a/apps/server/test/threads/thread-runtime-config.test.ts +++ b/apps/server/test/threads/thread-runtime-config.test.ts @@ -857,6 +857,7 @@ describe("thread runtime config", () => { setExperiments(harness.db, { claudeCodeMockCliTraffic: true, + editMessages: false, newOnboarding: false, toolsHub: false, }); diff --git a/docs/configuration.md b/docs/configuration.md index 9cabbd8245..4bd9a5c2b3 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -585,6 +585,10 @@ The `toolsHub` experiment exposes Extensions for managing skills and plugins, while Automations stays in the Plugins section beside threads. The `toolsHub` gate only controls the UI. Installed skills, automation execution, plugin runtimes, CLI commands, and backend APIs keep working while it is off. +The `editMessages` experiment enables replacing any completed user message in +an idle Codex, Claude Code, or Pi thread. Opening the editor does not change +history; submission atomically replaces that message and every later turn while +keeping workspace changes. ## Thread Timeline Window diff --git a/packages/agent-runtime/src/claude-code/adapter.test.ts b/packages/agent-runtime/src/claude-code/adapter.test.ts index cc31e368b4..9e90bbc8e3 100644 --- a/packages/agent-runtime/src/claude-code/adapter.test.ts +++ b/packages/agent-runtime/src/claude-code/adapter.test.ts @@ -308,6 +308,27 @@ describe("claude-code provider adapter", () => { }); }); + it("buildCommand thread/fork forwards the provider checkpoint", () => { + const adapter = createClaudeCodeProviderAdapter(); + const cmd = adapter.buildCommandPlan({ + type: "thread/fork", + cwd: "/tmp/worktree", + threadId: "bb-thread-1", + sourceProviderThreadId: "claude-session-1", + sourceProviderCheckpointId: "assistant-message-42", + instructionMode: "append", + options: fullProviderExecutionContext, + }); + + expect(cmd).toMatchObject({ + method: "thread/fork", + params: { + sourceProviderCheckpointId: "assistant-message-42", + sourceProviderThreadId: "claude-session-1", + }, + }); + }); + it("buildCommand passes workflowsEnabled through explicitly on thread/start and thread/resume", () => { const adapter = createClaudeCodeProviderAdapter(); const start = adapter.buildCommandPlan({ @@ -2006,6 +2027,34 @@ describe("claude-code provider adapter", () => { ); }); + it("records the latest Claude assistant message as the turn checkpoint", () => { + const adapter = createClaudeCodeProviderAdapter(); + adapter.translateEvent({ + type: "assistant", + uuid: "assistant-message-42", + message: { + id: "msg-1", + role: "assistant", + content: [{ type: "text", text: "Done" }], + }, + session_id: "sess-1", + }); + + const events = adapter.translateEvent({ + type: "result", + subtype: "success", + session_id: "sess-1", + }); + + expect(events).toContainEqual( + expect.objectContaining({ + type: "turn/completed", + status: "completed", + providerCheckpointId: "assistant-message-42", + }), + ); + }); + it("translateEvent completes a pending turn for Claude synthetic no-response messages", () => { const adapter = createClaudeCodeProviderAdapter(); diff --git a/packages/agent-runtime/src/claude-code/adapter.ts b/packages/agent-runtime/src/claude-code/adapter.ts index 70b5c113ff..19db4d3281 100644 --- a/packages/agent-runtime/src/claude-code/adapter.ts +++ b/packages/agent-runtime/src/claude-code/adapter.ts @@ -875,6 +875,7 @@ export function createClaudeCodeProviderAdapter( reasoningOutputTokens: 0, }, latestRequestContextTokens: undefined, + latestProviderCheckpointId: undefined, lastModelFallback: undefined, openAssistantMessageIdsByScope: new Map(), openCompaction: undefined, @@ -906,6 +907,7 @@ export function createClaudeCodeProviderAdapter( const hadOpenTurn = args.state.currentTurnId !== undefined; if (!hadOpenTurn) { args.state.latestRequestContextTokens = undefined; + args.state.latestProviderCheckpointId = undefined; } const turnId = turnState.ensureTurnStarted(args); if (!hadOpenTurn) { @@ -1331,6 +1333,12 @@ export function createClaudeCodeProviderAdapter( threadId: command.threadId, cwd: command.cwd, sourceProviderThreadId: command.sourceProviderThreadId, + ...(command.sourceProviderCheckpointId !== undefined + ? { + sourceProviderCheckpointId: + command.sourceProviderCheckpointId, + } + : {}), instructionMode: command.instructionMode, claudeCodeMockCliTraffic: command.options.claudeCodeMockCliTraffic, diff --git a/packages/agent-runtime/src/claude-code/bridge/__tests__/bridge.test.ts b/packages/agent-runtime/src/claude-code/bridge/__tests__/bridge.test.ts index 096607abbe..ae21fb6b67 100644 --- a/packages/agent-runtime/src/claude-code/bridge/__tests__/bridge.test.ts +++ b/packages/agent-runtime/src/claude-code/bridge/__tests__/bridge.test.ts @@ -19,12 +19,14 @@ import { type PermissionEscalation, } from "@bb/domain"; -const { queryMock } = vi.hoisted(() => ({ +const { forkSessionMock, queryMock } = vi.hoisted(() => ({ + forkSessionMock: vi.fn(), queryMock: vi.fn(), })); vi.mock("@anthropic-ai/claude-agent-sdk", () => ({ query: queryMock, + forkSession: forkSessionMock, createSdkMcpServer: vi.fn(() => ({})), tool: vi.fn((_name, _desc, _schema, handler) => handler), })); @@ -578,6 +580,7 @@ async function forwardAskUserQuestion({ describe("bridge", () => { beforeEach(() => { vi.clearAllMocks(); + forkSessionMock.mockResolvedValue({ sessionId: "forked-session-1" }); queryMock.mockReturnValue({ initializationResult: vi.fn().mockResolvedValue({ account: {}, @@ -621,6 +624,51 @@ describe("bridge", () => { } }); + it("forks a Claude session through the requested provider checkpoint", async () => { + const bridge = createBridgeJsonRpcTestHarness(handleLine); + const queries: ControlledClaudeQuery[] = []; + queryMock.mockImplementation(() => { + const query = createControlledClaudeQuery(); + queries.push(query); + return query; + }); + + try { + bridge.sendRequest(1, "thread/fork", { + approvedPlanPermissionMode: "default", + workflowsEnabled: false, + claudeCodeMockCliTraffic: DEFAULT_CLAUDE_CODE_MOCK_CLI_TRAFFIC_CONFIG, + baseInstructions: "test", + cwd: "/tmp/worktree", + instructionMode: "append", + permissionEscalation: "ask", + permissionMode: "default", + permissionScope: "workspace", + sourceProviderCheckpointId: "assistant-message-42", + sourceProviderThreadId: "source-session-1", + threadId: "forked-thread-1", + }); + + await expect(bridge.waitForResponse(1)).resolves.toMatchObject({ + result: { + providerThreadId: "forked-session-1", + threadId: "forked-thread-1", + }, + }); + expect(forkSessionMock).toHaveBeenCalledWith("source-session-1", { + dir: "/tmp/worktree", + upToMessageId: "assistant-message-42", + }); + } finally { + await stopBridgeThread({ + bridge, + queries, + threadId: "forked-thread-1", + }); + bridge.restore(); + } + }); + it("keeps manager sessions on a plain string system prompt", () => { const options = buildSessionOptions( { diff --git a/packages/agent-runtime/src/claude-code/bridge/bridge.ts b/packages/agent-runtime/src/claude-code/bridge/bridge.ts index b399e7bb2d..015de60ea2 100644 --- a/packages/agent-runtime/src/claude-code/bridge/bridge.ts +++ b/packages/agent-runtime/src/claude-code/bridge/bridge.ts @@ -1881,6 +1881,9 @@ async function handleThreadFork( try { const forkResult = await forkSession(params.sourceProviderThreadId, { dir: params.cwd, + ...(params.sourceProviderCheckpointId !== undefined + ? { upToMessageId: params.sourceProviderCheckpointId } + : {}), }); forkedProviderThreadId = forkResult.sessionId; } catch (error) { diff --git a/packages/agent-runtime/src/claude-code/bridge/commands.ts b/packages/agent-runtime/src/claude-code/bridge/commands.ts index ef8fb88cdb..11cd65cf74 100644 --- a/packages/agent-runtime/src/claude-code/bridge/commands.ts +++ b/packages/agent-runtime/src/claude-code/bridge/commands.ts @@ -111,6 +111,7 @@ const claudeCodeCommandSchema = z.discriminatedUnion("method", [ threadId: z.string(), cwd: z.string(), sourceProviderThreadId: z.string(), + sourceProviderCheckpointId: z.string().min(1).optional(), baseInstructions: z.string().optional(), additionalWorkspaceWriteRoots: bridgeAdditionalWorkspaceWriteRootsSchema, plugins: bridgeClaudePluginsSchema, diff --git a/packages/agent-runtime/src/claude-code/schemas.ts b/packages/agent-runtime/src/claude-code/schemas.ts index 1009bf180f..135ddba768 100644 --- a/packages/agent-runtime/src/claude-code/schemas.ts +++ b/packages/agent-runtime/src/claude-code/schemas.ts @@ -349,6 +349,7 @@ export const claudeAssistantMessageSchema = z .object({ type: z.literal("assistant"), message: z.unknown(), + uuid: z.string().min(1).optional(), }) .passthrough(); export type ClaudeAssistantMessage = z.infer< diff --git a/packages/agent-runtime/src/claude-code/translate-message.ts b/packages/agent-runtime/src/claude-code/translate-message.ts index f5f19aa321..be6f180117 100644 --- a/packages/agent-runtime/src/claude-code/translate-message.ts +++ b/packages/agent-runtime/src/claude-code/translate-message.ts @@ -67,6 +67,7 @@ export interface ClaudeTurnState { currentTurnId: string | undefined; cumulativeTokens: ThreadEventTokenUsageBreakdown; latestRequestContextTokens: number | undefined; + latestProviderCheckpointId: string | undefined; lastModelFallback: | { fallbackModel: string; @@ -677,6 +678,7 @@ export function translateClaudeSdkMessage( }); } const message = parsedMessage.data; + const providerCheckpointId = message.uuid; // Claude sends this model transition before it begins streaming from the // fallback model. Its richer system/model_* duplicate arrives only after // the response, so emit now and deduplicate that later event. @@ -684,6 +686,9 @@ export function translateClaudeSdkMessage( extractClaudeFallbackOnlyAssistantMessage(message); if (fallbackTransition !== null) { const turnId = args.ensureTurnStarted({ events, state, threadId }); + if (providerCheckpointId !== undefined) { + state.latestProviderCheckpointId = providerCheckpointId; + } if ( !isDuplicateClaudeModelFallback(state, fallbackTransition, turnId) ) { @@ -714,6 +719,9 @@ export function translateClaudeSdkMessage( if (!turnId) { return []; } + if (providerCheckpointId !== undefined) { + state.latestProviderCheckpointId = providerCheckpointId; + } if (hasCompletionBlockingClaudeTasks(state.tasksById)) { return events; } @@ -723,6 +731,11 @@ export function translateClaudeSdkMessage( providerThreadId: "", scope: turnScope(turnId), status: "completed", + ...(state.latestProviderCheckpointId !== undefined + ? { + providerCheckpointId: state.latestProviderCheckpointId, + } + : {}), }); args.turnState.finishTurn({ state, threadId: stateKey }); return events; @@ -732,6 +745,9 @@ export function translateClaudeSdkMessage( state, threadId, }); + if (providerCheckpointId !== undefined) { + state.latestProviderCheckpointId = providerCheckpointId; + } const requestContextTokens = extractClaudeRequestContextTokens(message); if (requestContextTokens !== null) { state.latestRequestContextTokens = requestContextTokens; @@ -979,6 +995,11 @@ export function translateClaudeSdkMessage( providerThreadId: "", scope: turnScope(state.currentTurnId), status: failed ? "failed" : "completed", + ...(state.latestProviderCheckpointId !== undefined + ? { + providerCheckpointId: state.latestProviderCheckpointId, + } + : {}), }); args.turnState.finishTurn({ state, threadId: stateKey }); } diff --git a/packages/agent-runtime/src/codex/adapter.test.ts b/packages/agent-runtime/src/codex/adapter.test.ts index 422a7de8ee..d83e9281d7 100644 --- a/packages/agent-runtime/src/codex/adapter.test.ts +++ b/packages/agent-runtime/src/codex/adapter.test.ts @@ -1761,6 +1761,27 @@ describe("codex provider adapter", () => { expect(JSON.stringify(cmd)).not.toContain("persistExtendedHistory"); }); + it("buildCommand thread/fork can stop at a specific source turn", () => { + const adapter = createCodexProviderAdapter(); + const cmd = adapter.buildCommandPlan({ + type: "thread/fork", + cwd: "/tmp/worktree", + threadId: "bb-thread-edited", + sourceProviderThreadId: "codex-source-thread", + sourceProviderCheckpointId: "turn-before-edited-message", + instructionMode: "append", + options: fullProviderExecutionContext, + }); + + expect(cmd).toMatchObject({ + method: "thread/fork", + params: { + threadId: "codex-source-thread", + lastTurnId: "turn-before-edited-message", + }, + }); + }); + it("buildCommand maps max reasoning level through to Codex", () => { const adapter = createCodexProviderAdapter(); const cmd = adapter.buildCommandPlan({ diff --git a/packages/agent-runtime/src/codex/adapter.ts b/packages/agent-runtime/src/codex/adapter.ts index 59686c0aeb..4ba632049f 100644 --- a/packages/agent-runtime/src/codex/adapter.ts +++ b/packages/agent-runtime/src/codex/adapter.ts @@ -104,6 +104,7 @@ type BbThreadStartParams = ThreadStartParams & { type BbThreadForkParams = { threadId: string; + lastTurnId?: string | null; model?: string | null; serviceTier?: string | null; cwd?: string | null; @@ -1910,6 +1911,9 @@ export function createCodexProviderAdapter( const preparedGitRoots = prepareWorkspaceWriteGitRoots({ command }); const params: BbThreadForkParams = { threadId: command.sourceProviderThreadId, + ...(command.sourceProviderCheckpointId !== undefined + ? { lastTurnId: command.sourceProviderCheckpointId } + : {}), approvalPolicy: preparedGitRoots.permissionSettings.approvalPolicy, approvalsReviewer: preparedGitRoots.permissionSettings.approvalsReviewer, diff --git a/packages/agent-runtime/src/pi/adapter.test.ts b/packages/agent-runtime/src/pi/adapter.test.ts index b8314fefae..534a6c9c1c 100644 --- a/packages/agent-runtime/src/pi/adapter.test.ts +++ b/packages/agent-runtime/src/pi/adapter.test.ts @@ -332,6 +332,27 @@ describe("pi provider adapter", () => { }); }); + it("buildCommand thread/fork forwards the provider checkpoint", () => { + const adapter = createPiProviderAdapter(); + const cmd = adapter.buildCommandPlan({ + type: "thread/fork", + cwd: "/tmp/worktree", + threadId: "t1", + sourceProviderThreadId: "source-session", + sourceProviderCheckpointId: "pi-entry-42", + instructionMode: "append", + options: fullProviderExecutionContext, + }); + + expect(cmd).toMatchObject({ + method: "thread/fork", + params: { + providerCheckpointId: "pi-entry-42", + sourceProviderThreadId: "source-session", + }, + }); + }); + it("buildCommand thread/start maps skill roots to Pi additional skill paths", () => { const adapter = createPiProviderAdapter(); const cmd = adapter.buildCommandPlan({ @@ -665,9 +686,10 @@ describe("pi provider adapter", () => { // Start a turn first adapter.translateEvent(loadFixture("agent-start.json")); - const events = adapter.translateEvent( - loadFixture("agent-end-with-message.json"), - ); + const events = adapter.translateEvent({ + ...loadFixture("agent-end-with-message.json"), + providerCheckpointId: "pi-entry-42", + }); expect(events).toContainEqual( expect.objectContaining({ @@ -683,6 +705,7 @@ describe("pi provider adapter", () => { type: "turn/completed", scope: turnScope("turn-1"), status: "completed", + providerCheckpointId: "pi-entry-42", }), ); expect(events.some((event) => event.type === "provider/error")).toBe(false); diff --git a/packages/agent-runtime/src/pi/adapter.ts b/packages/agent-runtime/src/pi/adapter.ts index 35c482f880..2eec34fcf9 100644 --- a/packages/agent-runtime/src/pi/adapter.ts +++ b/packages/agent-runtime/src/pi/adapter.ts @@ -280,6 +280,7 @@ const piAgentEndEventSchema = z .object({ type: z.literal("agent_end"), messages: z.array(piConversationMessageSchema), + providerCheckpointId: z.string().min(1).optional(), willRetry: z.boolean().default(false), }) .passthrough(); @@ -1086,6 +1087,11 @@ export function createPiProviderAdapter( providerThreadId: "", scope: turnScope(currentTurnId), status: "completed", + ...(piEvent.data.providerCheckpointId !== undefined + ? { + providerCheckpointId: piEvent.data.providerCheckpointId, + } + : {}), }); resetPiCommandOutputSnapshots(state); turnState.finishTurn({ state, threadId: stateKey }); @@ -1477,6 +1483,11 @@ export function createPiProviderAdapter( threadId: command.threadId, sourceProviderThreadId: command.sourceProviderThreadId, cwd: command.cwd, + ...(command.sourceProviderCheckpointId !== undefined + ? { + providerCheckpointId: command.sourceProviderCheckpointId, + } + : {}), ...resolvePiInstructionOverrides(command), ...(additionalSkillPathsParams ? additionalSkillPathsParams : {}), ...(config ? { config } : {}), diff --git a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts index e219d155bb..ee4d617a6e 100644 --- a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts +++ b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts @@ -74,18 +74,21 @@ const { mockCreateAgentSession: vi.fn(), mockCreateAgentSessionServices, mockInMemory: vi.fn((cwd?: string) => ({ kind: "in-memory", cwd })), - mockOpen: vi.fn((path: string) => ({ kind: "open", path })), + mockOpen: vi.fn(), mockResourceLoaders, mockGetPiModelRuntime: vi.fn(async () => mockModelRuntime), }; }); vi.mock("@earendil-works/pi-coding-agent", async (importOriginal) => { - // Keep the real SessionManager.forkFrom so the fork test exercises genuine - // session-file materialization on disk; only the agent-session and resume/open - // entry points are mocked away from the real SDK runtime. + // Keep the real SessionManager file operations so fork tests exercise + // genuine full-history and checkpointed materialization on disk. const actual = await importOriginal(); + mockOpen.mockImplementation( + (path: string, sessionDir?: string, cwdOverride?: string) => + actual.SessionManager.open(path, sessionDir, cwdOverride), + ); return { createAgentSessionFromServices: mockCreateAgentSession, createAgentSessionServices: mockCreateAgentSessionServices, @@ -126,6 +129,7 @@ interface ControlledPiAgentSession { getContextUsage: ReturnType; isStreaming: boolean; prompt: ReturnType; + sessionManager: { getLeafId: ReturnType }; setActiveToolsByName: ReturnType; subscribe: ReturnType; } @@ -159,6 +163,7 @@ function createControlledPiAgentSession(): ControlledPiAgentSession { getContextUsage: vi.fn(() => undefined), isStreaming: false, prompt: vi.fn(async () => {}), + sessionManager: { getLeafId: vi.fn(() => "pi-entry-checkpoint") }, setActiveToolsByName: vi.fn(), subscribe: vi.fn((listener: ControlledPiAgentSessionListener) => { listeners.push(listener); @@ -237,7 +242,10 @@ describe("pi bridge", () => { method: "sdk/message", params: { threadId: "thread-extension-stdout", - message: createAgentEndEvent(), + message: { + ...createAgentEndEvent(), + providerCheckpointId: "pi-entry-checkpoint", + }, }, }), ); @@ -439,7 +447,7 @@ describe("pi bridge", () => { } }); - it("forks the source session history into the new thread's deterministic file", async () => { + it("forks source history through a checkpoint into the deterministic file", async () => { const bridge = createBridgeJsonRpcTestHarness(handleLine); mockCreateAgentSession.mockImplementation(async () => ({ session: createControlledPiAgentSession(), @@ -477,6 +485,23 @@ describe("pi bridge", () => { content: [{ type: "text", text: "noted: 42" }], }, }), + JSON.stringify({ + type: "message", + id: "e3", + parentId: "e2", + timestamp: "2026-06-15T00:00:03.000Z", + message: { role: "user", content: "forget 42" }, + }), + JSON.stringify({ + type: "message", + id: "e4", + parentId: "e3", + timestamp: "2026-06-15T00:00:04.000Z", + message: { + role: "assistant", + content: [{ type: "text", text: "forgotten" }], + }, + }), ].join("\n")}\n`; writeFileSync(sourceFile, sourceContent); @@ -486,19 +511,26 @@ describe("pi bridge", () => { try { bridge.sendRequest(40, "thread/fork", { cwd: "/tmp/worktree", + providerCheckpointId: "e2", threadId: targetThreadId, sourceProviderThreadId: sourceThreadId, }); - await expect(bridge.waitForResponse(40)).resolves.toMatchObject({ + const response = await bridge.waitForResponse(40); + if (response.error !== undefined) { + throw new Error(JSON.stringify(response.error)); + } + expect(response).toMatchObject({ id: 40, result: { threadId: targetThreadId }, }); // The forked session is materialized at the NEW thread's deterministic - // path, carrying the source history plus parentSession lineage. + // path, carrying the retained source path plus parentSession lineage. const forkedContent = readFileSync(targetFile, "utf8"); expect(forkedContent).toContain("remember 42"); expect(forkedContent).toContain("noted: 42"); + expect(forkedContent).not.toContain("forget 42"); + expect(forkedContent).not.toContain("forgotten"); expect(forkedContent).toContain(`"parentSession":"${sourceFile}"`); // Source file is left untouched by the fork. expect(readFileSync(sourceFile, "utf8")).toBe(sourceContent); @@ -790,6 +822,17 @@ describe("pi bridge", () => { await bridge.flushWork(); await bridge.flushWork(); + expect(bridge.messages).toContainEqual( + expect.objectContaining({ + method: "sdk/message", + params: expect.objectContaining({ + message: expect.objectContaining({ + providerCheckpointId: "pi-entry-checkpoint", + type: "agent_end", + }), + }), + }), + ); expect(bridge.messages).toContainEqual( expect.objectContaining({ method: "error", diff --git a/packages/agent-runtime/src/pi/bridge/bridge.ts b/packages/agent-runtime/src/pi/bridge/bridge.ts index e79ec8467f..815475e613 100644 --- a/packages/agent-runtime/src/pi/bridge/bridge.ts +++ b/packages/agent-runtime/src/pi/bridge/bridge.ts @@ -152,6 +152,7 @@ const piThreadForkParamsSchema = z threadId: z.string(), sourceProviderThreadId: z.string(), cwd: z.string(), + providerCheckpointId: z.string().min(1).optional(), additionalSkillPaths: piAdditionalSkillPathsSchema, baseInstructions: z.string().optional(), appendSystemPrompt: z.string().optional(), @@ -400,10 +401,20 @@ function createOnPiEvent( threadId: args.threadId, }); if (!threadSession) return; + const providerCheckpointId = + event.type === "agent_end" + ? threadSession.session.getProviderCheckpointId() + : undefined; send({ jsonrpc: "2.0", method: "sdk/message", - params: { threadId: args.threadId, message: event }, + params: { + threadId: args.threadId, + message: + providerCheckpointId === undefined + ? event + : { ...event, providerCheckpointId }, + }, }); if (event.type === "agent_end" || event.type === "compaction_end") { emitContextWindowUsage(args.threadId); @@ -773,12 +784,14 @@ async function handleThreadFork( }); const bridgeSessionDir = resolvePiBridgeSessionDir({ env: process.env }); - const forked = SessionManager.forkFrom( - sourceSessionFile, - params.cwd, - bridgeSessionDir, - ); - const forkedFile = forked.getSessionFile(); + const forked = + params.providerCheckpointId === undefined + ? SessionManager.forkFrom(sourceSessionFile, params.cwd, bridgeSessionDir) + : SessionManager.open(sourceSessionFile, bridgeSessionDir, params.cwd); + const forkedFile = + params.providerCheckpointId === undefined + ? forked.getSessionFile() + : forked.createBranchedSession(params.providerCheckpointId); if (!forkedFile) { sendError(id, -32000, "Cannot fork: forked pi session was not persisted"); return; diff --git a/packages/agent-runtime/src/pi/bridge/sdk-session.ts b/packages/agent-runtime/src/pi/bridge/sdk-session.ts index c9cab2469f..c99fc0f27b 100644 --- a/packages/agent-runtime/src/pi/bridge/sdk-session.ts +++ b/packages/agent-runtime/src/pi/bridge/sdk-session.ts @@ -212,6 +212,10 @@ export class PiSdkSession { return this.session?.getContextUsage(); } + getProviderCheckpointId(): string | undefined { + return this.session?.sessionManager.getLeafId() ?? undefined; + } + async start(): Promise { assertExclusivePiPromptOverrides(this.options); diff --git a/packages/agent-runtime/src/provider-adapter.ts b/packages/agent-runtime/src/provider-adapter.ts index 1ea16ba43b..863cb19402 100644 --- a/packages/agent-runtime/src/provider-adapter.ts +++ b/packages/agent-runtime/src/provider-adapter.ts @@ -160,6 +160,7 @@ export type AdapterCommand = threadId: string; cwd: string; sourceProviderThreadId: string; + sourceProviderCheckpointId?: string; options: ProviderExecutionContext; dynamicTools?: DynamicTool[]; disallowedTools?: readonly string[]; diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts new file mode 100644 index 0000000000..fbcf393fc9 --- /dev/null +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -0,0 +1,79 @@ +import { mkdtempSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import type { ThreadEvent } from "@bb/domain"; +import type { AdapterCommand } from "./provider-adapter.js"; +import { createAgentRuntimeWithAdapters } from "./runtime.js"; +import { + createRecordingAdapter, + fullRuntimeOptions, +} from "./test/runtime-test-harness.js"; +import { fakeProviderScriptPath } from "./test/index.js"; + +const temporaryDirectories: string[] = []; + +afterEach(() => { + for (const directory of temporaryDirectories.splice(0)) { + rmSync(directory, { recursive: true, force: true }); + } +}); + +describe("prepareThreadRewind", () => { + it("deduplicates concurrent operation retries and suppresses staging events", async () => { + const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); + temporaryDirectories.push(workspacePath); + const commands: AdapterCommand[] = []; + const events: ThreadEvent[] = []; + const runtime = createAgentRuntimeWithAdapters({ + workspacePath, + onEvent: (event) => events.push(event), + onToolCall: async () => ({ + contentItems: [{ type: "inputText", text: "ok" }], + success: true, + }), + adapterFactory: () => + createRecordingAdapter({ + recordedCommands: commands, + scriptPath: fakeProviderScriptPath, + }), + }); + const request = { + environmentId: "env-1", + threadId: "thread-1", + operationId: "edit-op-1", + projectId: "project-1", + providerId: "codex", + sourceProviderThreadId: "provider-source-1", + retainThroughProviderCheckpoint: "turn-before-edit", + options: fullRuntimeOptions, + instructionMode: "append" as const, + }; + + try { + const results = await Promise.all([ + runtime.prepareThreadRewind(request), + runtime.prepareThreadRewind(request), + ]); + + expect(results[0]).toEqual(results[1]); + expect( + commands.filter((command) => command.type === "thread/fork"), + ).toEqual([ + expect.objectContaining({ + sourceProviderCheckpointId: "turn-before-edit", + sourceProviderThreadId: "provider-source-1", + }), + ]); + expect(events).toEqual([]); + await expect( + runtime.prepareThreadRewind({ + ...request, + retainThroughProviderCheckpoint: "different-turn", + }), + ).rejects.toThrow("reused with different input"); + } finally { + await runtime.shutdown(); + } + }); +}); diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index 3ef9ffa5f1..fb889bd0ce 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -90,6 +90,18 @@ function normalizeExecutionOptions(args: { return args.adapter.normalizeExecutionOptions?.(args.options) ?? args.options; } +interface PreparedThreadRewind { + sourceProviderCheckpointId: string; + providerThreadId: string; + sourceProviderThreadId: string; +} + +interface PreparingThreadRewind { + sourceProviderCheckpointId: string; + promise: Promise<{ providerThreadId: string }>; + sourceProviderThreadId: string; +} + interface ReapIdleProviderSessionCandidate { idleSinceMs: number; providerThreadId: string; @@ -252,6 +264,10 @@ function createAgentRuntimeInternal( const idleProviderSessionSinceMsByThreadId = new Map(); const pendingTurnStartThreadIds = new Set(); const threadOperationCounts = new Map(); + const preparedThreadRewinds = new Map(); + const preparingThreadRewinds = new Map(); + const suppressedThreadEventIds = new Set(); + const detachedProviderThreadIds = new Set(); const threadGoalState = new RuntimeThreadGoalState(); const turnState = new RuntimeTurnState(); const backgroundWorkState = new RuntimeBackgroundWorkState(); @@ -958,6 +974,9 @@ function createAgentRuntimeInternal( } for (const targetThreadId of targetThreadIds) { + if (suppressedThreadEventIds.has(targetThreadId)) { + continue; + } const stampedEvent = stampThreadEventScope({ event, providerThreadId: @@ -1009,6 +1028,12 @@ function createAgentRuntimeInternal( function handleProviderNotification(args: RuntimeParsedMessageArgs): void { const sourceThreadId = getJsonRpcStringParam(args.parsed, "threadId"); + if ( + sourceThreadId !== undefined && + detachedProviderThreadIds.has(sourceThreadId) + ) { + return; + } emitTranslatedEvents({ events: args.proc.adapter.translateEvent(args.parsed, { threadId: sourceThreadId, @@ -1254,6 +1279,165 @@ function createAgentRuntimeInternal( }); }, + async prepareThreadRewind({ + environmentId, + threadId, + operationId, + projectId, + providerId, + sourceProviderThreadId, + retainThroughProviderCheckpoint, + acpLaunchSpec, + options: execOpts, + instructions, + dynamicTools, + disallowedTools, + instructionMode = "append", + }) { + if ( + providerId !== CODEX_PROVIDER_ID && + providerId !== "claude-code" && + providerId !== "pi" + ) { + throw new Error( + `Preparing a thread rewind is not supported by ${providerId}`, + ); + } + const rewindKey = `${threadId}\0${operationId}`; + const existing = preparedThreadRewinds.get(rewindKey); + if (existing !== undefined) { + if ( + existing.sourceProviderThreadId !== sourceProviderThreadId || + existing.sourceProviderCheckpointId !== + retainThroughProviderCheckpoint + ) { + throw new Error( + `Prepared rewind operation ${operationId} was reused with different input`, + ); + } + return { providerThreadId: existing.providerThreadId }; + } + + const pending = preparingThreadRewinds.get(rewindKey); + if (pending !== undefined) { + if ( + pending.sourceProviderThreadId !== sourceProviderThreadId || + pending.sourceProviderCheckpointId !== retainThroughProviderCheckpoint + ) { + throw new Error( + `Prepared rewind operation ${operationId} was reused with different input`, + ); + } + return pending.promise; + } + + const preparation = runThreadOperation({ + threadId, + work: async () => { + const processKey = resolveProviderProcessKey({ + ...(acpLaunchSpec !== undefined ? { acpLaunchSpec } : {}), + providerId, + threadId, + }); + await runtime.ensureProvider({ + providerId, + forThreadId: threadId, + ...(acpLaunchSpec !== undefined ? { acpLaunchSpec } : {}), + }); + const proc = requireProviderProcess({ processKey, providerId }); + const providerSkillRoots = skillRootsForProvider(providerId); + assertProviderSupportsExecutionOptions({ + adapter: proc.adapter, + options: execOpts, + providerId, + }); + + const stagingThreadId = `${threadId}:rewind:${operationId}`; + suppressedThreadEventIds.add(stagingThreadId); + threadIdentityRegistry.registerThreadProvider({ + providerId, + providerState: proc.identity, + shouldWaitForProviderIdentity: true, + threadId: stagingThreadId, + }); + try { + const envVars = buildThreadShellEnvironment({ + baseShellEnv: options.shellEnv, + environmentId, + projectId, + threadStoragePath: resolveThreadStoragePath({ + options, + threadId, + }), + threadId, + }); + const adapterCommand: AdapterCommand = { + type: "thread/fork", + threadId: stagingThreadId, + cwd: options.workspacePath, + sourceProviderThreadId, + sourceProviderCheckpointId: retainThroughProviderCheckpoint, + options: toProviderExecutionContext({ + envVars, + execOpts, + instructions, + skillRoots: providerSkillRoots, + }), + dynamicTools, + disallowedTools, + instructionMode, + }; + const command = requireProviderRequestPlan({ + commandType: adapterCommand.type, + plan: proc.adapter.buildCommandPlan(adapterCommand), + providerId, + }); + const result = await sendCommand({ + proc, + message: command, + resultSchema: threadIdentityResultSchema, + timeoutMs: THREAD_CREATION_REQUEST_TIMEOUT_MS, + }); + const providerThreadId = resolveThreadIdentityResult({ + result, + threadId: stagingThreadId, + }); + if (!providerThreadId) { + throw new Error( + `${providerId} did not return a provider thread for rewind operation ${operationId}`, + ); + } + detachedProviderThreadIds.add(providerThreadId); + preparedThreadRewinds.set(rewindKey, { + sourceProviderCheckpointId: retainThroughProviderCheckpoint, + providerThreadId, + sourceProviderThreadId, + }); + return { providerThreadId }; + } finally { + suppressedThreadEventIds.delete(stagingThreadId); + threadIdentityRegistry.forgetThread({ + providerState: proc.identity, + threadId: stagingThreadId, + }); + } + }, + }); + preparingThreadRewinds.set(rewindKey, { + sourceProviderCheckpointId: retainThroughProviderCheckpoint, + promise: preparation, + sourceProviderThreadId, + }); + try { + return await preparation; + } finally { + const current = preparingThreadRewinds.get(rewindKey); + if (current?.promise === preparation) { + preparingThreadRewinds.delete(rewindKey); + } + } + }, + async resumeThread({ environmentId, threadId, diff --git a/packages/agent-runtime/src/types.ts b/packages/agent-runtime/src/types.ts index 4674ba0e1e..3981a478e5 100644 --- a/packages/agent-runtime/src/types.ts +++ b/packages/agent-runtime/src/types.ts @@ -172,6 +172,26 @@ export interface StartThreadResult { providerThreadId: string; } +export interface PrepareThreadRewindArgs { + acpLaunchSpec?: HostDaemonAcpLaunchSpec; + environmentId: string; + threadId: string; + operationId: string; + projectId: string; + providerId: string; + sourceProviderThreadId: string; + retainThroughProviderCheckpoint: string; + options: AgentRuntimeExecutionOptions; + instructions?: string; + dynamicTools?: DynamicTool[]; + disallowedTools?: readonly string[]; + instructionMode?: InstructionMode; +} + +export interface PrepareThreadRewindResult { + providerThreadId: string; +} + export interface ResumeThreadArgs { acpLaunchSpec?: HostDaemonAcpLaunchSpec; environmentId: string; @@ -281,6 +301,10 @@ export interface AgentRuntime { startThread(args: StartThreadArgs): Promise; + prepareThreadRewind( + args: PrepareThreadRewindArgs, + ): Promise; + resumeThread(args: ResumeThreadArgs): Promise; runTurn(args: RunTurnArgs): Promise; diff --git a/packages/db/src/data/events.ts b/packages/db/src/data/events.ts index 5791d56855..9997841562 100644 --- a/packages/db/src/data/events.ts +++ b/packages/db/src/data/events.ts @@ -44,7 +44,14 @@ import type { } from "../connection.js"; import { alias, unionAll } from "drizzle-orm/sqlite-core"; import type { DbNotifier } from "../notifier.js"; -import { environments, events, threads } from "../schema.js"; +import { + environments, + events, + promptHistoryEntries, + threadDynamicContextFileStates, + threadSearchSegments, + threads, +} from "../schema.js"; import { createEventId } from "../ids.js"; import { truncatedEventDataColumn } from "./event-output-truncation.js"; import { deriveStoredEventItemFieldsFromSource } from "../stored-event-item-fields.js"; @@ -188,6 +195,62 @@ export interface CompletedStoredTurnRow { turnId: string; } +export interface DeleteThreadEventSuffixArgs { + cutoffSequence: number; + oldMaxSequence: number; + threadId: string; +} + +export interface DeleteThreadEventSuffixResult { + deletedEventCount: number; +} + +/** + * Deletes one conversation suffix and its sequence-scoped projections. + * Callers append a marker above oldMaxSequence first so sequence numbers are + * never reused after the rewrite. + */ +export function deleteThreadEventSuffixInTransaction( + db: DbTransaction, + args: DeleteThreadEventSuffixArgs, +): DeleteThreadEventSuffixResult { + db.delete(promptHistoryEntries) + .where( + and( + eq(promptHistoryEntries.threadId, args.threadId), + gte(promptHistoryEntries.requestSequence, args.cutoffSequence), + lte(promptHistoryEntries.requestSequence, args.oldMaxSequence), + ), + ) + .run(); + db.delete(threadSearchSegments) + .where( + and( + eq(threadSearchSegments.threadId, args.threadId), + gte(threadSearchSegments.sourceSeq, args.cutoffSequence), + lte(threadSearchSegments.sourceSeq, args.oldMaxSequence), + ), + ) + .run(); + // Dynamic-context state is not sequence-addressable. Clearing it is safe: + // the next turn may re-send unchanged context, while retaining it could hide + // context that only the removed turn had observed. + db.delete(threadDynamicContextFileStates) + .where(eq(threadDynamicContextFileStates.threadId, args.threadId)) + .run(); + const result = db + .delete(events) + .where( + and( + eq(events.threadId, args.threadId), + gte(events.sequence, args.cutoffSequence), + lte(events.sequence, args.oldMaxSequence), + ), + ) + .run(); + return { deletedEventCount: result.changes }; +} + export interface ListThreadIdsWithLatestHostDaemonRestartInterruptionArgs { threadIds: readonly string[]; } diff --git a/packages/db/src/data/index.ts b/packages/db/src/data/index.ts index f861e9a49b..06fc69af7e 100644 --- a/packages/db/src/data/index.ts +++ b/packages/db/src/data/index.ts @@ -298,6 +298,8 @@ export { appendStoredThreadEvent, appendStoredThreadEventInTransaction, appendStoredThreadEventsInTransaction, + deleteThreadEventSuffixInTransaction, + getHighWaterMarks, findStoredClientTurnRequestSequenceByRequestId, findStoredEventRow, getActiveStoredTurnId, @@ -369,6 +371,8 @@ export type { AppendDaemonEventsResult, AppendStoredThreadEventArgs, CompletedStoredTurnRow, + DeleteThreadEventSuffixArgs, + DeleteThreadEventSuffixResult, FindStoredClientTurnRequestSequenceByRequestIdArgs, GetStoredTurnRequestEventForTurnArgs, GetRootStoredTurnStartedSequenceArgs, diff --git a/packages/db/test/experiments.test.ts b/packages/db/test/experiments.test.ts index 501b02c3ea..a3b42d7833 100644 --- a/packages/db/test/experiments.test.ts +++ b/packages/db/test/experiments.test.ts @@ -37,6 +37,7 @@ describe("experiments", () => { .map((row) => row.key), ).toEqual([ "claudeCodeMockCliTraffic", + "editMessages", "futureExperiment", "newOnboarding", "toolsHub", diff --git a/packages/domain/src/change-kinds.ts b/packages/domain/src/change-kinds.ts index 7d1f17a0fa..1c0270da77 100644 --- a/packages/domain/src/change-kinds.ts +++ b/packages/domain/src/change-kinds.ts @@ -9,6 +9,7 @@ export const THREAD_CHANGE_KINDS = [ "thread-created", "thread-deleted", "events-appended", + "history-rewritten", "interactions-changed", "status-changed", "title-changed", diff --git a/packages/domain/src/experiments.ts b/packages/domain/src/experiments.ts index 77021f793d..346f70827a 100644 --- a/packages/domain/src/experiments.ts +++ b/packages/domain/src/experiments.ts @@ -14,6 +14,7 @@ import { z } from "zod"; */ export const experimentKeys = [ "claudeCodeMockCliTraffic", + "editMessages", "newOnboarding", "toolsHub", ] as const; diff --git a/packages/domain/src/provider-event.ts b/packages/domain/src/provider-event.ts index c1652ab630..a8d9170477 100644 --- a/packages/domain/src/provider-event.ts +++ b/packages/domain/src/provider-event.ts @@ -409,6 +409,8 @@ const unscopedProviderEventSchema = z.discriminatedUnion("type", [ providerThreadId: z.string().nullable(), status: threadEventTurnStatusSchema, error: z.object({ message: z.string() }).optional(), + /** Provider-native point through which a replacement branch should retain history. */ + providerCheckpointId: z.string().min(1).optional(), }), z .object({ diff --git a/packages/host-daemon-contract/src/commands.ts b/packages/host-daemon-contract/src/commands.ts index 755e532a9d..02a7b7bc02 100644 --- a/packages/host-daemon-contract/src/commands.ts +++ b/packages/host-daemon-contract/src/commands.ts @@ -325,6 +325,16 @@ export const threadStartCommandSchema = hostDaemonThreadTargetSchema refineGroupedInputMatchesFlatInput(value, ctx); }); +export const threadRewindPrepareCommandSchema = hostDaemonThreadTargetSchema + .merge(hostDaemonThreadRuntimeContextSchema) + .extend({ + type: z.literal("thread.rewind.prepare"), + operationId: z.string().min(1), + sourceProviderThreadId: z.string().min(1), + retainThroughProviderCheckpoint: z.string().min(1), + }) + .strict(); + export const turnSubmitTargetSchema = z.discriminatedUnion("mode", [ z.object({ mode: z.literal("start"), @@ -1348,6 +1358,9 @@ const knownAcpAgentsStatusResultSchema = z const threadStartResultSchema = z.object({ providerThreadId: z.string().min(1), }); +const threadRewindPrepareResultSchema = z + .object({ providerThreadId: z.string().min(1) }) + .strict(); const turnSubmitResultSchema = z.object({ appliedAs: z.enum(["new-turn", "steer"]), }); @@ -1557,6 +1570,15 @@ function defineHostDaemonCommandDescriptor< } export const hostDaemonCommandRegistry = { + "thread.rewind.prepare": defineHostDaemonCommandDescriptor({ + type: "thread.rewind.prepare", + schema: threadRewindPrepareCommandSchema, + resultSchema: threadRewindPrepareResultSchema, + transport: "settled", + retryable: false, + flushEventsBeforeResult: true, + envLane: "read", + }), "thread.start": defineHostDaemonCommandDescriptor({ type: "thread.start", schema: threadStartCommandSchema, diff --git a/packages/host-daemon-contract/src/session.ts b/packages/host-daemon-contract/src/session.ts index 895afdc2d3..d96d2cef17 100644 --- a/packages/host-daemon-contract/src/session.ts +++ b/packages/host-daemon-contract/src/session.ts @@ -440,6 +440,7 @@ const hostDaemonOnlineRpcResponseSuccessSchema = z.discriminatedUnion( onlineRpcResponseSuccessSchemaFor("workspace.diffFiles"), onlineRpcResponseSuccessSchemaFor("workspace.diffPatch"), onlineRpcResponseSuccessSchemaFor("workspace.pull_request"), + commandRpcResponseSuccessSchemaFor("thread.rewind.prepare"), commandRpcResponseSuccessSchemaFor("thread.start"), commandRpcResponseSuccessSchemaFor("turn.submit"), commandRpcResponseSuccessSchemaFor("thread.stop"), diff --git a/packages/host-daemon-contract/test/contract.test.ts b/packages/host-daemon-contract/test/contract.test.ts index b58f2a9a17..67716d2efb 100644 --- a/packages/host-daemon-contract/test/contract.test.ts +++ b/packages/host-daemon-contract/test/contract.test.ts @@ -484,6 +484,9 @@ const ONLINE_RPC_RESPONSE_RESULT_FIXTURES: OnlineRpcResponseResultFixtures = { }; const SETTLED_RESPONSE_RESULT_FIXTURES: SettledResponseResultFixtures = { + "thread.rewind.prepare": { + providerThreadId: "provider-thread-rewind", + }, "thread.start": { providerThreadId: "provider-thread-123", }, diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index 5b13c7b03a..be55762ea2 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -149,6 +149,7 @@ declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ "thread-created": "thread-created"; "thread-deleted": "thread-deleted"; "events-appended": "events-appended"; + "history-rewritten": "history-rewritten"; "interactions-changed": "interactions-changed"; "status-changed": "status-changed"; "title-changed": "title-changed"; @@ -238,6 +239,7 @@ type Environment = z$1.infer; declare const experimentsSchema: z$1.ZodRecord, z$1.ZodBoolean>; @@ -673,6 +675,7 @@ declare const threadEventSchema: z$1.ZodPipe>; + providerCheckpointId: z$1.ZodOptional; }, z$1.core.$strip>, z$1.ZodObject<{ type: z$1.ZodLiteral<"turn/input/accepted">; threadId: z$1.ZodString; @@ -2067,8 +2070,8 @@ type ThreadEventRow = { declare const threadStatusSchema: z$1.ZodEnum<{ error: "error"; active: "active"; - idle: "idle"; starting: "starting"; + idle: "idle"; stopping: "stopping"; }>; type ThreadStatus = z$1.infer; @@ -2886,8 +2889,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - base64: "base64"; utf8: "utf8"; + base64: "base64"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3383,6 +3386,207 @@ interface HostDaemonCommandDescriptor; + }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerId: z$1.ZodString; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeSkillRoots: z$1.ZodOptional>; + project: z$1.ZodDefault>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + options: z$1.ZodIntersection; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + claudeCodePermissionMode: z$1.ZodOptional>; + claudeCodeMockCliTraffic: z$1.ZodOptional>; + workflowsEnabled: z$1.ZodBoolean; + memoryEnabled: z$1.ZodOptional; + providerSubagentsEnabled: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"accept-edits">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"user">; + permissionEscalation: z$1.ZodEnum<{ + ask: "ask"; + deny: "deny"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"auto">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"automatic">; + permissionEscalation: z$1.ZodEnum<{ + ask: "ask"; + deny: "deny"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"full">; + permissionScope: z$1.ZodLiteral<"full">; + approvalReviewer: z$1.ZodNull; + permissionEscalation: z$1.ZodNull; + }, z$1.core.$strip>], "permissionMode">>; + instructions: z$1.ZodString; + dynamicTools: z$1.ZodArray>; + injectedSkillSources: z$1.ZodArray; + treeHash: z$1.ZodString; + entryPath: z$1.ZodString; + sourceType: z$1.ZodEnum<{ + builtin: "builtin"; + "data-dir": "data-dir"; + }>; + }, z$1.core.$strict>, z$1.ZodObject<{ + name: z$1.ZodString; + description: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-path">; + sourceType: z$1.ZodLiteral<"project">; + sourceRootPath: z$1.ZodString; + skillFilePath: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + name: z$1.ZodString; + description: z$1.ZodString; + kind: z$1.ZodLiteral<"host-path">; + sourceType: z$1.ZodEnum<{ + "shared-user": "shared-user"; + "shared-project": "shared-project"; + }>; + sourceRootPath: z$1.ZodString; + skillFilePath: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + disallowedTools: z$1.ZodOptional>; + instructionMode: z$1.ZodEnum<{ + append: "append"; + replace: "replace"; + }>; + type: z$1.ZodLiteral<"thread.rewind.prepare">; + operationId: z$1.ZodString; + sourceProviderThreadId: z$1.ZodString; + retainThroughProviderCheckpoint: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + providerThreadId: z$1.ZodString; + }, z$1.core.$strict>, "settled", false>; "thread.start": HostDaemonCommandDescriptor<"thread.start", z$1.ZodObject<{ environmentId: z$1.ZodString; threadId: z$1.ZodString; @@ -6934,6 +7138,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodRecord, z$1.ZodBoolean>; @@ -8443,6 +8648,221 @@ declare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{ requestId: z$1.ZodString; }, z$1.core.$strip>; type ContinueAfterProviderRateLimitResponse = z$1.infer; +declare const editMessageRequestSchema: z$1.ZodObject<{ + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodOptional; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + executionInputSources: z$1.ZodOptional>; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional>; + }, z$1.core.$strict>>; + operationId: z$1.ZodString; + expectedRequestSequence: z$1.ZodNumber; +}, z$1.core.$strict>; +type EditMessageRequest = z$1.infer; +declare const editMessageResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + operationId: z$1.ZodString; + requestSequence: z$1.ZodNumber; +}, z$1.core.$strict>; +type EditMessageResponse = z$1.infer; +declare const latestMessageEditResponseSchema: z$1.ZodObject<{ + expectedRequestSequence: z$1.ZodNumber; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; +}, z$1.core.$strict>; +type LatestMessageEditResponse = z$1.infer; declare const createQueuedMessageRequestSchema: z$1.ZodObject<{ input: z$1.ZodArray; defaultExecutionOptions(args: ThreadStatusArgs): Promise; delete(args: ThreadDeleteArgs): Promise; + editMessage(args: ThreadEditMessageArgs): Promise; events: ThreadEventsArea; fork(args: ThreadForkArgs): Promise; get(args: ThreadGetArgs): Promise; + getLatestMessageEdit(args: ThreadStatusArgs): Promise; interactions: ThreadInteractionsArea; list(args?: ThreadListArgs): Promise; markRead(args: ThreadActionArgs): Promise; diff --git a/packages/sdk/src/areas/threads.ts b/packages/sdk/src/areas/threads.ts index 11ca3e9523..89ece1550e 100644 --- a/packages/sdk/src/areas/threads.ts +++ b/packages/sdk/src/areas/threads.ts @@ -14,6 +14,9 @@ import type { CreateQueuedMessageRequest, ContinueAfterProviderRateLimitResponse, CreateThreadRequest, + EditMessageRequest, + EditMessageResponse, + LatestMessageEditResponse, ForkThreadRequest, DeleteThreadRequest, PromptHistoryResponse, @@ -113,6 +116,8 @@ export type ThreadSendResult = { ok: true }; export type ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus; export type ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse; +export type ThreadEditMessageResult = EditMessageResponse; +export type ThreadLatestMessageEditResult = LatestMessageEditResponse; export type ThreadStopResult = { ok: true }; export type ThreadCompactResult = { ok: true }; export type ThreadBannerActionResult = { ok: true }; @@ -183,6 +188,10 @@ export interface ThreadSendArgs extends SendMessageRequest { threadId: string; } +export interface ThreadEditMessageArgs extends EditMessageRequest { + threadId: string; +} + export interface ThreadActionArgs { threadId: string; } @@ -431,9 +440,13 @@ export interface ThreadsArea { args: ThreadStatusArgs, ): Promise; delete(args: ThreadDeleteArgs): Promise; + editMessage(args: ThreadEditMessageArgs): Promise; events: ThreadEventsArea; fork(args: ThreadForkArgs): Promise; get(args: ThreadGetArgs): Promise; + getLatestMessageEdit( + args: ThreadStatusArgs, + ): Promise; interactions: ThreadInteractionsArea; list(args?: ThreadListArgs): Promise; markRead(args: ThreadActionArgs): Promise; @@ -922,6 +935,15 @@ export function createThreadsArea(args: CreateSdkAreaArgs): ThreadsArea { ); return { ok: true }; }, + async editMessage(input) { + const { threadId, ...json } = input; + return transport.readJson( + transport.api.v1.threads[":id"]["edit-message"].$post({ + param: { id: threadId }, + json, + }), + ); + }, events, async fork(input) { return transport.readJson( @@ -931,6 +953,14 @@ export function createThreadsArea(args: CreateSdkAreaArgs): ThreadsArea { ); }, get: getThread, + async getLatestMessageEdit(input) { + return transport.readJson( + transport.api.v1.threads[":id"]["latest-message-edit"].$get( + { param: { id: input.threadId } }, + ...signalRequestArgs(input.signal), + ), + ); + }, interactions, async list(input) { return transport.readJson( diff --git a/packages/sdk/test/public-types.test.ts b/packages/sdk/test/public-types.test.ts index 4a43130e75..ff961e8a7b 100644 --- a/packages/sdk/test/public-types.test.ts +++ b/packages/sdk/test/public-types.test.ts @@ -356,9 +356,11 @@ type ExpectedThreadsKey = | "conversationOutline" | "defaultExecutionOptions" | "delete" + | "editMessage" | "events" | "fork" | "get" + | "getLatestMessageEdit" | "interactions" | "list" | "markRead" diff --git a/packages/sdk/test/sdk.test.ts b/packages/sdk/test/sdk.test.ts index 6b14ab53eb..0291ca1aab 100644 --- a/packages/sdk/test/sdk.test.ts +++ b/packages/sdk/test/sdk.test.ts @@ -1054,6 +1054,60 @@ describe("@bb/sdk", () => { ]); }); + it("reads and submits an atomic message edit", async () => { + const queue = createFetchQueue([ + { + body: { + expectedRequestSequence: 41, + input: [{ type: "text", text: "Original", mentions: [] }], + }, + }, + { + body: { + ok: true, + operationId: "edit-op-1", + requestSequence: 43, + }, + }, + ]); + const sdk = createBbSdk({ + transport: createHttpTransport({ + baseUrl: "http://bb.test", + fetch: queue.fetch, + runtime: "node", + }), + }); + + await expect( + sdk.threads.getLatestMessageEdit({ threadId: "thr_edit" }), + ).resolves.toMatchObject({ expectedRequestSequence: 41 }); + await expect( + sdk.threads.editMessage({ + threadId: "thr_edit", + operationId: "edit-op-1", + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }), + ).resolves.toMatchObject({ requestSequence: 43 }); + + expect(queue.requests).toEqual([ + { + bodyText: undefined, + method: "GET", + url: "http://bb.test/api/v1/threads/thr_edit/latest-message-edit", + }, + { + bodyText: JSON.stringify({ + operationId: "edit-op-1", + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }), + method: "POST", + url: "http://bb.test/api/v1/threads/thr_edit/edit-message", + }, + ]); + }); + it("preserves explicit thread spawn origin for CLI callers", async () => { const queue = createFetchQueue([{ body: { id: "thr_1" }, status: 201 }]); const sdk = createBbSdk({ diff --git a/packages/server-contract/src/api/threads.ts b/packages/server-contract/src/api/threads.ts index 5749df5378..69827eaef1 100644 --- a/packages/server-contract/src/api/threads.ts +++ b/packages/server-contract/src/api/threads.ts @@ -272,6 +272,34 @@ export type ContinueAfterProviderRateLimitResponse = z.infer< typeof continueAfterProviderRateLimitResponseSchema >; +export const editMessageRequestSchema = sendMessageRequestSchema + .omit({ mode: true, senderThreadId: true }) + .extend({ + operationId: z.string().min(1), + expectedRequestSequence: z.number().int().nonnegative(), + }) + .strict(); +export type EditMessageRequest = z.infer; + +export const editMessageResponseSchema = z + .object({ + ok: z.literal(true), + operationId: z.string().min(1), + requestSequence: z.number().int().nonnegative(), + }) + .strict(); +export type EditMessageResponse = z.infer; + +export const latestMessageEditResponseSchema = z + .object({ + expectedRequestSequence: z.number().int().nonnegative(), + input: z.array(promptInputSchema).min(1), + }) + .strict(); +export type LatestMessageEditResponse = z.infer< + typeof latestMessageEditResponseSchema +>; + export const sendQueuedMessageModeSchema = z.enum(["auto", "steer"]); export type SendQueuedMessageMode = z.infer; diff --git a/packages/server-contract/src/public-api.ts b/packages/server-contract/src/public-api.ts index e37d8b259c..d1d2001f31 100644 --- a/packages/server-contract/src/public-api.ts +++ b/packages/server-contract/src/public-api.ts @@ -60,6 +60,9 @@ import type { CreateQueuedMessageRequest, CreateThreadSectionRequest, CreateThreadRequest, + EditMessageRequest, + EditMessageResponse, + LatestMessageEditResponse, ForkThreadRequest, RestartTerminalRequest, DeleteThreadSectionRequest, @@ -275,6 +278,7 @@ import { resolvePendingInteractionRequestSchema, respondPluginInteractionRequestSchema, sendMessageRequestSchema, + editMessageRequestSchema, setQueuedMessageGroupBoundaryRequestSchema, sendQueuedMessageRequestSchema, systemExecutionOptionsQuerySchema, @@ -992,6 +996,20 @@ export const publicApiRoutes = { ), response: jsonResponse(), }), + editMessage: defineRoute({ + path: "/threads/:id/edit-message", + method: "post", + request: jsonRequest( + editMessageRequestSchema, + ), + response: jsonResponse(), + }), + latestMessageEdit: defineRoute({ + path: "/threads/:id/latest-message-edit", + method: "get", + request: noRequest(), + response: jsonResponse(), + }), /** @deprecated App code uses dedicated composer queries. */ composerBootstrap: defineRoute({ path: "/threads/:id/composer-bootstrap", diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index 789c365df4..6c8e1df0ac 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray;\n shortcut: z$1.ZodNullable>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional;\n metadata: z$1.ZodOptional;\n eventTypes: z$1.ZodOptional>>>>;\n hasPendingInteraction: z$1.ZodOptional;\n projectId: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable;\n baseBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n mergeBaseBranch: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer;\n\ndeclare const experimentsSchema: z$1.ZodRecord, z$1.ZodBoolean>;\ntype Experiments = z$1.infer;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable;\n lastRejectedProtocolVersion: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n actions: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable;\n availableDecisions: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodNullable;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n aggregatedOutput: z$1.ZodOptional;\n exitCode: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray;\n movePath: z$1.ZodOptional;\n diff: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional>;\n statusLabels: z$1.ZodOptional>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional;\n error: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray;\n content: z$1.ZodArray;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n aggregatedOutput: z$1.ZodOptional;\n exitCode: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray;\n movePath: z$1.ZodOptional;\n diff: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional>;\n statusLabels: z$1.ZodOptional>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional;\n error: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray;\n content: z$1.ZodArray;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable;\n modelContextWindow: z$1.ZodNullable;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional;\n willRetry: z$1.ZodOptional;\n errorInfo: z$1.ZodOptional;\n providerCode: z$1.ZodNullable;\n httpStatusCode: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional;\n details: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional>;\n method: z$1.ZodString;\n params: z$1.ZodOptional>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable;\n systemMessageKind: z$1.ZodOptional>;\n systemMessageSubject: z$1.ZodOptional;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional;\n message: z$1.ZodString;\n detail: z$1.ZodOptional;\n reconnectAttempt: z$1.ZodOptional;\n reconnectTotal: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional;\n turnId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional;\n status: z$1.ZodOptional>;\n metadata: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract;\n};\ntype ThreadEventForType = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent = Omit;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent;\n};\ntype ThreadEventRowOfType = ThreadEventRowFromEvent>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n idle: \"idle\";\n starting: \"starting\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable;\n branch: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional>>;\n remoteUrl: z$1.ZodOptional;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable;\n nextProjectId: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional;\n includePersonal: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional>;\n limit: z$1.ZodOptional>;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional>;\n limit: z$1.ZodOptional>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable;\n defaultBranchRelation: z$1.ZodNullable>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional>>;\n isDefault: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable;\n argumentHint: z$1.ZodNullable;\n pluginId: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray;\n provider: z$1.ZodNullable>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable;\n installUrl: z$1.ZodNullable;\n url: z$1.ZodString;\n topic: z$1.ZodNullable;\n summary: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray;\n installUrl: z$1.ZodNullable;\n url: z$1.ZodString;\n topic: z$1.ZodNullable;\n summary: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable;\n files: z$1.ZodNullable>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional>;\n name: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n selectedBranch: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n archivedThreadIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable>;\n mergeable: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n initialPatches: z$1.ZodArray>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer;\ntype EnvironmentStatusResponse = z$1.infer;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional;\n fork: z$1.ZodOptional>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n transcript: z$1.ZodArray;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional;\n status: z$1.ZodOptional>;\n metadata: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable;\n entries: z$1.ZodArray;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe, z$1.ZodTransform>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable;\n rootPath: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n selectedBranch: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable;\n defaultBranchRelation: z$1.ZodNullable>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n ref: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional>;\n mode: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable;\n latestVersion: z$1.ZodNullable;\n minimumSupportedVersion: z$1.ZodNullable;\n npmPackageName: z$1.ZodNullable;\n npmGlobalPackageVersion: z$1.ZodNullable;\n installAction: z$1.ZodNullable;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable;\n signal: z$1.ZodNullable;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray;\n conclusion: z$1.ZodNullable>;\n url: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable>;\n mergeable: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport = Extract;\ntype HostDaemonResultSchemaMapForTransport = {\n [Descriptor in HostDaemonCommandDescriptorForTransport as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe, z$1.ZodTransform>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable;\n latestVersion: z$1.ZodNullable;\n minimumSupportedVersion: z$1.ZodNullable;\n npmPackageName: z$1.ZodNullable;\n npmGlobalPackageVersion: z$1.ZodNullable;\n installAction: z$1.ZodNullable;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable;\n signal: z$1.ZodNullable;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable;\n entries: z$1.ZodArray;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional>;\n blocked: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional;\n registry: z$1.ZodOptional;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional;\n bbPluginSdk: z$1.ZodOptional;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional;\n history: z$1.ZodArray>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n plugins: z$1.ZodArray;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n schema: z$1.ZodRecord;\n secret: z$1.ZodOptional>;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray;\n planLabel: z$1.ZodNullable;\n accountEmail: z$1.ZodNullable;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray>;\n none: z$1.ZodArray>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray>;\n none: z$1.ZodArray>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray;\n shortcut: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray;\n pluginThemes: z$1.ZodArray;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable;\n primaryHostPlatform: z$1.ZodNullable>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray;\n plugins: z$1.ZodArray;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer;\ntype SystemConfigReloadResponse = z$1.infer;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable;\n environmentId: z$1.ZodNullable;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable;\n closeReason: z$1.ZodNullable>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray;\n environmentId: z$1.ZodNullable;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable;\n closeReason: z$1.ZodNullable>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional>;\n tailBytes: z$1.ZodOptional>;\n limitChunks: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable;\n localImagePaths: z$1.ZodArray;\n localFilePaths: z$1.ZodArray;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable;\n localImagePaths: z$1.ZodArray;\n localFilePaths: z$1.ZodArray;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n status: z$1.ZodNullable>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n status: z$1.ZodNullable>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable;\n previousParentThreadTitle: z$1.ZodNullable;\n nextParentThreadId: z$1.ZodNullable;\n nextParentThreadTitle: z$1.ZodNullable;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n source: z$1.ZodNullable;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n activityIntents: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable>>>;\n statusLabels: z$1.ZodOptional>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n activityIntents: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable;\n movePath: z$1.ZodNullable;\n diff: z$1.ZodNullable;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable;\n stderr: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable>;\n statusReason: z$1.ZodNullable;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional;\n visibility: z$1.ZodOptional>;\n title: z$1.ZodOptional;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable;\n branch: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional;\n sectionId: z$1.ZodOptional>;\n sourceThreadId: z$1.ZodOptional;\n sourceSeqEnd: z$1.ZodOptional;\n startedOnBehalfOf: z$1.ZodDefault;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault>>;\n childOrigin: z$1.ZodDefault>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional;\n input: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault>;\n workspace: z$1.ZodDefault>;\n origin: z$1.ZodDefault>;\n originPluginId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable;\n nextQueuedMessageId: z$1.ZodNullable;\n groupBoundaryQueuedMessageId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer;\ndeclare const threadListResponseSchema: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray>;\n sourceSeq: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray>;\n sourceSeq: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable;\n baseBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n mergeBaseBranch: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable;\n lastRejectedProtocolVersion: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n actions: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable;\n availableDecisions: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodNullable;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional>;\n sectionId: z$1.ZodOptional>;\n parentThreadId: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>>;\n visibility: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable;\n nextThreadId: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n archivedThreadIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional;\n parentThreadId: z$1.ZodOptional;\n sourceThreadId: z$1.ZodOptional;\n archived: z$1.ZodOptional>;\n sectionId: z$1.ZodOptional;\n unsectioned: z$1.ZodOptional>;\n hasParent: z$1.ZodOptional>;\n originKind: z$1.ZodOptional>;\n originPluginId: z$1.ZodOptional;\n childOrigin: z$1.ZodOptional>;\n includeHidden: z$1.ZodOptional>;\n limit: z$1.ZodOptional;\n offset: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional>;\n segmentLimit: z$1.ZodOptional;\n beforeAnchorSeq: z$1.ZodOptional;\n beforeAnchorId: z$1.ZodOptional;\n summaryOnly: z$1.ZodOptional>;\n afterSequence: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray>>;\n activePromptMode: z$1.ZodNullable;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable>;\n activeWorkflows: z$1.ZodArray;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable;\n tokenBudget: z$1.ZodNullable;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional>>;\n rowOrder: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable;\n threadId: z$1.ZodNullable;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable;\n threadId: z$1.ZodNullable;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1 {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result | Promise>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput = NonNullable[\"input\"];\ntype StandardSchemaV1InferOutput = NonNullable[\"output\"];\ninterface PluginRpcMethodContract {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract(contract: Contract): Contract;\ntype PluginRpcHandlers = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput) => StandardSchemaV1InferInput | Promise>;\n};\ntype PluginRpcCallInput = StandardSchemaV1InferInput;\ntype PluginRpcCallArgs = null extends PluginRpcCallInput ? [input?: PluginRpcCallInput] : [input: PluginRpcCallInput];\ntype PluginRpcResult = StandardSchemaV1InferOutput;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins///*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise;\n cancel(): Promise;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins//`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise;\n setRead(threadId: string, read: boolean): Promise;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call>(method: Method, ...args: PluginRpcCallArgs): Promise>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc(): PluginRpcClient;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude;\ntype EnvironmentNameUpdateValue = Exclude;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise;\n commit(args: EnvironmentCommitArgs): Promise;\n diff(args: EnvironmentDiffArgs): Promise;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise;\n diffFile(args: EnvironmentDiffFileArgs): Promise;\n diffFiles(args: EnvironmentDiffArgs): Promise;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise;\n get(args: EnvironmentGetArgs): Promise;\n pullRequest(args: EnvironmentGetArgs): Promise;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise;\n markPullRequestReady(args: EnvironmentActionArgs): Promise;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise;\n paths(args: EnvironmentPathsArgs): Promise;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise;\n status(args: EnvironmentStatusArgs): Promise;\n update(args: EnvironmentUpdateArgs): Promise;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise;\n write(args: FileWriteArgs): Promise;\n list(args: FileListArgs): Promise;\n listPaths(args: PathListArgs): Promise;\n mkdir(args: FileMkdirArgs): Promise;\n move(args: FileMoveArgs): Promise;\n remove(args: FileRemoveArgs): Promise;\n createPreview(args: FilePreviewArgs): Promise;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise;\n delete(args: HostDeleteArgs): Promise;\n directory(args: HostDirectoryArgs): Promise;\n get(args: HostGetArgs): Promise;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise;\n installProviderCli(args: HostProviderCliInstallArgs): Promise;\n list(args?: HostListArgs): Promise;\n pathsExist(args: HostPathsExistArgs): Promise;\n pickFolder(args: HostPickFolderArgs): Promise;\n providerCliStatus(args: HostGetArgs): Promise;\n retryUpdate(args: HostRetryUpdateArgs): Promise;\n update(args: HostUpdateArgs): Promise;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise;\n delete(args: ProjectSourceDeleteArgs): Promise;\n update(args: ProjectSourceUpdateArgs): Promise;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise;\n read(args: ProjectAttachmentReadArgs): Promise;\n upload(args: ProjectAttachmentUploadArgs): Promise;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise;\n commands(args: ProjectCommandsArgs): Promise;\n create(args: ProjectCreateArgs): Promise;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise;\n delete(args: ProjectDeleteArgs): Promise;\n fileContent(args: ProjectFileContentArgs): Promise;\n files(args: ProjectFilesArgs): Promise;\n get(args: ProjectGetArgs): Promise;\n list(args?: ProjectListArgs): Promise;\n paths(args: ProjectPathsArgs): Promise;\n promptHistory(args: ProjectPromptHistoryArgs): Promise;\n reorder(args: ProjectReorderArgs): Promise;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise;\n search(args: PluginCatalogSearchArgs): Promise;\n status(args?: PluginCatalogStatusArgs): Promise;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise;\n callRpc(args: PluginRpcArgs): Promise;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise;\n enable(args: PluginIdArgs): Promise;\n getSettings(args: PluginGetSettingsArgs): Promise;\n getSource(args: PluginGetSourceArgs): Promise;\n install(args: PluginInstallArgs): Promise;\n list(args?: PluginListArgs): Promise;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise;\n reload(args?: PluginReloadArgs): Promise;\n remove(args: PluginIdArgs): Promise;\n token(args: PluginTokenArgs): Promise;\n updateSettings(args: PluginSettingsUpdateArgs): Promise;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract;\ntype ProjectRealtimeEvent = Extract;\ntype EnvironmentRealtimeEvent = Extract;\ntype HostRealtimeEvent = Extract;\ntype SystemRealtimeEvent = Extract;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs = Extract;\ninterface BbRealtime {\n subscribe(args: BbRealtimeSubscribeArgs): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise;\n get(args: RegistrySkillIdArgs): Promise;\n install(args: RegistrySkillInstallArgs): Promise;\n repositoryStars(args: RegistryRepositoryArgs): Promise;\n search(args?: RegistrySkillsSearchArgs): Promise;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise;\n list(args: SkillListArgs): Promise;\n listFiles(args: SkillIdentityArgs): Promise;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise;\n config(args?: SystemConfigArgs): Promise;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise;\n reloadConfig(): Promise;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise;\n updateExperiments(args: Experiments): Promise;\n updateGeneralSettings(args: AppSettings): Promise;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise;\n usageLimits(args?: SystemUsageLimitsArgs): Promise;\n version(args?: SystemVersionArgs): Promise;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise;\n create(args: TerminalCreateArgs): Promise;\n get(args: TerminalGetArgs): Promise;\n input(args: TerminalInputArgs): Promise;\n list(args: TerminalListArgs): Promise;\n output(args: TerminalOutputArgs): Promise;\n rename(args: TerminalRenameArgs): Promise;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise;\n resize(args: TerminalResizeArgs): Promise;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable;\n matched: true;\n target: Extract;\n threadId: string;\n} | {\n matched: true;\n target: Extract;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise;\n get(args: ThreadInteractionGetArgs): Promise;\n list(args: ThreadInteractionListArgs): Promise;\n resolve(args: ThreadInteractionResolveArgs): Promise;\n respond(args: ThreadInteractionRespondArgs): Promise;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise;\n wait(args: ThreadEventWaitArgs): Promise;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise;\n delete(args: ThreadQueuedMessageTargetArgs): Promise;\n list(args: ThreadQueuedMessageArgs): Promise;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise;\n send(args: ThreadQueuedMessageSendArgs): Promise;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise;\n update(args: ThreadQueuedMessageUpdateArgs): Promise;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise;\n update(args: ThreadTabsUpdateArgs): Promise;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise;\n archiveAll(args: ThreadActionArgs): Promise;\n childSummary(args: ThreadStatusArgs): Promise;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise;\n compact(args: ThreadActionArgs): Promise;\n cancelPlan(args: ThreadActionArgs): Promise;\n clearGoal(args: ThreadActionArgs): Promise;\n conversationOutline(args: ThreadStatusArgs): Promise;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise;\n delete(args: ThreadDeleteArgs): Promise;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise;\n get(args: ThreadGetArgs): Promise;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise;\n markRead(args: ThreadActionArgs): Promise;\n markUnread(args: ThreadActionArgs): Promise;\n open(args: ThreadOpenArgs): Promise;\n paneAction(args: ThreadPaneActionArgs): Promise;\n output(args: ThreadOutputArgs): Promise;\n pin(args: ThreadActionArgs): Promise;\n promptHistory(args: ThreadPromptHistoryArgs): Promise;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise;\n reorderPinned(args: ThreadPinOrderArgs): Promise;\n search(args: ThreadSearchArgs): Promise;\n send(args: ThreadSendArgs): Promise;\n spawn(args: ThreadSpawnArgs): Promise;\n stop(args: ThreadActionArgs): Promise;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise;\n storageFiles(args: ThreadStorageFilesArgs): Promise;\n storagePaths(args: ThreadStoragePathsArgs): Promise;\n unarchive(args: ThreadActionArgs): Promise;\n unpin(args: ThreadActionArgs): Promise;\n update(args: ThreadUpdateArgs): Promise;\n wait(args: ThreadWaitArgs): Promise;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise;\n delete(args: DeleteThreadSectionRequest): Promise;\n list(args?: ThreadSectionListArgs): Promise;\n update(args: UpdateThreadSectionRequest): Promise;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under /plugins//secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf : PluginSettingValueOf | undefined;\n};\ntype PluginSettingValueOf = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle> {\n /** Load-safe: callable inside the factory. */\n get(): Promise>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues, prev: PluginSettingsValues) => void): void;\n}\ninterface PluginSettings {\n define>(descriptors: Ds): PluginSettingsHandle;\n}\ninterface PluginKvStorage {\n get(key: string): Promise;\n set(key: string, value: unknown): Promise;\n delete(key: string): Promise;\n list(prefix?: string): Promise;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * /plugins//data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler = (payload: PluginThreadEventPayloads[E]) => void | Promise;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins//http/`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token `) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins//rpc/` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register(contract: Contract, handlers: PluginRpcHandlers): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \":\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on(event: E, handler: PluginThreadEventHandler): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload ` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins//http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins//rpc/ (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray;\n shortcut: z$1.ZodNullable>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional;\n metadata: z$1.ZodOptional;\n eventTypes: z$1.ZodOptional>>>>;\n hasPendingInteraction: z$1.ZodOptional;\n projectId: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable;\n baseBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n mergeBaseBranch: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer;\n\ndeclare const experimentsSchema: z$1.ZodRecord, z$1.ZodBoolean>;\ntype Experiments = z$1.infer;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable;\n lastRejectedProtocolVersion: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n actions: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable;\n availableDecisions: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodNullable;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional>;\n providerCheckpointId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n aggregatedOutput: z$1.ZodOptional;\n exitCode: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray;\n movePath: z$1.ZodOptional;\n diff: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional>;\n statusLabels: z$1.ZodOptional>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional;\n error: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray;\n content: z$1.ZodArray;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n aggregatedOutput: z$1.ZodOptional;\n exitCode: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray;\n movePath: z$1.ZodOptional;\n diff: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n resultText: z$1.ZodNullable;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional>;\n statusLabels: z$1.ZodOptional>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional;\n error: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n truncation: z$1.ZodOptional>;\n result: z$1.ZodOptional>;\n resultText: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray;\n content: z$1.ZodArray;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional;\n workflow: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional>;\n summary: z$1.ZodOptional;\n error: z$1.ZodOptional;\n outputFile: z$1.ZodOptional;\n parentToolCallId: z$1.ZodOptional;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable;\n modelContextWindow: z$1.ZodNullable;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional;\n willRetry: z$1.ZodOptional;\n errorInfo: z$1.ZodOptional;\n providerCode: z$1.ZodNullable;\n httpStatusCode: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional;\n details: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional>;\n method: z$1.ZodString;\n params: z$1.ZodOptional>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable;\n systemMessageKind: z$1.ZodOptional>;\n systemMessageSubject: z$1.ZodOptional;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional;\n message: z$1.ZodString;\n detail: z$1.ZodOptional;\n reconnectAttempt: z$1.ZodOptional;\n reconnectTotal: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional;\n turnId: z$1.ZodOptional;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional;\n status: z$1.ZodOptional>;\n metadata: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract;\n};\ntype ThreadEventForType = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent = Omit;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent;\n};\ntype ThreadEventRowOfType = ThreadEventRowFromEvent>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable;\n branch: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional>>;\n remoteUrl: z$1.ZodOptional;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable;\n nextProjectId: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional;\n includePersonal: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional>;\n limit: z$1.ZodOptional>;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional>;\n limit: z$1.ZodOptional>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable;\n defaultBranchRelation: z$1.ZodNullable>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional>>;\n isDefault: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable;\n argumentHint: z$1.ZodNullable;\n pluginId: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional, z$1.ZodOptional>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray;\n provider: z$1.ZodNullable>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable;\n installUrl: z$1.ZodNullable;\n url: z$1.ZodString;\n topic: z$1.ZodNullable;\n summary: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray;\n installUrl: z$1.ZodNullable;\n url: z$1.ZodString;\n topic: z$1.ZodNullable;\n summary: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable;\n files: z$1.ZodNullable>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional>;\n name: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n selectedBranch: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n utf8: \"utf8\";\n base64: \"base64\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n archivedThreadIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable>;\n mergeable: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n initialPatches: z$1.ZodArray>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer;\ntype EnvironmentStatusResponse = z$1.infer;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional;\n fork: z$1.ZodOptional>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional>;\n claudeCodeMockCliTraffic: z$1.ZodOptional>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional;\n providerSubagentsEnabled: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray>;\n injectedSkillSources: z$1.ZodArray;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n transcript: z$1.ZodArray;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional;\n status: z$1.ZodOptional>;\n metadata: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable;\n entries: z$1.ZodArray;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe, z$1.ZodTransform>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable;\n rootPath: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional;\n selectedBranch: z$1.ZodOptional;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable;\n defaultBranchRelation: z$1.ZodNullable>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable;\n remoteBranches: z$1.ZodArray;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n ref: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional>;\n mode: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional;\n env: z$1.ZodRecord;\n cwd: z$1.ZodOptional;\n modelCli: z$1.ZodOptional;\n selectFlag: z$1.ZodOptional;\n primaryModels: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional>;\n levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional>;\n project: z$1.ZodDefault>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional>;\n workspaceWrite: z$1.ZodOptional>;\n readonly: z$1.ZodOptional>;\n insertAfterArgs: z$1.ZodOptional;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable;\n planLabel: z$1.ZodNullable;\n windows: z$1.ZodArray;\n cost: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault>;\n accountEmail: z$1.ZodDefault>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable;\n latestVersion: z$1.ZodNullable;\n minimumSupportedVersion: z$1.ZodNullable;\n npmPackageName: z$1.ZodNullable;\n npmGlobalPackageVersion: z$1.ZodNullable;\n installAction: z$1.ZodNullable;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable;\n signal: z$1.ZodNullable;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable;\n insertions: z$1.ZodNullable;\n deletions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray;\n conclusion: z$1.ZodNullable>;\n url: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable>;\n mergeable: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport = Extract;\ntype HostDaemonResultSchemaMapForTransport = {\n [Descriptor in HostDaemonCommandDescriptorForTransport as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe, z$1.ZodTransform>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable;\n latestVersion: z$1.ZodNullable;\n minimumSupportedVersion: z$1.ZodNullable;\n npmPackageName: z$1.ZodNullable;\n npmGlobalPackageVersion: z$1.ZodNullable;\n installAction: z$1.ZodNullable;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable;\n signal: z$1.ZodNullable;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable;\n entries: z$1.ZodArray;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional>;\n blocked: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional;\n registry: z$1.ZodOptional;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional;\n bbPluginSdk: z$1.ZodOptional;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional;\n history: z$1.ZodArray>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n plugins: z$1.ZodArray;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional>;\n availableVersion: z$1.ZodOptional;\n blockedVersion: z$1.ZodOptional;\n blockedReasons: z$1.ZodOptional>;\n lastCheckAt: z$1.ZodOptional;\n lastFailure: z$1.ZodOptional>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable;\n name: z$1.ZodNullable;\n icon: z$1.ZodNullable;\n iconUrl: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray;\n lastStatus: z$1.ZodNullable>;\n lastError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable>;\n capabilities: z$1.ZodDefault;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable;\n logoDarkUrl: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n schema: z$1.ZodRecord;\n secret: z$1.ZodOptional>;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional;\n label: z$1.ZodString;\n description: z$1.ZodOptional;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional;\n hostId: z$1.ZodOptional;\n environmentId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray;\n planLabel: z$1.ZodNullable;\n accountEmail: z$1.ZodNullable;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray>;\n none: z$1.ZodArray>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray>;\n none: z$1.ZodArray>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray;\n shortcut: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray;\n pluginThemes: z$1.ZodArray;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable;\n primaryHostPlatform: z$1.ZodNullable>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray;\n plugins: z$1.ZodArray;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer;\ntype SystemConfigReloadResponse = z$1.infer;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable;\n environmentId: z$1.ZodNullable;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable;\n closeReason: z$1.ZodNullable>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray;\n environmentId: z$1.ZodNullable;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable;\n closeReason: z$1.ZodNullable>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional>;\n tailBytes: z$1.ZodOptional>;\n limitChunks: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable;\n localImagePaths: z$1.ZodArray;\n localFilePaths: z$1.ZodArray;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable;\n localImagePaths: z$1.ZodArray;\n localFilePaths: z$1.ZodArray;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n status: z$1.ZodNullable>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n status: z$1.ZodNullable>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable;\n previousParentThreadTitle: z$1.ZodNullable;\n nextParentThreadId: z$1.ZodNullable;\n nextParentThreadTitle: z$1.ZodNullable;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n source: z$1.ZodNullable;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n activityIntents: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable>>>;\n statusLabels: z$1.ZodOptional>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n activityIntents: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable;\n movePath: z$1.ZodNullable;\n diff: z$1.ZodNullable;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable;\n stderr: z$1.ZodNullable;\n approvalStatus: z$1.ZodNullable>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable;\n pattern: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable>;\n statusReason: z$1.ZodNullable;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional;\n visibility: z$1.ZodOptional>;\n title: z$1.ZodOptional;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable;\n branch: z$1.ZodOptional;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional;\n sectionId: z$1.ZodOptional>;\n sourceThreadId: z$1.ZodOptional;\n sourceSeqEnd: z$1.ZodOptional;\n startedOnBehalfOf: z$1.ZodDefault;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault>>;\n childOrigin: z$1.ZodDefault>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional;\n input: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault>;\n workspace: z$1.ZodDefault>;\n origin: z$1.ZodDefault>;\n originPluginId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray;\n label: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable;\n overageStatus: z$1.ZodNullable>;\n overageReason: z$1.ZodNullable;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional>;\n serviceTier: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>;\n permissionMode: z$1.ZodOptional>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable;\n nextQueuedMessageId: z$1.ZodNullable;\n groupBoundaryQueuedMessageId: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer;\ndeclare const threadListResponseSchema: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray>;\n sourceSeq: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable;\n environmentName: z$1.ZodNullable;\n environmentBranchName: z$1.ZodNullable;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray>;\n sourceSeq: z$1.ZodNullable;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable;\n titleFallback: z$1.ZodNullable;\n sectionId: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable;\n sourceThreadId: z$1.ZodNullable;\n originKind: z$1.ZodNullable>;\n childOrigin: z$1.ZodNullable>;\n originPluginId: z$1.ZodNullable;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable;\n pinnedAt: z$1.ZodNullable;\n deletedAt: z$1.ZodNullable;\n lastReadAt: z$1.ZodNullable;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable;\n baseBranch: z$1.ZodNullable;\n defaultBranch: z$1.ZodNullable;\n mergeBaseBranch: z$1.ZodNullable;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable;\n lastRejectedProtocolVersion: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable;\n actions: z$1.ZodArray;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable;\n path: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable;\n sessionGrant: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable;\n availableDecisions: z$1.ZodArray>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable;\n write: z$1.ZodArray;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord;\n freeText: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional>;\n resolvedAt: z$1.ZodNullable;\n turnId: z$1.ZodNullable;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional;\n sizeBytes: z$1.ZodOptional;\n mimeType: z$1.ZodOptional;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional>;\n sectionId: z$1.ZodOptional>;\n parentThreadId: z$1.ZodOptional>;\n model: z$1.ZodOptional>;\n reasoningLevel: z$1.ZodOptional>>;\n visibility: z$1.ZodOptional>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable;\n nextThreadId: z$1.ZodNullable;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral;\n archivedThreadIds: z$1.ZodArray;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional;\n parentThreadId: z$1.ZodOptional;\n sourceThreadId: z$1.ZodOptional;\n archived: z$1.ZodOptional>;\n sectionId: z$1.ZodOptional;\n unsectioned: z$1.ZodOptional>;\n hasParent: z$1.ZodOptional>;\n originKind: z$1.ZodOptional>;\n originPluginId: z$1.ZodOptional;\n childOrigin: z$1.ZodOptional>;\n includeHidden: z$1.ZodOptional>;\n limit: z$1.ZodOptional;\n offset: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional>;\n segmentLimit: z$1.ZodOptional;\n beforeAnchorSeq: z$1.ZodOptional;\n beforeAnchorId: z$1.ZodOptional;\n summaryOnly: z$1.ZodOptional>;\n afterSequence: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional;\n limit: z$1.ZodOptional;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray>>;\n activePromptMode: z$1.ZodNullable;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable>;\n activeWorkflows: z$1.ZodArray;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional;\n phaseTitle: z$1.ZodOptional;\n agentType: z$1.ZodOptional;\n isolation: z$1.ZodOptional;\n queuedAt: z$1.ZodOptional;\n startedAt: z$1.ZodOptional;\n lastToolName: z$1.ZodOptional;\n lastToolSummary: z$1.ZodOptional;\n promptPreview: z$1.ZodOptional;\n resultPreview: z$1.ZodOptional;\n error: z$1.ZodOptional;\n tokens: z$1.ZodOptional;\n toolCalls: z$1.ZodOptional;\n durationMs: z$1.ZodOptional;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable>;\n summary: z$1.ZodNullable;\n error: z$1.ZodNullable;\n completedAt: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable;\n tokenBudget: z$1.ZodNullable;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional>>;\n rowOrder: z$1.ZodOptional>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable;\n threadId: z$1.ZodNullable;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable;\n threadId: z$1.ZodNullable;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1 {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result | Promise>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput = NonNullable[\"input\"];\ntype StandardSchemaV1InferOutput = NonNullable[\"output\"];\ninterface PluginRpcMethodContract {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract(contract: Contract): Contract;\ntype PluginRpcHandlers = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput) => StandardSchemaV1InferInput | Promise>;\n};\ntype PluginRpcCallInput = StandardSchemaV1InferInput;\ntype PluginRpcCallArgs = null extends PluginRpcCallInput ? [input?: PluginRpcCallInput] : [input: PluginRpcCallInput];\ntype PluginRpcResult = StandardSchemaV1InferOutput;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins///*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise;\n cancel(): Promise;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins//`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise;\n setRead(threadId: string, read: boolean): Promise;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call>(method: Method, ...args: PluginRpcCallArgs): Promise>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc(): PluginRpcClient;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude;\ntype EnvironmentNameUpdateValue = Exclude;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise;\n commit(args: EnvironmentCommitArgs): Promise;\n diff(args: EnvironmentDiffArgs): Promise;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise;\n diffFile(args: EnvironmentDiffFileArgs): Promise;\n diffFiles(args: EnvironmentDiffArgs): Promise;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise;\n get(args: EnvironmentGetArgs): Promise;\n pullRequest(args: EnvironmentGetArgs): Promise;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise;\n markPullRequestReady(args: EnvironmentActionArgs): Promise;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise;\n paths(args: EnvironmentPathsArgs): Promise;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise;\n status(args: EnvironmentStatusArgs): Promise;\n update(args: EnvironmentUpdateArgs): Promise;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise;\n write(args: FileWriteArgs): Promise;\n list(args: FileListArgs): Promise;\n listPaths(args: PathListArgs): Promise;\n mkdir(args: FileMkdirArgs): Promise;\n move(args: FileMoveArgs): Promise;\n remove(args: FileRemoveArgs): Promise;\n createPreview(args: FilePreviewArgs): Promise;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise;\n delete(args: HostDeleteArgs): Promise;\n directory(args: HostDirectoryArgs): Promise;\n get(args: HostGetArgs): Promise;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise;\n installProviderCli(args: HostProviderCliInstallArgs): Promise;\n list(args?: HostListArgs): Promise;\n pathsExist(args: HostPathsExistArgs): Promise;\n pickFolder(args: HostPickFolderArgs): Promise;\n providerCliStatus(args: HostGetArgs): Promise;\n retryUpdate(args: HostRetryUpdateArgs): Promise;\n update(args: HostUpdateArgs): Promise;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise;\n delete(args: ProjectSourceDeleteArgs): Promise;\n update(args: ProjectSourceUpdateArgs): Promise;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise;\n read(args: ProjectAttachmentReadArgs): Promise;\n upload(args: ProjectAttachmentUploadArgs): Promise;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise;\n commands(args: ProjectCommandsArgs): Promise;\n create(args: ProjectCreateArgs): Promise;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise;\n delete(args: ProjectDeleteArgs): Promise;\n fileContent(args: ProjectFileContentArgs): Promise;\n files(args: ProjectFilesArgs): Promise;\n get(args: ProjectGetArgs): Promise;\n list(args?: ProjectListArgs): Promise;\n paths(args: ProjectPathsArgs): Promise;\n promptHistory(args: ProjectPromptHistoryArgs): Promise;\n reorder(args: ProjectReorderArgs): Promise;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise;\n search(args: PluginCatalogSearchArgs): Promise;\n status(args?: PluginCatalogStatusArgs): Promise;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise;\n callRpc(args: PluginRpcArgs): Promise;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise;\n enable(args: PluginIdArgs): Promise;\n getSettings(args: PluginGetSettingsArgs): Promise;\n getSource(args: PluginGetSourceArgs): Promise;\n install(args: PluginInstallArgs): Promise;\n list(args?: PluginListArgs): Promise;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise;\n reload(args?: PluginReloadArgs): Promise;\n remove(args: PluginIdArgs): Promise;\n token(args: PluginTokenArgs): Promise;\n updateSettings(args: PluginSettingsUpdateArgs): Promise;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract;\ntype ProjectRealtimeEvent = Extract;\ntype EnvironmentRealtimeEvent = Extract;\ntype HostRealtimeEvent = Extract;\ntype SystemRealtimeEvent = Extract;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs = Extract;\ninterface BbRealtime {\n subscribe(args: BbRealtimeSubscribeArgs): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise;\n get(args: RegistrySkillIdArgs): Promise;\n install(args: RegistrySkillInstallArgs): Promise;\n repositoryStars(args: RegistryRepositoryArgs): Promise;\n search(args?: RegistrySkillsSearchArgs): Promise;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise;\n list(args: SkillListArgs): Promise;\n listFiles(args: SkillIdentityArgs): Promise;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise;\n config(args?: SystemConfigArgs): Promise;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise;\n reloadConfig(): Promise;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise;\n updateExperiments(args: Experiments): Promise;\n updateGeneralSettings(args: AppSettings): Promise;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise;\n usageLimits(args?: SystemUsageLimitsArgs): Promise;\n version(args?: SystemVersionArgs): Promise;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise;\n create(args: TerminalCreateArgs): Promise;\n get(args: TerminalGetArgs): Promise;\n input(args: TerminalInputArgs): Promise;\n list(args: TerminalListArgs): Promise;\n output(args: TerminalOutputArgs): Promise;\n rename(args: TerminalRenameArgs): Promise;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise;\n resize(args: TerminalResizeArgs): Promise;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable;\n matched: true;\n target: Extract;\n threadId: string;\n} | {\n matched: true;\n target: Extract;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise;\n get(args: ThreadInteractionGetArgs): Promise;\n list(args: ThreadInteractionListArgs): Promise;\n resolve(args: ThreadInteractionResolveArgs): Promise;\n respond(args: ThreadInteractionRespondArgs): Promise;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise;\n wait(args: ThreadEventWaitArgs): Promise;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise;\n delete(args: ThreadQueuedMessageTargetArgs): Promise;\n list(args: ThreadQueuedMessageArgs): Promise;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise;\n send(args: ThreadQueuedMessageSendArgs): Promise;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise;\n update(args: ThreadQueuedMessageUpdateArgs): Promise;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise;\n update(args: ThreadTabsUpdateArgs): Promise;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise;\n archiveAll(args: ThreadActionArgs): Promise;\n childSummary(args: ThreadStatusArgs): Promise;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise;\n compact(args: ThreadActionArgs): Promise;\n cancelPlan(args: ThreadActionArgs): Promise;\n clearGoal(args: ThreadActionArgs): Promise;\n conversationOutline(args: ThreadStatusArgs): Promise;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise;\n delete(args: ThreadDeleteArgs): Promise;\n editMessage(args: ThreadEditMessageArgs): Promise;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise;\n get(args: ThreadGetArgs): Promise;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise;\n markRead(args: ThreadActionArgs): Promise;\n markUnread(args: ThreadActionArgs): Promise;\n open(args: ThreadOpenArgs): Promise;\n paneAction(args: ThreadPaneActionArgs): Promise;\n output(args: ThreadOutputArgs): Promise;\n pin(args: ThreadActionArgs): Promise;\n promptHistory(args: ThreadPromptHistoryArgs): Promise;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise;\n reorderPinned(args: ThreadPinOrderArgs): Promise;\n search(args: ThreadSearchArgs): Promise;\n send(args: ThreadSendArgs): Promise;\n spawn(args: ThreadSpawnArgs): Promise;\n stop(args: ThreadActionArgs): Promise;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise;\n storageFiles(args: ThreadStorageFilesArgs): Promise;\n storagePaths(args: ThreadStoragePathsArgs): Promise;\n unarchive(args: ThreadActionArgs): Promise;\n unpin(args: ThreadActionArgs): Promise;\n update(args: ThreadUpdateArgs): Promise;\n wait(args: ThreadWaitArgs): Promise;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise;\n delete(args: DeleteThreadSectionRequest): Promise;\n list(args?: ThreadSectionListArgs): Promise;\n update(args: UpdateThreadSectionRequest): Promise;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under /plugins//secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf : PluginSettingValueOf | undefined;\n};\ntype PluginSettingValueOf = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle> {\n /** Load-safe: callable inside the factory. */\n get(): Promise>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues, prev: PluginSettingsValues) => void): void;\n}\ninterface PluginSettings {\n define>(descriptors: Ds): PluginSettingsHandle;\n}\ninterface PluginKvStorage {\n get(key: string): Promise;\n set(key: string, value: unknown): Promise;\n delete(key: string): Promise;\n list(prefix?: string): Promise;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * /plugins//data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler = (payload: PluginThreadEventPayloads[E]) => void | Promise;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins//http/`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token `) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins//rpc/` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register(contract: Contract, handlers: PluginRpcHandlers): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \":\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on(event: E, handler: PluginThreadEventHandler): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload ` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins//http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins//rpc/ (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1 {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result | Promise>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput = NonNullable[\"input\"];\ntype StandardSchemaV1InferOutput = NonNullable[\"output\"];\ninterface PluginRpcMethodContract {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly>;\ntype PluginRpcHandlers = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput) => StandardSchemaV1InferInput | Promise>;\n};\ntype PluginRpcCallInput = StandardSchemaV1InferInput;\ntype PluginRpcCallArgs = null extends PluginRpcCallInput ? [input?: PluginRpcCallInput] : [input: PluginRpcCallInput];\ntype PluginRpcResult = StandardSchemaV1InferOutput;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional;\n sizeBytes: z.ZodOptional;\n mimeType: z.ZodOptional;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable;\n branch: z.ZodOptional;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional>;\n model: z.ZodOptional>;\n serviceTier: z.ZodOptional>;\n reasoningLevel: z.ZodOptional>;\n permissionMode: z.ZodOptional>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins///*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise;\n cancel(): Promise;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins//`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise;\n setRead(threadId: string, read: boolean): Promise;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call>(method: Method, ...args: PluginRpcCallArgs): Promise>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc(): PluginRpcClient;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType;\ndeclare const Markdown: react.ComponentType;\ndeclare const experimental_NewThreadComposer: react.ComponentType;\ndeclare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/packages/templates/src/generated/templates.generated.ts b/packages/templates/src/generated/templates.generated.ts index 1757707016..4eed9302d8 100644 --- a/packages/templates/src/generated/templates.generated.ts +++ b/packages/templates/src/generated/templates.generated.ts @@ -127,7 +127,7 @@ export const templateDefinitions = [ }, { "id": "bbGuideThreads", - "body": "Thread commands\n\nEvery command supports --json for machine-readable output.\n\nSpawning:\n\n bb thread spawn --project --prompt \"...\" [options]\n\n --prompt Initial prompt (required)\n --title Thread title\n --project <id> Project (required)\n --parent-thread <id> Parent thread\n --parent-self Parent to the current thread (BB_THREAD_ID)\n --provider <id> Provider override\n --model <model> Model override\n --reasoning-level <level> Reasoning level: low, medium, high, xhigh, max (provider-dependent)\n --environment <id-or-path> Attach to an existing environment (ID or workspace path)\n --new-environment <kind> Create a new environment (worktree)\n --base-branch <branch> Base branch for a new managed worktree\n --machine <id-or-name> Run on a machine (--host is an alias)\n --service-tier <tier> Service tier: fast, default\n --permission-mode <mode> Permission mode: accept-edits, auto, or full\n --section <id> Create the thread in a section\n --visibility <visibility> visible or hidden; a child inherits its parent by default\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n --origin-kind <kind> Create a fork thread\n --source-thread <id> Source thread for a fork\n --source-seq-end <seq> Last included source event sequence\n\n Execution defaults resolve from explicit flags, live parent execution, and\n remembered project defaults. With no remembered model, bb uses the explicitly\n requested provider or Codex and resolves its provider-reported default model\n on the target machine. The product reasoning and permission defaults are\n medium and auto.\n accept-edits uses workspace sandboxing with user-reviewed escalation. auto uses\n the same workspace sandbox with provider-native automatic review. full is the\n explicit sandbox and approval bypass. Plan mode is separate from permissions.\n Subagents inherit the parent's permission mode by default; pass --permission-mode full only when the user or task needs unsandboxed execution.\n Parenting is opt-in. Inside a thread, pass --parent-self to parent the new thread to the current thread.\n Hidden threads are for plugin/background workers. They remain addressable by\n ID while staying out of sidebar organization and unread/pending favicon\n attention. Thread lists exclude them unless\n --include-hidden is passed; direct-ID operations remain available.\n A new child thread inherits the visibility of its parent, so the subagents of\n a hidden thread stay hidden too. Pass --visibility to override the inherited\n value. A hidden child still reports its turns and blockers to its parent\n thread; only source-derived forks stay silent.\n A machine selector accepts an exact ID or an unambiguous name. It works with\n an unmanaged --environment path, --new-environment worktree, or the personal\n workspace. It cannot be combined with an existing environment ID because that\n environment already selects its machine. Without the flag, local/primary\n machine resolution is unchanged.\n\nForking:\n\n bb thread fork <source-thread-id> [options]\n\n --prompt <prompt> Optional first prompt; omit for an idle fork\n --source-seq-end <seq> Fork at this source event sequence (tip by default)\n --workspace <mode> isolated (default) or reuse\n --title <title> Thread title\n --permission-mode <mode> Inherit source by default; accepts accept-edits, auto, full\n --visibility <visibility> visible (default) or hidden\n --agent-context-seed <text> Persist agent-only context without a first run\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Forks clone the source provider session on the same machine. Isolated forks\n create a fresh managed worktree (or personal workspace for personal threads);\n reuse attaches the source environment. Omit --prompt to create an idle fork.\n\nListing:\n\n bb thread list List threads\n --project <id> Filter by project\n --parent-thread <id> Filter by parent thread\n --archived Show only archived threads\n --section <id> Filter by section\n --unsectioned Show only threads outside sections\n --include-hidden Include hidden threads\n\n bb thread search <query> Search threads and messages\n bb thread history <id> List prompt history\n\nSections:\n\n bb thread section list\n bb thread section create <name>\n bb thread section rename <id> <name>\n bb thread section delete <id> [--yes]\n\nInspecting:\n\n bb thread show [id] Show thread details and pull request status\n --self Target current thread\n --work-status Include git working-tree status\n --git-diff Include git diff\n --diff-target <type> Diff scope: uncommitted, branch_committed, all, commit\n --diff-sha <sha> Commit SHA (for --diff-target commit)\n --diff-merge-base <branch> Override merge-base branch for diff\n --merge-base-branches List available merge-base branches\n\n Shows pull request status for the attached environment branch when available.\n\n bb thread log [id] Show thread event log\n --self Target current thread\n --format <format> Output format: json, minimal, verbose\n --limit <count> Limit entries\n --after-seq <seq> Paginate after sequence number\n\n bb thread output [id] Get the final output of a thread\n --self Target current thread\n\n bb thread wait <id> Wait for a thread status or event (defaults to --status idle)\n --status <status> Wait for this status\n --event <type> Wait for this event type\n --timeout <seconds> Timeout in seconds (default: 1200 / 20 min)\n --poll-interval <ms> Polling interval in milliseconds\n\nOpening threads and files in the app:\n\n bb thread open <path> Open a file in the current BB thread panel\n bb thread open <thread-id> [path] Open a thread, optionally with a panel file\n --line <number> Line number to focus\n --split <placement> right, down, left, top, or replace\n bb thread pane <action> [thread-id] Maximize, restore, or toggle an open thread pane\n\n Inside a BB thread, BB_THREAD_ID selects the current thread automatically and\n the thread ID argument is omitted for file-only opens. Pass an explicit thread\n ID with --split to open another thread. Outside a BB thread, pass the thread ID\n as the first argument. A thread already open in a pane is focused instead of\n duplicated. Edge placement creates panes through the eighth pane; at eight\n panes, it replaces the focused pane.\n Pane actions broadcast to connected BB app windows and affect the matching\n already-open pane without changing its split tree.\n Paths can be thread-relative workspace paths, or absolute paths inside the\n target thread workspace. Absolute paths under BB_THREAD_STORAGE open as\n thread-storage files for the current thread. Use this for Markdown or HTML\n artifacts you create for the user so they open in the BB IDE.\n\nMessaging:\n\n bb thread tell <id> <message> Send a follow-up message\n --mode <mode> Message mode: steer (default), queue, or auto\n --model <model> Model override for this turn\n --reasoning-level <level> Reasoning level override\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Tell steers by default, delivering the message immediately into the active\n turn. Use --mode queue for non-urgent follow-ups that can wait until the agent\n is free.\n\n bb thread stop [id] Stop an active or provisioning thread\n bb thread retry [id] Continue a subscription-limited turn\n --self Target current thread\n --request-id <id> Require an exact failed request id\n bb thread compact [id] Request compaction of an idle or errored thread's context\n bb thread cancel-plan [id] Exit the provider's active Plan mode\n bb thread clear-goal [id] Clear the provider's active Goal\n --self Target current thread\n\n `thread compact` enqueues the same structured /compact turn used by the\n composer. Follow the thread timeline for the eventual compaction result.\n\n `thread retry` is only for a terminal provider subscription-limit failure.\n The server requires accepted input, available execution settings, no newer\n request, and no provider-owned retry. Prior output or tool activity does not\n disqualify the turn. It starts an agent-only system turn containing `Please\n continue.` on the existing provider conversation; it does not resend the\n original prompt or create another user message. When enabled, the Provider\n retry plugin invokes this continuation automatically for timed limits.\n\nOwnership:\n\n bb thread update [id] Update thread metadata\n --self Target current thread\n --title <title> Set title\n --parent-thread <id> Assign to a parent thread\n --clear-parent-thread Remove parent assignment\n --section <id> Move into a section\n --clear-section Remove section assignment\n --visibility <visibility> Set visible or hidden\n\n bb thread read [id] Mark read\n bb thread unread [id] Mark unread\n bb thread reorder-pinned <id> [--after <id>] [--before <id>]\n\nQueued messages:\n\n bb thread queue list <thread-id>\n bb thread queue create <thread-id> <message>\n bb thread queue update <thread-id> <message-id> <message> [--file <path>] [--image <path>]\n bb thread queue send <thread-id> <message-id> [--mode auto|steer]\n bb thread queue reorder <thread-id> <message-id> [--after <id>] [--before <id>]\n bb thread queue group <thread-id> <boundary-id> --prefix <comma-separated-ids>\n bb thread queue delete <thread-id> <message-id>\n\nPersisted panel tabs:\n\n bb thread tabs show <thread-id>\n bb thread tabs set <thread-id> --expected-revision <n> --tabs-json '<json>'\n\nLifecycle:\n\n bb thread archive [id] Archive a thread (and children/hidden forks)\n --self Archive current thread\n\n bb thread unarchive [id] Unarchive a thread\n --self Unarchive current thread\n\n bb thread delete <id> Delete permanently\n --yes Skip confirmation\n\nRead-only commands require a thread ID or --self where supported.\nMutating thread lifecycle and messaging commands require an explicit ID or --self.", + "body": "Thread commands\n\nEvery command supports --json for machine-readable output.\n\nSpawning:\n\n bb thread spawn --project <id> --prompt \"...\" [options]\n\n --prompt <prompt> Initial prompt (required)\n --title <title> Thread title\n --project <id> Project (required)\n --parent-thread <id> Parent thread\n --parent-self Parent to the current thread (BB_THREAD_ID)\n --provider <id> Provider override\n --model <model> Model override\n --reasoning-level <level> Reasoning level: low, medium, high, xhigh, max (provider-dependent)\n --environment <id-or-path> Attach to an existing environment (ID or workspace path)\n --new-environment <kind> Create a new environment (worktree)\n --base-branch <branch> Base branch for a new managed worktree\n --machine <id-or-name> Run on a machine (--host is an alias)\n --service-tier <tier> Service tier: fast, default\n --permission-mode <mode> Permission mode: accept-edits, auto, or full\n --section <id> Create the thread in a section\n --visibility <visibility> visible or hidden; a child inherits its parent by default\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n --origin-kind <kind> Create a fork thread\n --source-thread <id> Source thread for a fork\n --source-seq-end <seq> Last included source event sequence\n\n Execution defaults resolve from explicit flags, live parent execution, and\n remembered project defaults. With no remembered model, bb uses the explicitly\n requested provider or Codex and resolves its provider-reported default model\n on the target machine. The product reasoning and permission defaults are\n medium and auto.\n accept-edits uses workspace sandboxing with user-reviewed escalation. auto uses\n the same workspace sandbox with provider-native automatic review. full is the\n explicit sandbox and approval bypass. Plan mode is separate from permissions.\n Subagents inherit the parent's permission mode by default; pass --permission-mode full only when the user or task needs unsandboxed execution.\n Parenting is opt-in. Inside a thread, pass --parent-self to parent the new thread to the current thread.\n Hidden threads are for plugin/background workers. They remain addressable by\n ID while staying out of sidebar organization and unread/pending favicon\n attention. Thread lists exclude them unless\n --include-hidden is passed; direct-ID operations remain available.\n A new child thread inherits the visibility of its parent, so the subagents of\n a hidden thread stay hidden too. Pass --visibility to override the inherited\n value. A hidden child still reports its turns and blockers to its parent\n thread; only source-derived forks stay silent.\n A machine selector accepts an exact ID or an unambiguous name. It works with\n an unmanaged --environment path, --new-environment worktree, or the personal\n workspace. It cannot be combined with an existing environment ID because that\n environment already selects its machine. Without the flag, local/primary\n machine resolution is unchanged.\n\nForking:\n\n bb thread fork <source-thread-id> [options]\n\n --prompt <prompt> Optional first prompt; omit for an idle fork\n --source-seq-end <seq> Fork at this source event sequence (tip by default)\n --workspace <mode> isolated (default) or reuse\n --title <title> Thread title\n --permission-mode <mode> Inherit source by default; accepts accept-edits, auto, full\n --visibility <visibility> visible (default) or hidden\n --agent-context-seed <text> Persist agent-only context without a first run\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Forks clone the source provider session on the same machine. Isolated forks\n create a fresh managed worktree (or personal workspace for personal threads);\n reuse attaches the source environment. Omit --prompt to create an idle fork.\n\nEditing a sent message (requires the `editMessages` experiment):\n\n bb thread edit-message <id> --message \"Replacement text\"\n --self Target the current thread (BB_THREAD_ID)\n --expected-request-sequence <seq> Select the message and reject a stale target\n\n Without --expected-request-sequence, the latest eligible message is edited.\n Codex, Claude Code, and Pi threads are supported. The original conversation\n remains unchanged until the provider prepares the replacement history.\n Submitting replaces that turn and every later turn while retaining workspace\n changes.\n\nListing:\n\n bb thread list List threads\n --project <id> Filter by project\n --parent-thread <id> Filter by parent thread\n --archived Show only archived threads\n --section <id> Filter by section\n --unsectioned Show only threads outside sections\n --include-hidden Include hidden threads\n\n bb thread search <query> Search threads and messages\n bb thread history <id> List prompt history\n\nSections:\n\n bb thread section list\n bb thread section create <name>\n bb thread section rename <id> <name>\n bb thread section delete <id> [--yes]\n\nInspecting:\n\n bb thread show [id] Show thread details and pull request status\n --self Target current thread\n --work-status Include git working-tree status\n --git-diff Include git diff\n --diff-target <type> Diff scope: uncommitted, branch_committed, all, commit\n --diff-sha <sha> Commit SHA (for --diff-target commit)\n --diff-merge-base <branch> Override merge-base branch for diff\n --merge-base-branches List available merge-base branches\n\n Shows pull request status for the attached environment branch when available.\n\n bb thread log [id] Show thread event log\n --self Target current thread\n --format <format> Output format: json, minimal, verbose\n --limit <count> Limit entries\n --after-seq <seq> Paginate after sequence number\n\n bb thread output [id] Get the final output of a thread\n --self Target current thread\n\n bb thread wait <id> Wait for a thread status or event (defaults to --status idle)\n --status <status> Wait for this status\n --event <type> Wait for this event type\n --timeout <seconds> Timeout in seconds (default: 1200 / 20 min)\n --poll-interval <ms> Polling interval in milliseconds\n\nOpening threads and files in the app:\n\n bb thread open <path> Open a file in the current BB thread panel\n bb thread open <thread-id> [path] Open a thread, optionally with a panel file\n --line <number> Line number to focus\n --split <placement> right, down, left, top, or replace\n bb thread pane <action> [thread-id] Maximize, restore, or toggle an open thread pane\n\n Inside a BB thread, BB_THREAD_ID selects the current thread automatically and\n the thread ID argument is omitted for file-only opens. Pass an explicit thread\n ID with --split to open another thread. Outside a BB thread, pass the thread ID\n as the first argument. A thread already open in a pane is focused instead of\n duplicated. Edge placement creates panes through the eighth pane; at eight\n panes, it replaces the focused pane.\n Pane actions broadcast to connected BB app windows and affect the matching\n already-open pane without changing its split tree.\n Paths can be thread-relative workspace paths, or absolute paths inside the\n target thread workspace. Absolute paths under BB_THREAD_STORAGE open as\n thread-storage files for the current thread. Use this for Markdown or HTML\n artifacts you create for the user so they open in the BB IDE.\n\nMessaging:\n\n bb thread tell <id> <message> Send a follow-up message\n --mode <mode> Message mode: steer (default), queue, or auto\n --model <model> Model override for this turn\n --reasoning-level <level> Reasoning level override\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Tell steers by default, delivering the message immediately into the active\n turn. Use --mode queue for non-urgent follow-ups that can wait until the agent\n is free.\n\n bb thread stop [id] Stop an active or provisioning thread\n bb thread retry [id] Continue a subscription-limited turn\n --self Target current thread\n --request-id <id> Require an exact failed request id\n bb thread compact [id] Request compaction of an idle or errored thread's context\n bb thread cancel-plan [id] Exit the provider's active Plan mode\n bb thread clear-goal [id] Clear the provider's active Goal\n --self Target current thread\n\n `thread compact` enqueues the same structured /compact turn used by the\n composer. Follow the thread timeline for the eventual compaction result.\n\n `thread retry` is only for a terminal provider subscription-limit failure.\n The server requires accepted input, available execution settings, no newer\n request, and no provider-owned retry. Prior output or tool activity does not\n disqualify the turn. It starts an agent-only system turn containing `Please\n continue.` on the existing provider conversation; it does not resend the\n original prompt or create another user message. When enabled, the Provider\n retry plugin invokes this continuation automatically for timed limits.\n\nOwnership:\n\n bb thread update [id] Update thread metadata\n --self Target current thread\n --title <title> Set title\n --parent-thread <id> Assign to a parent thread\n --clear-parent-thread Remove parent assignment\n --section <id> Move into a section\n --clear-section Remove section assignment\n --visibility <visibility> Set visible or hidden\n\n bb thread read [id] Mark read\n bb thread unread [id] Mark unread\n bb thread reorder-pinned <id> [--after <id>] [--before <id>]\n\nQueued messages:\n\n bb thread queue list <thread-id>\n bb thread queue create <thread-id> <message>\n bb thread queue update <thread-id> <message-id> <message> [--file <path>] [--image <path>]\n bb thread queue send <thread-id> <message-id> [--mode auto|steer]\n bb thread queue reorder <thread-id> <message-id> [--after <id>] [--before <id>]\n bb thread queue group <thread-id> <boundary-id> --prefix <comma-separated-ids>\n bb thread queue delete <thread-id> <message-id>\n\nPersisted panel tabs:\n\n bb thread tabs show <thread-id>\n bb thread tabs set <thread-id> --expected-revision <n> --tabs-json '<json>'\n\nLifecycle:\n\n bb thread archive [id] Archive a thread (and children/hidden forks)\n --self Archive current thread\n\n bb thread unarchive [id] Unarchive a thread\n --self Unarchive current thread\n\n bb thread delete <id> Delete permanently\n --yes Skip confirmation\n\nRead-only commands require a thread ID or --self where supported.\nMutating thread lifecycle and messaging commands require an explicit ID or --self.", "fileName": "bb-guide-threads.md", "kind": "instruction", "title": "bb Guide — Threads", diff --git a/packages/templates/src/templates/bb-guide-threads.md b/packages/templates/src/templates/bb-guide-threads.md index c4aa0e5678..78c225c16c 100644 --- a/packages/templates/src/templates/bb-guide-threads.md +++ b/packages/templates/src/templates/bb-guide-threads.md @@ -77,6 +77,18 @@ Forking: create a fresh managed worktree (or personal workspace for personal threads); reuse attaches the source environment. Omit --prompt to create an idle fork. +Editing a sent message (requires the `editMessages` experiment): + + bb thread edit-message <id> --message "Replacement text" + --self Target the current thread (BB_THREAD_ID) + --expected-request-sequence <seq> Select the message and reject a stale target + + Without --expected-request-sequence, the latest eligible message is edited. + Codex, Claude Code, and Pi threads are supported. The original conversation + remains unchanged until the provider prepares the replacement history. + Submitting replaces that turn and every later turn while retaining workspace + changes. + Listing: bb thread list List threads diff --git a/packages/thread-view/src/parse-operation-message.ts b/packages/thread-view/src/parse-operation-message.ts index 85bc69d6f0..c3c7061bc2 100644 --- a/packages/thread-view/src/parse-operation-message.ts +++ b/packages/thread-view/src/parse-operation-message.ts @@ -531,7 +531,12 @@ export function parseOperationMessage( // Plugin interaction lifecycle events drive composer/realtime state, but // their generic operation rows duplicate the plugin form and briefly // linger as "Plugin interaction pending" after submission. - if (decoded.operation === "plugin_interaction") return null; + if ( + decoded.operation === "plugin_interaction" || + decoded.operation === "edit_message" + ) { + return null; + } const threadOperation = createThreadOperationMetadata(decoded); const title = threadOperationTitle(threadOperation, threadName); diff --git a/packages/thread-view/test/build-thread-timeline.test.ts b/packages/thread-view/test/build-thread-timeline.test.ts index 2cbe26cc91..a61ee83a8b 100644 --- a/packages/thread-view/test/build-thread-timeline.test.ts +++ b/packages/thread-view/test/build-thread-timeline.test.ts @@ -1790,6 +1790,20 @@ describe("buildThreadTimelineFromEvents", () => { expect(collectSystemRows(rows)).toEqual([]); }); + it("suppresses the internal message-edit commit marker", () => { + const rows = buildTimelineRows([ + systemOperationEvent({ + message: "Message edited", + operation: "edit_message", + operationId: "edit-op-test", + seq: 1, + status: "completed", + }), + ]); + + expect(collectSystemRows(rows)).toEqual([]); + }); + it.each([ { expectedRowStatus: "pending", diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md new file mode 100644 index 0000000000..4193c84c7f --- /dev/null +++ b/plans/issue-1114-edit-sent-message.md @@ -0,0 +1,245 @@ +# Experimental Sent-Message Editing + +Issue: [#1114 — No way to edit a sent message or undo the last turn](https://github.com/get-bb/bb/issues/1114) + +## Goal + +Let a user replace any completed user message in a Codex, Claude Code, or Pi +thread and rerun the conversation from that point. + +Opening the editor must be entirely client-local. The thread, provider session, +timeline, and workspace change only after the user selects **Submit edit** and +the server has safely prepared the replacement provider history. + +This version deliberately does not include undo. + +## Status + +Status (2026-08-10): the functional prototype is implemented behind the +default-off `editMessages` experiment. It includes arbitrary-message timeline +actions, the shared inline editor, provider checkpoints for Codex, Claude Code, +and Pi, atomic event-suffix replacement, realtime invalidation, SDK and CLI +surfaces, and generated database migration `0088_acoustic_celestials.sql`. + +The remaining work is validation: focused automated tests, full typecheck and +lint, and real-provider smoke tests proving that each replacement turn cannot +see the removed suffix. + +## Product Contract + +When `editMessages` is enabled: + +- Every eligible completed root user message exposes **Edit message**. +- Selecting the action replaces only that message bubble with the compact + inline editor. All later messages remain visible until submission succeeds. +- The editor reuses the queued-message editor frame and follow-up composer, + labels the action **Submit edit**, uses the short header **Editing message**, + and selects all text when it opens. +- Cancel is client-local and confirms only when it would discard changes. +- Submit atomically replaces the selected request and every later conversation + event, then starts the edited turn. +- Existing workspace, git, terminal, process, child-thread, and external side + effects are intentionally retained. +- Successful submission does not show a toast; the rewritten timeline is the + confirmation. + +This version does not provide: + +- undo, redo, or standalone rewind; +- editing while a root turn, workflow, background agent, or background command + is active; +- editing turns containing a steer or multiple accepted requests; +- ACP, OpenCode, or other provider support; +- filesystem or external-side-effect rollback; +- a generic history-truncation or plugin API. + +## Experiment + +`editMessages` is a required server-backed experiment field with a default of +`false`. It is persisted in `system_experiments.edit_messages` and is exposed +through: + +- Settings → Experiments → **Edit messages**; +- `bb settings experiment editMessages <true|false>`; +- the system configuration API used by the app and SDK. + +The app hides edit actions while the experiment is off. The server separately +rejects read and mutation requests while it is off, so direct CLI or SDK calls +cannot bypass the gate. + +## UX Flow + +### Open + +Selecting **Edit message**: + +1. Makes no server request. +2. Creates a separate in-memory edit session from the timeline row's visible + `PromptInput[]` and request event sequence. +3. Leaves the ordinary persisted follow-up draft mounted and unchanged. +4. Replaces the selected bubble with the inline editor and selects its text. +5. Keeps the selected turn's response and the entire later timeline visible. + +Remote image inputs that cannot be faithfully restored remain ineligible. +Agent-only context is excluded from the editor and is resolved again through +the normal submit pipeline. + +### Cancel + +Cancel or navigation clears only the client edit session. No provider or server +state changes. If the draft differs from the original, cancellation confirms +before discarding it. + +### Submit + +Normal and modifier submit both use the edit mutation, never ordinary send, +queue, or steer. While pending, the original timeline stays visible and the +editor is disabled. + +On a pre-commit failure, the original timeline and draft remain. On success, +the client invalidates history-owning queries and realtime publishes a +`history-rewritten` change so every client replaces the old suffix directly +with the edited pending turn. + +## Eligibility + +The server is authoritative. A selected request is editable only when: + +- the experiment is enabled; +- the thread is writable and idle; +- the provider is `codex`, `claude-code`, or `pi`; +- the request is user-initiated and targets a root thread start or root turn; +- exactly one `turn/input/accepted` event links the request to its root turn; +- that root turn completed and contains no accepted steer or additional input; +- there is no queued message, pending interaction, workflow, background agent, + or background command; +- the replacement provider history can be staged through the root turn + preceding the selected request. + +The app additionally suppresses actions during timeline loading, a competing +send/edit mutation, or an active local edit session. Submission always +revalidates the exact request sequence and current event high-water mark. + +## Provider Checkpoints + +Editing an earlier message needs a provider-native transcript boundary for the +turn immediately before it. bb stores that opaque boundary on +`turn/completed.providerCheckpointId`: + +| Provider | Persisted checkpoint | Rewind implementation | +| ----------- | --------------------------------- | ----------------------------------------------- | +| Codex | bb root turn id | `thread/fork.lastTurnId` | +| Claude Code | latest `SDKAssistantMessage.uuid` | `forkSession(..., { upToMessageId })` | +| Pi | session manager leaf entry id | `SessionManager.createBranchedSession(entryId)` | + +Editing the first root turn needs no retained checkpoint and starts a fresh +provider session. For an existing Claude Code or Pi thread created before +checkpoints were recorded, editing after a legacy turn is rejected rather than +silently forking from the wrong context. A new turn records the checkpoint +needed for subsequent edits. + +The server sends only opaque provider checkpoints across the daemon boundary: + +```ts +{ + type: "thread.rewind.prepare"; + sourceProviderThreadId: string; + retainThroughProviderCheckpoint: string; + operationId: string; +} +``` + +The runtime stages a detached provider fork and returns its provider thread id. +The source provider session remains untouched until the database commit. This +wire change requires `HOST_DAEMON_PROTOCOL_VERSION = 79`. + +## API, SDK, And CLI + +The mutation selects its target by the initiating request event sequence: + +```text +POST /api/v1/threads/:id/edit-message +``` + +```ts +{ + operationId: string; + expectedRequestSequence: number; + input: PromptInput[]; + model?: string; + serviceTier?: ServiceTier; + reasoningLevel?: ReasoningLevel; + permissionMode?: PermissionModeInput; + executionInputSources?: ExistingThreadExecutionInputSources; +} +``` + +For CLI convenience, a read-only latest-target route remains available: + +```text +GET /api/v1/threads/:id/latest-message-edit +``` + +The SDK exposes `threads.getLatestMessageEdit(...)` and +`threads.editMessage(...)`. The CLI exposes: + +```text +bb thread edit-message [id] [--self] + --message <text> + [--expected-request-sequence <n>] [--json] +``` + +Without an explicit sequence the CLI resolves the latest eligible request. +With a sequence it can edit any eligible earlier message and uses the value as +an optimistic-concurrency guard. + +## Atomic Replacement + +The server holds the per-thread mutation guard and performs: + +1. **Preflight:** resolve the exact request and root turn, validate eligibility, + replacement input, attachments, mentions, execution options, and event + high-water mark. +2. **Stage:** create a detached provider fork through the preceding checkpoint, + or choose a fresh-session path for the first turn. The source session and bb + event history remain unchanged if this fails. +3. **Commit:** in one immediate transaction, revalidate the target and high-water + mark, append an `edit_message` operation marker, delete the selected event + suffix plus sequence-addressed prompt-history/search state and dynamic + context state, append the edited `client/turn/requested` through the normal + send pipeline, record prompt history, and transition the thread to active. +4. **Publish and dispatch:** emit `history-rewritten`, invalidate history-owning + caches, and dispatch the edited turn on the staged provider session. + +The marker is retained above the deleted suffix, keeps event sequences +monotonic, and stores an input fingerprint. Retrying the same `operationId` and +payload returns the committed result; reusing it with different input is a +conflict. + +## Validation Plan + +Automated coverage must prove: + +- the experiment defaults off, persists, renders in Settings, and gates both UI + and server; +- actions appear on every eligible accepted user request, not only the latest; +- opening/cancelling is non-destructive and selects the complete editor text; +- submitting an earlier request removes its turn and every later turn; +- suffix deletion also clears search, prompt-history, and dynamic-context state + while preserving monotonic sequences; +- stale request sequences, changed high-water marks, steers, active work, + queued messages, pending interactions, and unsupported providers reject + without changing history; +- Codex maps the retained bb turn id to `lastTurnId`; +- Claude Code persists the assistant UUID and maps it to `upToMessageId`; +- Pi persists the session leaf id and branches through that entry only; +- first-turn edits start fresh for all three supported providers; +- lost-response retries do not create duplicate rewinds or requests; +- SDK paths/types, CLI latest lookup, explicit earlier sequence, human output, + guide, skill, and configuration docs match the implementation. + +Before enabling the experiment more broadly, perform real Codex, Claude Code, +and Pi smoke tests with a unique fact in the removed suffix. The replacement +turn must be unable to recall that fact from provider conversation context. +Also verify desktop and compact/mobile editing, cancel, failed submit, and two +connected clients. From 84d12009700fbd4af0b50c0c49b8337ecb43d9a4 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Mon, 10 Aug 2026 15:57:49 -0700 Subject: [PATCH 2/9] Address sent-message edit review feedback --- .../promptbox/FollowUpPromptBox.tsx | 36 +- .../ThreadTimelineRows.actions.test.tsx | 12 +- .../thread/timeline/ThreadTimelineRows.tsx | 17 +- .../src/components/thread/timeline/types.ts | 4 +- .../ui/markdown-thread-mentions.test.tsx | 1 + .../app/src/hooks/cache-owners/query-cache.ts | 2 +- .../mutations/thread-state-mutations.test.tsx | 1 + .../src/hooks/queries/query-helpers.test.ts | 1 + .../src/hooks/queries/thread-queries.test.tsx | 1 + apps/app/src/hooks/queries/thread-queries.ts | 10 +- .../thread-detail/SplitThreadArea.stories.tsx | 1 + .../thread-detail/ThreadDetailPromptArea.tsx | 47 +- .../views/thread-detail/ThreadDetailView.tsx | 75 ++- .../thread-detail/sentMessageEdit.test.ts | 2 + .../views/thread-detail/sentMessageEdit.ts | 3 + .../command-output/thread-actions.test.ts | 25 + apps/cli/src/commands/thread/actions.ts | 2 +- apps/host-daemon/src/app.test.ts | 1 + .../src/command-dispatch-support.test.ts | 1 + apps/host-daemon/src/command-dispatch.test.ts | 55 ++- apps/host-daemon/src/command-dispatch.ts | 13 + .../src/command-handlers/thread.ts | 36 +- apps/host-daemon/src/provider-cli-health.ts | 2 +- apps/host-daemon/src/runtime-manager.test.ts | 1 + .../src/terminals/terminal-manager.test.ts | 1 + .../test/command/dispatch-helpers.ts | 1 + .../server/src/services/hosts/live-command.ts | 60 ++- .../services/threads/thread-edit-message.ts | 427 +++++++++++------- .../threads/thread-runtime-display.ts | 4 + .../src/services/threads/thread-send.ts | 4 + .../test/threads/thread-edit-message.test.ts | 364 ++++++++++++--- docs/configuration.md | 9 +- packages/agent-runtime/src/acp/adapter.ts | 2 + .../src/claude-code/adapter.test.ts | 61 +++ .../agent-runtime/src/claude-code/adapter.ts | 6 + .../src/claude-code/translate-message.ts | 5 +- .../agent-runtime/src/codex/adapter.test.ts | 15 + packages/agent-runtime/src/codex/adapter.ts | 9 + packages/agent-runtime/src/pi/adapter.test.ts | 15 + packages/agent-runtime/src/pi/adapter.ts | 6 + .../src/pi/bridge/__tests__/bridge.test.ts | 20 +- .../agent-runtime/src/pi/bridge/bridge.ts | 27 ++ .../agent-runtime/src/provider-adapter.ts | 5 + .../src/runtime-thread-rewind.test.ts | 14 + packages/agent-runtime/src/runtime.ts | 101 ++++- .../agent-runtime/src/test/fake-adapter.ts | 9 + .../src/test/fake-provider-script.ts | 9 + .../src/test/runtime-test-harness.ts | 2 + packages/agent-runtime/src/types.ts | 7 + .../db/src/data/queued-thread-messages.ts | 5 +- packages/host-daemon-contract/src/commands.ts | 18 +- packages/host-daemon-contract/src/session.ts | 1 + .../test/contract.test.ts | 11 +- .../bundled-types/bb-plugin-sdk.d.ts | 16 +- packages/plugin-sdk/src/testing/fixtures.ts | 1 + packages/server-contract/src/api/threads.ts | 1 + .../src/generated/plugin-sdk-dts.generated.ts | 2 +- .../src/generated/templates.generated.ts | 2 +- .../src/templates/bb-guide-customization.md | 5 + plans/issue-1114-edit-sent-message.md | 44 +- 60 files changed, 1261 insertions(+), 377 deletions(-) diff --git a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx index 2714194e0a..b26e61b4ea 100644 --- a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx +++ b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx @@ -718,23 +718,25 @@ function FollowUpPromptBoxWithComposer({ composer.isFollowUpSubmitting || (steerOnPrimarySubmit && !composer.canModifierSubmit), onModifierSubmit, - title: - composer.submitTitle ?? - (canQueueFollowUp - ? steerOnPrimarySubmit - ? "Steer current run (Enter)" - : "Queue follow-up (Enter)" - : isStopping - ? "Stopping run..." - : isLoadingExecutionOptions - ? "Loading models..." - : isLoadingPendingInteractions - ? "Checking pending interactions..." - : isProvisioning - ? "Provisioning..." - : isUnavailable - ? "Unavailable" - : "Submit (Enter)"), + title: composer.isFollowUpSubmitting + ? "Submitting..." + : canSubmit && composer.submitTitle !== undefined + ? composer.submitTitle + : canQueueFollowUp + ? steerOnPrimarySubmit + ? "Steer current run (Enter)" + : "Queue follow-up (Enter)" + : isStopping + ? "Stopping run..." + : isLoadingExecutionOptions + ? "Loading models..." + : isLoadingPendingInteractions + ? "Checking pending interactions..." + : isProvisioning + ? "Provisioning..." + : isUnavailable + ? "Unavailable" + : "Submit (Enter)", isRunning: canStopRuntime, }} typeahead={typeahead} diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx index 14c1136701..cb4c5cef5e 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx @@ -361,12 +361,14 @@ describe("ThreadTimelineRows actions", () => { expect(editButtons).toHaveLength(2); fireEvent.click(editButtons[0]!); expect(onEditMessage).toHaveBeenNthCalledWith(1, { + messageId: "earlier_user_message", expectedRequestSequence: 3, input: [{ type: "text", text: "An earlier request.", mentions: [] }], }); fireEvent.click(editButtons[1]!); expect(onEditMessage).toHaveBeenCalledWith({ + messageId: "latest_user_message", expectedRequestSequence: 7, input: [ { type: "text", text: "The latest request.", mentions: [] }, @@ -387,6 +389,12 @@ describe("ThreadTimelineRows actions", () => { text: "The original request.", sourceSeqStart: 7, }), + conversationRow({ + id: "same_request_sibling", + role: "user", + text: "A grouped sibling remains visible.", + sourceSeqStart: 7, + }), conversationRow({ id: "assistant_response", role: "assistant", @@ -395,7 +403,7 @@ describe("ThreadTimelineRows actions", () => { }), ]} inlineMessageEditor={{ - expectedRequestSequence: 7, + messageId: "edited_user_message", onHostElementChange, }} threadRuntimeDisplayStatus="idle" @@ -409,6 +417,7 @@ describe("ThreadTimelineRows actions", () => { expect(host).not.toBeNull(); expect(onHostElementChange).toHaveBeenCalledWith(host); expect(screen.queryByText("The original request.")).toBeNull(); + expect(screen.getByText("A grouped sibling remains visible.")).toBeTruthy(); expect( screen.getByText("The existing response remains visible."), ).toBeTruthy(); @@ -463,6 +472,7 @@ describe("ThreadTimelineRows actions", () => { fireEvent.click(screen.getByRole("button", { name: "Edit message" })); expect(onEditMessage).toHaveBeenCalledWith({ + messageId: expect.any(String), expectedRequestSequence: 11, input: [{ type: "localImage", path: "uploads/screenshot.png" }], }); diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx index 4ea476cc34..e2095bc315 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx @@ -209,7 +209,7 @@ interface TimelineRendererStaticContextValue { onForkMessage: ThreadTimelineForkMessageHandler | undefined; onEditMessage: ThreadTimelineEditMessageHandler | undefined; inlineMessageEditorHostRef: RefCallback<HTMLDivElement> | undefined; - inlineMessageEditorRequestSequence: number | null; + inlineMessageEditorMessageId: string | null; onMessageAddToChat: ThreadTimelineAddToChatHandler | undefined; onSendToMainMessage: ThreadTimelineSendToMainMessageHandler | undefined; onSelectionAddToChat: ThreadTimelineAddToChatHandler | undefined; @@ -910,7 +910,7 @@ function ConversationRow({ const { canSpawnChild, inlineMessageEditorHostRef, - inlineMessageEditorRequestSequence, + inlineMessageEditorMessageId, onEditMessage, onForkMessage, onMessageAddToChat, @@ -932,10 +932,7 @@ function ConversationRow({ workspaceRootPath, } = useTimelineRendererStaticContext(); const senderThreadMetadataById = useSenderThreadMetadataContext(); - if ( - row.role === "user" && - inlineMessageEditorRequestSequence === row.sourceSeqStart - ) { + if (row.role === "user" && inlineMessageEditorMessageId === row.id) { return ( <div className="ml-auto w-full max-w-[70%] max-md:max-w-full"> <div @@ -996,9 +993,6 @@ function ConversationRow({ mentions: [...row.mentions], }); } - for (const url of row.attachments?.imageUrls ?? []) { - input.push({ type: "image", url }); - } for (const path of row.attachments?.localImagePaths ?? []) { input.push({ type: "localImage", path }); } @@ -1006,6 +1000,7 @@ function ConversationRow({ input.push({ type: "localFile", path }); } onEditMessage({ + messageId: row.id, expectedRequestSequence: row.sourceSeqStart, input, }); @@ -2083,8 +2078,8 @@ function ThreadTimelineRowsForTimelineView(props: ThreadTimelineRowsProps) { onEditMessage: props.onEditMessage, inlineMessageEditorHostRef: props.inlineMessageEditor?.onHostElementChange, - inlineMessageEditorRequestSequence: - props.inlineMessageEditor?.expectedRequestSequence ?? null, + inlineMessageEditorMessageId: + props.inlineMessageEditor?.messageId ?? null, onMessageAddToChat: props.onMessageAddToChat, onSendToMainMessage: props.onSendToMainMessage, onSelectionAddToChat: selectionAddToChatHandler, diff --git a/apps/app/src/components/thread/timeline/types.ts b/apps/app/src/components/thread/timeline/types.ts index f1c2b3aa2b..3ca756e652 100644 --- a/apps/app/src/components/thread/timeline/types.ts +++ b/apps/app/src/components/thread/timeline/types.ts @@ -35,6 +35,8 @@ export type ThreadTimelineForkMessageHandler = ( ) => void; export interface ThreadTimelineEditMessageTarget { + /** Stable id of the specific rendered user bubble being edited. */ + messageId: string; /** Event sequence of the user request the edit would replace. */ expectedRequestSequence: number; /** User-visible input reconstructed from the unchanged timeline row. */ @@ -52,7 +54,7 @@ export type ThreadTimelineEditMessageHandler = ( /** Client-local editor mounted in place of one user conversation row. */ export interface ThreadTimelineInlineMessageEditor { - expectedRequestSequence: number; + messageId: string; onHostElementChange: (element: HTMLDivElement | null) => void; } diff --git a/apps/app/src/components/ui/markdown-thread-mentions.test.tsx b/apps/app/src/components/ui/markdown-thread-mentions.test.tsx index a5ee745ad1..753562a256 100644 --- a/apps/app/src/components/ui/markdown-thread-mentions.test.tsx +++ b/apps/app/src/components/ui/markdown-thread-mentions.test.tsx @@ -66,6 +66,7 @@ function threadResponse( displayStatus: "idle", hostReconnectGraceExpiresAt: null, }, + activeBackgroundAgentCount: 0, canSpawnChild: true, ...overrides, }; diff --git a/apps/app/src/hooks/cache-owners/query-cache.ts b/apps/app/src/hooks/cache-owners/query-cache.ts index a946b5c8a9..487b583abd 100644 --- a/apps/app/src/hooks/cache-owners/query-cache.ts +++ b/apps/app/src/hooks/cache-owners/query-cache.ts @@ -462,7 +462,7 @@ export function getEnvironmentActionInvalidationQueryKeys({ export function getCachedThreadListPlaceholder( queryClient: QueryClient, threadId: string, -): ThreadWithRuntime | undefined { +): ThreadListEntry | undefined { if (!threadId) { return undefined; } diff --git a/apps/app/src/hooks/mutations/thread-state-mutations.test.tsx b/apps/app/src/hooks/mutations/thread-state-mutations.test.tsx index 2be5cd704b..ab40eb264c 100644 --- a/apps/app/src/hooks/mutations/thread-state-mutations.test.tsx +++ b/apps/app/src/hooks/mutations/thread-state-mutations.test.tsx @@ -61,6 +61,7 @@ function makeThreadResponse( ): ThreadResponse { return { ...makeThreadWithRuntime(thread), + activeBackgroundAgentCount: 0, canSpawnChild: true, ...thread, }; diff --git a/apps/app/src/hooks/queries/query-helpers.test.ts b/apps/app/src/hooks/queries/query-helpers.test.ts index 0521a43330..d4dfbbea3b 100644 --- a/apps/app/src/hooks/queries/query-helpers.test.ts +++ b/apps/app/src/hooks/queries/query-helpers.test.ts @@ -246,6 +246,7 @@ describe("resolveThreadPlaceholder", () => { it("reuses previous thread data only for the same thread query", () => { const previousThread: ThreadResponse = { ...makeThreadWithRuntime({ id: "thread-1" }), + activeBackgroundAgentCount: 0, canSpawnChild: false, }; diff --git a/apps/app/src/hooks/queries/thread-queries.test.tsx b/apps/app/src/hooks/queries/thread-queries.test.tsx index 85b1b7673c..615f2b5db0 100644 --- a/apps/app/src/hooks/queries/thread-queries.test.tsx +++ b/apps/app/src/hooks/queries/thread-queries.test.tsx @@ -76,6 +76,7 @@ const THREAD_WITH_INCLUDES = { displayStatus: "idle", hostReconnectGraceExpiresAt: null, }, + activeBackgroundAgentCount: 0, canSpawnChild: true, environment: null, host: null, diff --git a/apps/app/src/hooks/queries/thread-queries.ts b/apps/app/src/hooks/queries/thread-queries.ts index 84e60bdbad..183397b37f 100644 --- a/apps/app/src/hooks/queries/thread-queries.ts +++ b/apps/app/src/hooks/queries/thread-queries.ts @@ -6,7 +6,7 @@ import { } from "@tanstack/react-query"; import { useCallback, useMemo } from "react"; import { useDebounceValue } from "usehooks-ts"; -import type { PendingInteraction, ThreadWithRuntime } from "@bb/domain"; +import type { PendingInteraction, ThreadListEntry } from "@bb/domain"; import type { PromptHistoryResponse, ThreadQueuedMessageListResponse, @@ -542,12 +542,16 @@ export function useThread(id: string, options?: QueryOptions) { // placeholder; the real single-thread response, which carries the server- // computed value, resolves moments later. function liftThreadListPlaceholder( - thread: ThreadWithRuntime | undefined, + thread: ThreadListEntry | undefined, ): ThreadResponse | undefined { if (thread === undefined) { return undefined; } - return { ...thread, canSpawnChild: false }; + return { + ...thread, + activeBackgroundAgentCount: thread.activity.activeBackgroundAgentCount, + canSpawnChild: false, + }; } export function useThreadDetailBootstrap( diff --git a/apps/app/src/views/thread-detail/SplitThreadArea.stories.tsx b/apps/app/src/views/thread-detail/SplitThreadArea.stories.tsx index 99baed17d9..7b55bdd18e 100644 --- a/apps/app/src/views/thread-detail/SplitThreadArea.stories.tsx +++ b/apps/app/src/views/thread-detail/SplitThreadArea.stories.tsx @@ -44,6 +44,7 @@ function storyThread(id: string, title: string): ThreadResponse { displayStatus: "idle", hostReconnectGraceExpiresAt: null, }, + activeBackgroundAgentCount: 0, canSpawnChild: false, }; } diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx index d8a30d677f..f416227ffd 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx @@ -1572,28 +1572,31 @@ export function ThreadDetailPromptArea({ /> ); return ( - <div className="space-y-2"> - {activePromptMode ? activePromptModeCard : null} - {goal ? activeGoalCard : null} - <PluginComposerHostProvider value={normalPluginComposerHost}> - <PluginComposerBanners - view={{ - scope: normalPluginComposerHost.scope, - layout: "expanded", - draft: { - text: normalPluginComposerHost.draft.text, - isEmpty: - normalPluginComposerHost.draft.text.trim().length === 0 && - normalPluginComposerHost.draft.attachments.length === 0, - attachmentCount: - normalPluginComposerHost.draft.attachments.length, - }, - run: { isRunning: false, isSubmitting: false }, - }} - /> - </PluginComposerHostProvider> - {pendingInteractionComposer} - </div> + <> + {sentMessageEditorPortal} + <div className="space-y-2"> + {activePromptMode ? activePromptModeCard : null} + {goal ? activeGoalCard : null} + <PluginComposerHostProvider value={normalPluginComposerHost}> + <PluginComposerBanners + view={{ + scope: normalPluginComposerHost.scope, + layout: "expanded", + draft: { + text: normalPluginComposerHost.draft.text, + isEmpty: + normalPluginComposerHost.draft.text.trim().length === 0 && + normalPluginComposerHost.draft.attachments.length === 0, + attachmentCount: + normalPluginComposerHost.draft.attachments.length, + }, + run: { isRunning: false, isSubmitting: false }, + }} + /> + </PluginComposerHostProvider> + {pendingInteractionComposer} + </div> + </> ); } diff --git a/apps/app/src/views/thread-detail/ThreadDetailView.tsx b/apps/app/src/views/thread-detail/ThreadDetailView.tsx index b0e0441ed0..4173a67fec 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailView.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailView.tsx @@ -26,6 +26,7 @@ import { import type { PullRequestMergeMethod, TerminalSession, + TimelineRow, } from "@bb/server-contract"; import type { WorkspaceOpenTarget } from "@bb/host-daemon-contract"; import { appToast } from "@/components/ui/app-toast"; @@ -289,6 +290,19 @@ interface SentMessageEditSession { threadId: string; } +function hasTimelineRowId( + rows: readonly TimelineRow[], + rowId: string, +): boolean { + return rows.some( + (row) => + row.id === rowId || + (row.kind === "turn" && + row.children !== null && + hasTimelineRowId(row.children, rowId)), + ); +} + function getPullRequestMergeLoadingTitle( method: PullRequestMergeMethod, ): string { @@ -949,6 +963,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { const canEditSentMessages = thread !== undefined && canStartSentMessageEdit({ + activeBackgroundAgentCount: thread.activeBackgroundAgentCount, activeBackgroundCommandCount: activeBackgroundCommands.length, activeWorkflowCount: activeWorkflows.length, archivedAt: thread.archivedAt, @@ -983,6 +998,55 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { }, [canEditSentMessages, thread], ); + const sentMessageEditThreadId = sentMessageEditSession?.threadId ?? null; + const sentMessageEditTargetMessageId = + sentMessageEditSession?.target.messageId ?? null; + useEffect(() => { + if ( + sentMessageEditThreadId === null || + sentMessageEditTargetMessageId === null + ) { + return; + } + const sessionStillEligible = + thread !== undefined && + thread.id === sentMessageEditThreadId && + canStartSentMessageEdit({ + activeBackgroundAgentCount: thread.activeBackgroundAgentCount, + activeBackgroundCommandCount: activeBackgroundCommands.length, + activeWorkflowCount: activeWorkflows.length, + archivedAt: thread.archivedAt, + deletedAt: thread.deletedAt, + hasPendingInteraction, + isExperimentEnabled: + systemConfigQuery.data?.experiments.editMessages ?? false, + isEditSessionActive: false, + isMutationPending: false, + isTimelinePending: timelineLoading && timelineRows.length === 0, + queuedMessageCount: queuedMessagesForEditEligibility.length, + providerId: thread.providerId, + runtimeDisplayStatus: thread.runtime.displayStatus, + }); + const targetStillPresent = hasTimelineRowId( + timelineRows, + sentMessageEditTargetMessageId, + ); + if (!sessionStillEligible || (!timelineLoading && !targetStillPresent)) { + setSentMessageEditHostElement(null); + setSentMessageEditSession(null); + } + }, [ + activeBackgroundCommands.length, + activeWorkflows.length, + hasPendingInteraction, + queuedMessagesForEditEligibility.length, + sentMessageEditTargetMessageId, + sentMessageEditThreadId, + systemConfigQuery.data?.experiments.editMessages, + thread, + timelineLoading, + timelineRows, + ]); const handleEditSentMessage = useCallback<ThreadTimelineEditMessageHandler>( (target) => { if (!canEditSentMessages) { @@ -1088,13 +1152,18 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { ThreadTimelineInlineMessageEditor | undefined >( () => - sentMessageEditRequestSequence !== null + sentMessageEditRequestSequence !== null && + sentMessageEditTargetMessageId !== null ? { - expectedRequestSequence: sentMessageEditRequestSequence, + messageId: sentMessageEditTargetMessageId, onHostElementChange: handleSentMessageEditHostElementChange, } : undefined, - [handleSentMessageEditHostElementChange, sentMessageEditRequestSequence], + [ + handleSentMessageEditHostElementChange, + sentMessageEditRequestSequence, + sentMessageEditTargetMessageId, + ], ); const sentMessageEdit = useMemo<ThreadDetailSentMessageEdit | undefined>( () => diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts index f9f8e91e25..40a479efb4 100644 --- a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts +++ b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts @@ -5,6 +5,7 @@ import { } from "./sentMessageEdit"; const ELIGIBLE_STATE: SentMessageEditAvailability = { + activeBackgroundAgentCount: 0, activeBackgroundCommandCount: 0, activeWorkflowCount: 0, archivedAt: null, @@ -31,6 +32,7 @@ describe("canStartSentMessageEdit", () => { ["an archived thread", { archivedAt: 1 }], ["a pending interaction", { hasPendingInteraction: true }], ["an active workflow", { activeWorkflowCount: 1 }], + ["an active background agent", { activeBackgroundAgentCount: 1 }], ["an active background command", { activeBackgroundCommandCount: 1 }], ["an existing edit session", { isEditSessionActive: true }], ["another message mutation", { isMutationPending: true }], diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.ts b/apps/app/src/views/thread-detail/sentMessageEdit.ts index 9d5cfe87f7..7efa003295 100644 --- a/apps/app/src/views/thread-detail/sentMessageEdit.ts +++ b/apps/app/src/views/thread-detail/sentMessageEdit.ts @@ -1,6 +1,7 @@ import type { ThreadRuntimeDisplayStatus } from "@bb/domain"; export interface SentMessageEditAvailability { + activeBackgroundAgentCount: number; activeBackgroundCommandCount: number; activeWorkflowCount: number; archivedAt: number | null; @@ -20,6 +21,7 @@ export interface SentMessageEditAvailability { * must repeat the full eligibility check on the server before changing state. */ export function canStartSentMessageEdit({ + activeBackgroundAgentCount, activeBackgroundCommandCount, activeWorkflowCount, archivedAt, @@ -47,6 +49,7 @@ export function canStartSentMessageEdit({ !isTimelinePending && queuedMessageCount === 0 && activeWorkflowCount === 0 && + activeBackgroundAgentCount === 0 && activeBackgroundCommandCount === 0 ); } diff --git a/apps/cli/src/__tests__/command-output/thread-actions.test.ts b/apps/cli/src/__tests__/command-output/thread-actions.test.ts index b687e85ed8..17d2c310a2 100644 --- a/apps/cli/src/__tests__/command-output/thread-actions.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-actions.test.ts @@ -176,6 +176,31 @@ describe("bb thread action command output", () => { }); }); + it("bb thread edit-message rejects a partially numeric request sequence", async () => { + const submitEdit = vi.fn(); + stubServerApi({ "v1.threads.:id.edit-message.$post": submitEdit }); + + await expect( + runCommand( + [ + "thread", + "edit-message", + "thread-edit-1", + "--message", + "Replacement", + "--expected-request-sequence", + "41abc", + ], + register, + ), + ).rejects.toThrow("process.exit:1"); + + expect(submitEdit).not.toHaveBeenCalled(); + expect(collectLogLines(vi.mocked(console.error))).toContain( + "Error: --expected-request-sequence must be a non-negative integer.", + ); + }); + it("bb thread pin sends the thread id from args", async () => { const pinnedThread = fixtures.makeThread({ id: "thread-pin-1", diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index 7eb2f3084a..80a95f795a 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -387,7 +387,7 @@ export function registerActionsCommands( const requestedSequence = opts.expectedRequestSequence === undefined ? undefined - : Number.parseInt(opts.expectedRequestSequence, 10); + : Number(opts.expectedRequestSequence); if ( requestedSequence !== undefined && (!Number.isInteger(requestedSequence) || requestedSequence < 0) diff --git a/apps/host-daemon/src/app.test.ts b/apps/host-daemon/src/app.test.ts index b502c6aa07..b8cd4cf4cb 100644 --- a/apps/host-daemon/src/app.test.ts +++ b/apps/host-daemon/src/app.test.ts @@ -243,6 +243,7 @@ function createFakeRuntime(): AgentRuntime { async prepareThreadRewind() { return { providerThreadId: "provider-thread-rewind-app-test" }; }, + async discardThreadRewind() {}, async resumeThread() { return { providerThreadId: "provider-thread-app-test" }; }, diff --git a/apps/host-daemon/src/command-dispatch-support.test.ts b/apps/host-daemon/src/command-dispatch-support.test.ts index 97c515480c..2432bd0d69 100644 --- a/apps/host-daemon/src/command-dispatch-support.test.ts +++ b/apps/host-daemon/src/command-dispatch-support.test.ts @@ -51,6 +51,7 @@ function makeRuntime(args: MakeRuntimeArgs): AgentRuntime { async prepareThreadRewind() { return { providerThreadId: "provider-thread-rewind-test" }; }, + async discardThreadRewind() {}, async resumeThread() { return { providerThreadId: "provider-thread-test" }; }, diff --git a/apps/host-daemon/src/command-dispatch.test.ts b/apps/host-daemon/src/command-dispatch.test.ts index 330d86fd11..d319ec0e60 100644 --- a/apps/host-daemon/src/command-dispatch.test.ts +++ b/apps/host-daemon/src/command-dispatch.test.ts @@ -180,6 +180,7 @@ function createRuntime(): FakeDispatchRuntime { prepareThreadRewind: vi.fn(async () => ({ providerThreadId: "provider-thread-rewind-1", })), + discardThreadRewind: vi.fn(async () => undefined), resumeThread: vi.fn(async (args: { threadId: string }) => { hostedThreadIds.add(args.threadId); return { providerThreadId: "provider-thread-1" }; @@ -854,7 +855,7 @@ describe("dispatchCommand", () => { installSource: "npmGlobal", currentVersion: "0.135.0", latestVersion: null, - minimumSupportedVersion: "0.143.0", + minimumSupportedVersion: "0.136.0", npmPackageName: "@openai/codex", npmGlobalPackageVersion: "0.135.0", installAction: { @@ -986,7 +987,7 @@ describe("dispatchCommand", () => { installSource: "npmGlobal", currentVersion: "0.146.0", latestVersion: null, - minimumSupportedVersion: "0.143.0", + minimumSupportedVersion: "0.136.0", npmPackageName: "@openai/codex", npmGlobalPackageVersion: "0.146.0", installAction: null, @@ -1017,6 +1018,56 @@ describe("dispatchCommand", () => { threadId: "thread-1", }), ); + await expect( + dispatchCommand( + { ...command, operationId: "edit-op-old-codex" }, + { + dataDir: "/tmp/bb-data", + eventSink: { + emit: vi.fn(), + flush: vi.fn(async () => undefined), + }, + fetchProjectAttachment: async () => { + throw new Error("Unexpected project attachment fetch"); + }, + getProviderCliStatusForProvider: async () => ({ + ...supportedCodexStatus, + currentVersion: "0.140.0", + npmGlobalPackageVersion: "0.140.0", + }), + runtimeManager: manager, + threadStorageRootPath: "/tmp/bb-thread-storage", + }, + ), + ).rejects.toMatchObject({ code: "provider_cli_unsupported_version" }); + expect(runtime.prepareThreadRewind).toHaveBeenCalledOnce(); + + await expect( + dispatchCommand( + { + type: "thread.rewind.discard", + environmentId: "env-1", + threadId: "thread-1", + operationId: "edit-op-1", + }, + { + dataDir: "/tmp/bb-data", + eventSink: { + emit: vi.fn(), + flush: vi.fn(async () => undefined), + }, + fetchProjectAttachment: async () => { + throw new Error("Unexpected project attachment fetch"); + }, + runtimeManager: manager, + threadStorageRootPath: "/tmp/bb-thread-storage", + }, + ), + ).resolves.toEqual({}); + expect(runtime.discardThreadRewind).toHaveBeenCalledWith({ + operationId: "edit-op-1", + threadId: "thread-1", + }); }); it("invalidates the provider maintenance runtime after a successful Codex CLI update", async () => { diff --git a/apps/host-daemon/src/command-dispatch.ts b/apps/host-daemon/src/command-dispatch.ts index e11706122b..75e8db5f51 100644 --- a/apps/host-daemon/src/command-dispatch.ts +++ b/apps/host-daemon/src/command-dispatch.ts @@ -64,6 +64,7 @@ import { streamProviderCliInstall, } from "./provider-cli-health.js"; import { + discardThreadRewind, ensureThreadRuntime, prepareThreadRewind, startThread, @@ -230,6 +231,18 @@ function shouldInvalidateProviderMaintenanceRuntimeAfterProviderCliInstall(args: } const commandHandlers: CommandHandlerMap = { + "thread.rewind.discard": async (command, options) => { + const release = + await options.runtimeManager.retainEnvironmentForThreadCommand( + command.environmentId, + command.threadId, + ); + try { + return await discardThreadRewind(command, options); + } finally { + release(); + } + }, "thread.rewind.prepare": async (command, options) => { const release = await options.runtimeManager.retainEnvironmentForThreadCommand( diff --git a/apps/host-daemon/src/command-handlers/thread.ts b/apps/host-daemon/src/command-handlers/thread.ts index b8f75fd82f..233c7236ee 100644 --- a/apps/host-daemon/src/command-handlers/thread.ts +++ b/apps/host-daemon/src/command-handlers/thread.ts @@ -1,4 +1,5 @@ import fs from "node:fs/promises"; +import semver from "semver"; import type { PromptInput } from "@bb/domain"; import type { HostDaemonCommandResult } from "@bb/host-daemon-contract"; import { resolveContainedPath } from "@bb/process-utils"; @@ -47,6 +48,8 @@ interface RequireSupportedProviderCliArgs { options: CommandDispatchOptions; } +const CODEX_REWIND_MINIMUM_SUPPORTED_VERSION = "0.143.0"; + function requireConfinedPath(rootPath: string, candidatePath: string): string { const resolved = resolveContainedPath({ rootPath, @@ -100,17 +103,29 @@ async function requireSupportedProviderCliForThreadStart({ (await getProviderCliStatusForProvider("codex", { env: options.runtimeManager.getShellEnv(), })); - if (!status.versionUnsupported) { + const minimumVersion = + command.type === "thread.rewind.prepare" + ? CODEX_REWIND_MINIMUM_SUPPORTED_VERSION + : status.minimumSupportedVersion; + const versionUnsupported = + command.type === "thread.rewind.prepare" + ? status.currentVersion === null || + !semver.gte( + status.currentVersion, + CODEX_REWIND_MINIMUM_SUPPORTED_VERSION, + ) + : status.versionUnsupported; + if (!versionUnsupported) { return; } const currentVersion = status.currentVersion ? ` ${status.currentVersion}` : ""; - const minimumVersion = status.minimumSupportedVersion ?? "a newer version"; + const requiredVersion = minimumVersion ?? "a newer version"; throw new ExpectedCommandDispatchError( "provider_cli_unsupported_version", - `Codex${currentVersion} is too old for this bb version. Update Codex to ${minimumVersion} or newer.`, + `Codex${currentVersion} is too old for this operation. Update Codex to ${requiredVersion} or newer.`, ); } @@ -269,6 +284,21 @@ export async function prepareThreadRewind( }); } +export async function discardThreadRewind( + command: CommandOf<"thread.rewind.discard">, + options: CommandDispatchOptions, +): Promise<HostDaemonCommandResult<"thread.rewind.discard">> { + const entry = await options.runtimeManager.getOrAwait(command.environmentId); + if (!entry) { + return {}; + } + await entry.runtime.discardThreadRewind({ + operationId: command.operationId, + threadId: command.threadId, + }); + return {}; +} + export async function ensureThreadRuntime( command: ExistingThreadRuntimeCommand, options: CommandDispatchOptions, diff --git a/apps/host-daemon/src/provider-cli-health.ts b/apps/host-daemon/src/provider-cli-health.ts index bec928459f..b3b2a8979f 100644 --- a/apps/host-daemon/src/provider-cli-health.ts +++ b/apps/host-daemon/src/provider-cli-health.ts @@ -22,7 +22,7 @@ const NPM_VIEW_TIMEOUT_MS = 15_000; const NPM_INSTALL_STATE_TIMEOUT_MS = 5_000; const CLAUDE_CODE_INSTALL_SCRIPT_URL = "https://claude.ai/install.sh"; const CURSOR_INSTALL_SCRIPT_URL = "https://cursor.com/install"; -export const CODEX_MINIMUM_SUPPORTED_VERSION = "0.143.0"; +export const CODEX_MINIMUM_SUPPORTED_VERSION = "0.136.0"; const providerCliNodePtyLogger: HostDaemonLogger = { debug() {}, info() {}, diff --git a/apps/host-daemon/src/runtime-manager.test.ts b/apps/host-daemon/src/runtime-manager.test.ts index 1d0d5a3407..4b28ed401b 100644 --- a/apps/host-daemon/src/runtime-manager.test.ts +++ b/apps/host-daemon/src/runtime-manager.test.ts @@ -260,6 +260,7 @@ function createFakeRuntime() { prepareThreadRewind: vi.fn(async () => ({ providerThreadId: "provider-rewind-1", })), + discardThreadRewind: vi.fn(async () => undefined), resumeThread: vi.fn(async (_args: ResumeThreadArgs) => ({ providerThreadId: "provider-1", })), diff --git a/apps/host-daemon/src/terminals/terminal-manager.test.ts b/apps/host-daemon/src/terminals/terminal-manager.test.ts index 6c507e4a5f..a576e20889 100644 --- a/apps/host-daemon/src/terminals/terminal-manager.test.ts +++ b/apps/host-daemon/src/terminals/terminal-manager.test.ts @@ -215,6 +215,7 @@ function createFakeRuntime(): AgentRuntime { prepareThreadRewind: vi.fn(async () => ({ providerThreadId: "provider-thread-rewind", })), + discardThreadRewind: vi.fn(async () => undefined), resumeThread: vi.fn(async () => ({ providerThreadId: "provider-thread", })), diff --git a/apps/host-daemon/test/command/dispatch-helpers.ts b/apps/host-daemon/test/command/dispatch-helpers.ts index 3132cd67d5..72ad0fc9b9 100644 --- a/apps/host-daemon/test/command/dispatch-helpers.ts +++ b/apps/host-daemon/test/command/dispatch-helpers.ts @@ -354,6 +354,7 @@ export function createFakeRuntime() { providerThreadId: `provider-rewind-${args.threadId}-${args.operationId}`, }; }, + async discardThreadRewind() {}, async resumeThread(args) { state.resumedAcpLaunchSpec = args.acpLaunchSpec; state.resumedEnvironmentId = args.environmentId; diff --git a/apps/server/src/services/hosts/live-command.ts b/apps/server/src/services/hosts/live-command.ts index e23c24ed8f..6446eaa6e1 100644 --- a/apps/server/src/services/hosts/live-command.ts +++ b/apps/server/src/services/hosts/live-command.ts @@ -47,6 +47,7 @@ export interface StartLiveHostCommandArgs< > extends RunLiveHostCommandArgs<TType> { onError?: LiveHostCommandErrorHandler<TType>; onExpectedError?: LiveHostCommandErrorHandler<TType>; + onSettled?: () => void | Promise<void>; } type LiveHostCommandResultReportForType< @@ -267,28 +268,39 @@ export function startLiveHostCommand< ): void { const execution = args.execution ?? createLiveHostCommandExecution(args.hostId); - void runLiveHostCommand(deps, { ...args, execution }).catch((error) => { - const normalized = - error instanceof Error ? error : new Error(String(error)); - const handlerArgs: LiveHostCommandErrorHandlerArgs<TType> = { - command: args.command, - error: normalized, - execution, - hostId: args.hostId, - }; - const expectedErrorFields = - expectedLiveHostCommandErrorLogFields(normalized); - if (expectedErrorFields !== null) { - deps.logger.debug( - { - ...liveHostCommandBaseLogFields(handlerArgs), - ...expectedErrorFields, - }, - "Expected live host command failure", - ); - args.onExpectedError?.(handlerArgs); - return; - } - args.onError?.(handlerArgs); - }); + void runLiveHostCommand(deps, { ...args, execution }) + .catch((error) => { + const normalized = + error instanceof Error ? error : new Error(String(error)); + const handlerArgs: LiveHostCommandErrorHandlerArgs<TType> = { + command: args.command, + error: normalized, + execution, + hostId: args.hostId, + }; + const expectedErrorFields = + expectedLiveHostCommandErrorLogFields(normalized); + if (expectedErrorFields !== null) { + deps.logger.debug( + { + ...liveHostCommandBaseLogFields(handlerArgs), + ...expectedErrorFields, + }, + "Expected live host command failure", + ); + args.onExpectedError?.(handlerArgs); + return; + } + args.onError?.(handlerArgs); + }) + .finally(async () => { + try { + await args.onSettled?.(); + } catch (error) { + deps.logger.error( + { err: error, commandType: args.command.type }, + "Live command settled callback failed", + ); + } + }); } diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts index 95492b077a..2d5ac7cbc0 100644 --- a/apps/server/src/services/threads/thread-edit-message.ts +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -5,7 +5,6 @@ import { events, getExperiments, getHighWaterMarks, - getLastStoredProviderThreadId, getThread, listActiveBackgroundTaskCountsByThreadIds, listQueuedThreadMessages, @@ -51,7 +50,7 @@ interface EditableTurn { oldMaxSequence: number; precedingProviderCheckpoint: string | null; requestSequence: number; - sourceProviderThreadId: string; + sourceProviderThreadId: string | null; visibleInput: ReturnType<typeof parseStoredTurnRequestEvent>["input"]; } @@ -113,7 +112,13 @@ function findCommittedOperation( const EDIT_MESSAGE_PROVIDER_IDS = new Set(["claude-code", "codex", "pi"]); -function storedProviderCheckpoint(data: string): string | null { +interface StoredTurnCompletion { + providerCheckpointId: string | null; + providerThreadId: string | null; + status: string | null; +} + +function parseStoredTurnCompletion(data: string): StoredTurnCompletion | null { let parsed: unknown; try { parsed = JSON.parse(data); @@ -122,76 +127,26 @@ function storedProviderCheckpoint(data: string): string | null { } if (typeof parsed !== "object" || parsed === null) return null; const checkpoint = Reflect.get(parsed, "providerCheckpointId"); - return typeof checkpoint === "string" && checkpoint.length > 0 - ? checkpoint - : null; + const providerThreadId = Reflect.get(parsed, "providerThreadId"); + const status = Reflect.get(parsed, "status"); + return { + providerCheckpointId: + typeof checkpoint === "string" && checkpoint.length > 0 + ? checkpoint + : null, + providerThreadId: + typeof providerThreadId === "string" && providerThreadId.length > 0 + ? providerThreadId + : null, + status: typeof status === "string" ? status : null, + }; } -function resolveEditableTurn( +function resolveEditableTurnCandidate( db: DbQueryConnection, thread: Thread, - requestSequence?: number, + requestRow: Parameters<typeof parseStoredTurnRequestEvent>[0], ): EditableTurn { - if (!EDIT_MESSAGE_PROVIDER_IDS.has(thread.providerId)) { - conflict(`Editing messages is not supported for ${thread.providerId}`); - } - if (thread.archivedAt !== null || thread.deletedAt !== null) { - conflict("The thread is not writable"); - } - if (thread.status !== "idle") { - conflict("The thread must be idle before a message can be edited"); - } - const backgroundActivity = listActiveBackgroundTaskCountsByThreadIds(db, { - threadIds: [thread.id], - })[0]; - if ( - backgroundActivity && - (backgroundActivity.activeBackgroundAgentCount > 0 || - backgroundActivity.activeBackgroundCommandCount > 0 || - backgroundActivity.activeWorkflowCount > 0) - ) { - conflict("Wait for background work to finish before editing the message"); - } - const requestRow = - requestSequence === undefined - ? (db - .select({ - data: events.data, - sequence: events.sequence, - threadId: events.threadId, - type: events.type, - }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "client/turn/requested"), - sql`json_extract(${events.data}, '$.initiator') = 'user'`, - sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, - sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, - ), - ) - .orderBy(desc(events.sequence)) - .limit(1) - .get() ?? null) - : (db - .select({ - data: events.data, - sequence: events.sequence, - threadId: events.threadId, - type: events.type, - }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.sequence, requestSequence), - eq(events.type, "client/turn/requested"), - ), - ) - .limit(1) - .get() ?? null); - if (!requestRow) conflict("The thread has no editable user message"); const request = parseStoredTurnRequestEvent(requestRow); if ( request.initiator !== "user" || @@ -201,6 +156,9 @@ function resolveEditableTurn( ) { conflict("The selected request is not an editable user turn"); } + if (request.inputGroups !== undefined) { + conflict("Grouped messages cannot be edited yet"); + } const acceptedRows = db .select({ sequence: events.sequence, turnId: events.turnId }) @@ -251,8 +209,8 @@ function resolveEditableTurn( "A turn containing steers or multiple accepted messages cannot be edited", ); } - const completion = db - .select({ sequence: events.sequence }) + const completionRow = db + .select({ data: events.data }) .from(events) .where( and( @@ -263,7 +221,12 @@ function resolveEditableTurn( ) .limit(1) .get(); - if (!completion) conflict("The selected turn has not completed"); + const completion = completionRow + ? parseStoredTurnCompletion(completionRow.data) + : null; + if (completion?.status !== "completed") { + conflict("The selected turn did not complete successfully"); + } const precedingTurn = db .select({ turnId: events.turnId }) @@ -279,51 +242,123 @@ function resolveEditableTurn( .orderBy(desc(events.sequence)) .limit(1) .get(); - const sourceProviderThreadId = getLastStoredProviderThreadId(db, thread.id); - if (!sourceProviderThreadId) { - conflict("The provider session is unavailable"); - } const precedingTurnId = precedingTurn?.turnId ?? null; + const precedingCompletionRow = + precedingTurnId === null + ? null + : db + .select({ data: events.data }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "turn/completed"), + eq(events.turnId, precedingTurnId), + ), + ) + .orderBy(desc(events.sequence)) + .limit(1) + .get(); + const precedingCompletion = precedingCompletionRow + ? parseStoredTurnCompletion(precedingCompletionRow.data) + : null; + if ( + precedingTurnId !== null && + (precedingCompletion?.status !== "completed" || + precedingCompletion.providerThreadId === null) + ) { + conflict("This earlier turn has no completed provider history"); + } const precedingProviderCheckpoint = precedingTurnId === null ? null : thread.providerId === "codex" ? precedingTurnId - : (() => { - const precedingCompletion = db - .select({ data: events.data }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "turn/completed"), - eq(events.turnId, precedingTurnId), - ), - ) - .limit(1) - .get(); - const checkpoint = precedingCompletion - ? storedProviderCheckpoint(precedingCompletion.data) - : null; - if (!checkpoint) { - conflict( - "This earlier provider turn has no editable history checkpoint", - ); - } - return checkpoint; - })(); + : (precedingCompletion?.providerCheckpointId ?? null); + if (precedingTurnId !== null && precedingProviderCheckpoint === null) { + conflict("This earlier provider turn has no editable history checkpoint"); + } return { currentTurnId: accepted.turnId, oldMaxSequence: getHighWaterMarks(db, [thread.id])[thread.id] ?? 0, precedingProviderCheckpoint, requestSequence: requestRow.sequence, - sourceProviderThreadId, + sourceProviderThreadId: + precedingTurnId === null + ? null + : (precedingCompletion?.providerThreadId ?? null), visibleInput: request.input.filter( (part) => part.visibility !== "agent-only", ), }; } +function resolveEditableTurn( + db: DbQueryConnection, + thread: Thread, + requestSequence?: number, +): EditableTurn { + if (!EDIT_MESSAGE_PROVIDER_IDS.has(thread.providerId)) { + conflict(`Editing messages is not supported for ${thread.providerId}`); + } + if (thread.archivedAt !== null || thread.deletedAt !== null) { + conflict("The thread is not writable"); + } + if (thread.status !== "idle") { + conflict("The thread must be idle before a message can be edited"); + } + const backgroundActivity = listActiveBackgroundTaskCountsByThreadIds(db, { + threadIds: [thread.id], + })[0]; + if ( + backgroundActivity && + (backgroundActivity.activeBackgroundAgentCount > 0 || + backgroundActivity.activeBackgroundCommandCount > 0 || + backgroundActivity.activeWorkflowCount > 0) + ) { + conflict("Wait for background work to finish before editing the message"); + } + + const requestRows = db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "client/turn/requested"), + requestSequence === undefined + ? and( + sql`json_extract(${events.data}, '$.initiator') = 'user'`, + sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, + sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, + ) + : eq(events.sequence, requestSequence), + ), + ) + .orderBy(desc(events.sequence)) + .all(); + for (const requestRow of requestRows) { + try { + return resolveEditableTurnCandidate(db, thread, requestRow); + } catch (error) { + if ( + requestSequence !== undefined || + !(error instanceof ApiError) || + error.status !== 409 || + error.body.code !== "invalid_request" + ) { + throw error; + } + } + } + conflict("The thread has no editable user message"); +} + export function getLatestThreadMessageEdit( deps: LoggedPendingInteractionWorkSessionDeps, thread: Thread, @@ -430,6 +465,9 @@ export async function editThreadMessage( let stagedProviderThreadId: string | null = null; if (target.precedingProviderCheckpoint !== null) { + if (target.sourceProviderThreadId === null) { + conflict("This earlier turn has no provider session"); + } const startCommand = await buildThreadStartCommand(deps, { thread: args.thread, fork: null, @@ -459,81 +497,124 @@ export async function editThreadMessage( } const requestSequence = target.oldMaxSequence + 2; - await sendThreadMessage(deps, { - beforeAppendInTransaction: ({ tx }) => { - const currentThread = getThread(tx, args.thread.id); - if (!currentThread) conflict("Thread not found"); - const currentTarget = resolveEditableTurn( - tx, - currentThread, - target.requestSequence, - ); - if ( - currentTarget.requestSequence !== target.requestSequence || - currentTarget.oldMaxSequence !== target.oldMaxSequence || - currentTarget.currentTurnId !== target.currentTurnId - ) { - conflict("The thread changed while the edit was being prepared"); - } - appendThreadEventInTransaction(tx, { - threadId: args.thread.id, - environmentId: args.thread.environmentId, - type: "system/operation", - scope: threadScope(), - data: { - operation: "edit_message", - status: "completed", - message: "Message edited", - operationId: args.payload.operationId, - metadata: { - cutoffSequence: target.requestSequence, - oldMaxSequence: target.oldMaxSequence, - removedTurnId: target.currentTurnId, - replacementProviderThreadId: stagedProviderThreadId, - fingerprint, - requestSequence, + const discardStagedRewind = + stagedProviderThreadId === null + ? undefined + : async () => { + try { + await runLiveHostCommand(deps, { + command: { + type: "thread.rewind.discard", + environmentId: readyEnvironment.id, + threadId: args.thread.id, + operationId: args.payload.operationId, + }, + hostId: readyEnvironment.hostId, + timeoutMs: LIVE_DAEMON_COMMAND_TIMEOUT_MS, + }); + } catch (error) { + deps.logger.warn( + { err: error, threadId: args.thread.id }, + "Failed to discard staged message-edit rewind", + ); + } + }; + try { + await sendThreadMessage(deps, { + beforeAppendInTransaction: ({ tx }) => { + if (listQueuedThreadMessages(tx, args.thread.id).length > 0) { + conflict("Send or remove queued messages before editing a message"); + } + const currentThread = getThread(tx, args.thread.id); + if (!currentThread) conflict("Thread not found"); + const currentTarget = resolveEditableTurn( + tx, + currentThread, + target.requestSequence, + ); + if ( + currentTarget.requestSequence !== target.requestSequence || + currentTarget.oldMaxSequence !== target.oldMaxSequence || + currentTarget.currentTurnId !== target.currentTurnId + ) { + conflict("The thread changed while the edit was being prepared"); + } + appendThreadEventInTransaction(tx, { + threadId: args.thread.id, + environmentId: args.thread.environmentId, + type: "system/operation", + scope: threadScope(), + data: { + operation: "edit_message", + status: "completed", + message: "Message edited", + operationId: args.payload.operationId, + metadata: { + cutoffSequence: target.requestSequence, + oldMaxSequence: target.oldMaxSequence, + removedTurnId: target.currentTurnId, + replacementProviderThreadId: stagedProviderThreadId, + fingerprint, + requestSequence, + }, }, - }, - }); - deleteThreadEventSuffixInTransaction(tx, { - cutoffSequence: target.requestSequence, - oldMaxSequence: target.oldMaxSequence, - threadId: args.thread.id, - }); - }, - environment: args.environment, - historyReplacement: { - forkSourceProviderThreadId: stagedProviderThreadId, - requestTargetKind: - target.precedingProviderCheckpoint === null - ? "thread-start" - : "new-turn", - }, - payload: { - input: args.payload.input, - mode: "start", - ...(args.payload.model !== undefined - ? { model: args.payload.model } - : {}), - ...(args.payload.serviceTier !== undefined - ? { serviceTier: args.payload.serviceTier } - : {}), - ...(args.payload.reasoningLevel !== undefined - ? { reasoningLevel: args.payload.reasoningLevel } - : {}), - ...(args.payload.permissionMode !== undefined - ? { permissionMode: args.payload.permissionMode } - : {}), - ...(args.payload.executionInputSources !== undefined - ? { executionInputSources: args.payload.executionInputSources } - : {}), - }, - thread: args.thread, - trigger: "user", - }); - deps.hub.notifyThread(args.thread.id, ["history-rewritten"], { - projectId: args.thread.projectId, - }); + }); + deleteThreadEventSuffixInTransaction(tx, { + cutoffSequence: target.requestSequence, + oldMaxSequence: target.oldMaxSequence, + threadId: args.thread.id, + }); + }, + environment: args.environment, + historyReplacement: { + forkSourceProviderThreadId: stagedProviderThreadId, + ...(discardStagedRewind !== undefined + ? { onCommandSettled: discardStagedRewind } + : {}), + requestTargetKind: + target.precedingProviderCheckpoint === null + ? "thread-start" + : "new-turn", + }, + payload: { + input: args.payload.input, + mode: "start", + ...(args.payload.model !== undefined + ? { model: args.payload.model } + : {}), + ...(args.payload.serviceTier !== undefined + ? { serviceTier: args.payload.serviceTier } + : {}), + ...(args.payload.reasoningLevel !== undefined + ? { reasoningLevel: args.payload.reasoningLevel } + : {}), + ...(args.payload.permissionMode !== undefined + ? { permissionMode: args.payload.permissionMode } + : {}), + ...(args.payload.executionInputSources !== undefined + ? { executionInputSources: args.payload.executionInputSources } + : {}), + }, + thread: args.thread, + trigger: "user", + }); + deps.hub.notifyThread(args.thread.id, ["history-rewritten"], { + projectId: args.thread.projectId, + }); + } catch (error) { + const concurrentCommit = findCommittedOperation(deps.db, { + operationId: args.payload.operationId, + threadId: args.thread.id, + }); + if (!concurrentCommit || concurrentCommit.fingerprint !== fingerprint) { + throw error; + } + return { + ok: true, + operationId: args.payload.operationId, + requestSequence: concurrentCommit.requestSequence, + }; + } return { ok: true, operationId: args.payload.operationId, diff --git a/apps/server/src/services/threads/thread-runtime-display.ts b/apps/server/src/services/threads/thread-runtime-display.ts index 4e5532d5ab..4e7caa9ec9 100644 --- a/apps/server/src/services/threads/thread-runtime-display.ts +++ b/apps/server/src/services/threads/thread-runtime-display.ts @@ -256,6 +256,10 @@ export function toThreadResponseFromThread( }); return { ...threadWithRuntime, + activeBackgroundAgentCount: + listActiveBackgroundTaskCountsByThreadIds(deps.db, { + threadIds: [args.thread.id], + })[0]?.activeBackgroundAgentCount ?? 0, canSpawnChild: canThreadSpawnChild(deps, { thread: args.thread }), }; } diff --git a/apps/server/src/services/threads/thread-send.ts b/apps/server/src/services/threads/thread-send.ts index 8f69ddab84..eab992c803 100644 --- a/apps/server/src/services/threads/thread-send.ts +++ b/apps/server/src/services/threads/thread-send.ts @@ -78,6 +78,7 @@ export interface SendThreadMessageArgs { */ historyReplacement?: { forkSourceProviderThreadId: string | null; + onCommandSettled?: () => void | Promise<void>; requestTargetKind: "new-turn" | "thread-start"; }; payload: SendThreadMessagePayload; @@ -601,6 +602,9 @@ export async function sendThreadMessage( command: command.command, hostId: readyEnvironment.hostId, timeoutMs: LIVE_DAEMON_COMMAND_TIMEOUT_MS, + ...(args.historyReplacement?.onCommandSettled !== undefined + ? { onSettled: args.historyReplacement.onCommandSettled } + : {}), onError: ({ error }) => { deps.logger.warn( { err: error, threadId: thread.id }, diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts index 3e5e0c33b0..42a7a23cc9 100644 --- a/apps/server/test/threads/thread-edit-message.test.ts +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -11,6 +11,7 @@ import { encodeClientTurnRequestIdNumber, threadScope, turnScope, + type PromptInput, } from "@bb/domain"; import { describe, expect, it } from "vitest"; import { @@ -22,11 +23,13 @@ import { reportQueuedCommandError, reportQueuedCommandSuccess, waitForQueuedCommand, + waitForQueuedCommandAfter, } from "../helpers/commands.js"; import { seedEnvironment, seedHostSession, seedProjectWithSource, + seedQueuedMessage, seedStoredEvent, seedThread, } from "../helpers/seed.js"; @@ -37,6 +40,8 @@ function seedCompletedTurn( args: { providerThreadId: string; providerCheckpointId?: string; + completionStatus?: "completed" | "failed"; + inputGroups?: PromptInput[][]; initiator?: "agent" | "user"; requestSequence: number; senderThreadId?: string; @@ -57,7 +62,14 @@ function seedCompletedTurn( data: { direction: "outbound", requestId, - input: [{ type: "text", text: args.text, mentions: [] }], + input: args.inputGroups?.flatMap((group, index) => + index === 0 + ? group + : [{ type: "text" as const, text: "\n\n", mentions: [] }, ...group], + ) ?? [{ type: "text", text: args.text, mentions: [] }], + ...(args.inputGroups !== undefined + ? { inputGroups: args.inputGroups } + : {}), target: args.requestSequence === 2 ? { kind: "thread-start" } @@ -118,7 +130,7 @@ function seedCompletedTurn( scope: turnScope(args.turnId), data: { providerThreadId: args.providerThreadId, - status: "completed", + status: args.completionStatus ?? "completed", ...(args.providerCheckpointId !== undefined ? { providerCheckpointId: args.providerCheckpointId } : {}), @@ -131,6 +143,8 @@ function seedEditableThread( args: { editMessagesExperiment?: boolean; firstProviderCheckpoint?: string | null; + firstProviderThreadId?: string; + includeIdentity?: boolean; includeSecondTurn?: boolean; providerId?: "claude-code" | "codex" | "pi"; } = {}, @@ -158,17 +172,19 @@ function seedEditableThread( providerId: args.providerId ?? "codex", status: "idle", }); - seedStoredEvent(harness.deps, { - threadId: thread.id, - environmentId: environment.id, - providerThreadId: "provider-original", - sequence: 1, - type: "thread/identity", - scope: threadScope(), - data: {}, - }); + if (args.includeIdentity !== false) { + seedStoredEvent(harness.deps, { + threadId: thread.id, + environmentId: environment.id, + providerThreadId: "provider-original", + sequence: 1, + type: "thread/identity", + scope: threadScope(), + data: {}, + }); + } seedCompletedTurn(harness, { - providerThreadId: "provider-original", + providerThreadId: args.firstProviderThreadId ?? "provider-original", requestSequence: 2, text: "First message", threadId: thread.id, @@ -267,61 +283,71 @@ describe("editThreadMessage", () => { }); }); - it("starts a fresh Codex session when editing the first turn", async () => { - await withTestHarness(async (harness) => { - const { environment, thread } = seedEditableThread(harness, { - includeSecondTurn: false, - }); + it.each(["codex", "claude-code", "pi"] as const)( + "starts a fresh %s session when editing the first turn", + async (providerId) => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + includeIdentity: false, + includeSecondTurn: false, + providerId, + }); + const operationId = `edit-op-first-turn-${providerId}`; - await expect( - editThreadMessage(harness.deps, { - environment, - thread, - payload: { - operationId: "edit-op-first-turn", - expectedRequestSequence: 2, - input: [ - { type: "text", text: "Replacement first message", mentions: [] }, - ], - }, - }), - ).resolves.toEqual({ - ok: true, - operationId: "edit-op-first-turn", - requestSequence: 8, - }); + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId, + expectedRequestSequence: 2, + input: [ + { + type: "text", + text: "Replacement first message", + mentions: [], + }, + ], + }, + }), + ).resolves.toEqual({ + ok: true, + operationId, + requestSequence: 8, + }); - expect( - listQueuedThreadCommands(harness, "thread.rewind.prepare", thread.id), - ).toHaveLength(0); - await waitForQueuedCommand( - harness, - (queued) => - queued.command.type === "thread.start" && - queued.command.threadId === thread.id, - ); - expect( - listQueuedThreadCommands(harness, "thread.start", thread.id), - ).toEqual([expect.not.objectContaining({ fork: expect.anything() })]); - expect( - listEvents(harness.db, { threadId: thread.id }).map( - (event) => event.sequence, - ), - ).toEqual([1, 7, 8]); - expect( - listStoredProjectPromptHistoryRows(harness.db, { - projectId: thread.projectId, - limit: 10, - }).map((entry) => entry.requestSequence), - ).toEqual([8]); - expect( - listStoredThreadPromptHistoryRows(harness.db, { - threadId: thread.id, - limit: 10, - }), - ).toEqual([]); - }); - }); + expect( + listQueuedThreadCommands(harness, "thread.rewind.prepare", thread.id), + ).toHaveLength(0); + await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toEqual([expect.not.objectContaining({ fork: expect.anything() })]); + expect( + listEvents(harness.db, { threadId: thread.id }).map( + (event) => event.sequence, + ), + ).toEqual([7, 8]); + expect( + listStoredProjectPromptHistoryRows(harness.db, { + projectId: thread.projectId, + limit: 10, + }).map((entry) => entry.requestSequence), + ).toEqual([8]); + expect( + listStoredThreadPromptHistoryRows(harness.db, { + threadId: thread.id, + limit: 10, + }), + ).toEqual([]); + }); + }, + ); it("keeps history intact until the staged Codex rewind succeeds, then replaces the suffix", async () => { await withTestHarness(async (harness) => { @@ -388,7 +414,7 @@ describe("editThreadMessage", () => { expect(getThread(harness.db, thread.id)).toMatchObject({ status: "active", }); - await waitForQueuedCommand( + const replacementStart = await waitForQueuedCommand( harness, (queued) => queued.command.type === "thread.start" && @@ -402,6 +428,18 @@ describe("editThreadMessage", () => { input: [{ type: "text", text: "Replacement message", mentions: [] }], }), ]); + await reportQueuedCommandSuccess(harness, replacementStart, { + providerThreadId: "provider-replacement", + }); + const discard = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.discard", + ); + expect(discard.command).toMatchObject({ + operationId: payload.operationId, + threadId: thread.id, + }); + await reportQueuedCommandSuccess(harness, discard, {}); await expect( editThreadMessage(harness.deps, { environment, @@ -415,7 +453,7 @@ describe("editThreadMessage", () => { }); expect( listQueuedThreadCommands(harness, "thread.start", thread.id), - ).toHaveLength(1); + ).toHaveLength(0); expect( listStoredProjectPromptHistoryRows(harness.db, { projectId: thread.projectId, @@ -431,6 +469,70 @@ describe("editThreadMessage", () => { }); }); + it("returns the committed result to an overlapping retry of the same operation", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + const payload = { + operationId: "edit-op-overlapping-retry", + expectedRequestSequence: 7, + input: [ + { type: "text" as const, text: "Replacement message", mentions: [] }, + ], + }; + + const firstEdit = editThreadMessage(harness.deps, { + environment, + thread, + payload, + }); + const secondEdit = editThreadMessage(harness.deps, { + environment, + thread, + payload, + }); + const editsResult = expect( + Promise.all([firstEdit, secondEdit]), + ).resolves.toEqual([ + { + ok: true, + operationId: payload.operationId, + requestSequence: 13, + }, + { + ok: true, + operationId: payload.operationId, + requestSequence: 13, + }, + ]); + const firstRewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + const secondRewind = await waitForQueuedCommandAfter( + harness, + firstRewind.row.cursor, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + await reportQueuedCommandSuccess(harness, firstRewind, { + providerThreadId: "provider-staged-overlap", + }); + await reportQueuedCommandSuccess(harness, secondRewind, { + providerThreadId: "provider-staged-overlap", + }); + + await editsResult; + await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect( + listQueuedThreadCommands(harness, "thread.start", thread.id), + ).toHaveLength(1); + }); + }); + it.each(["claude-code", "pi"] as const)( "stages %s history through the preceding provider checkpoint", async (providerId) => { @@ -473,6 +575,134 @@ describe("editThreadMessage", () => { }, ); + it("uses the provider lineage that produced the preceding checkpoint", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + firstProviderThreadId: "provider-before-restart", + }); + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-provider-lineage", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + expect(rewind.command).toMatchObject({ + sourceProviderThreadId: "provider-before-restart", + }); + const rejectedEdit = expect(editPromise).rejects.toThrow( + "Stop after inspecting command", + ); + await reportQueuedCommandError(harness, rewind, { + errorCode: "test_complete", + errorMessage: "Stop after inspecting command", + }); + await rejectedEdit; + }); + }); + + it("falls back to the latest eligible message and rejects grouped requests", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + seedCompletedTurn(harness, { + inputGroups: [ + [{ type: "text", text: "Grouped first", mentions: [] }], + [{ type: "text", text: "Grouped second", mentions: [] }], + ], + providerCheckpointId: "checkpoint-grouped", + providerThreadId: "provider-original", + requestSequence: 12, + text: "Grouped request", + threadId: thread.id, + turnId: "turn-grouped", + }); + + expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ + expectedRequestSequence: 7, + }); + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-grouped", + expectedRequestSequence: 12, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }), + ).rejects.toThrow("Grouped messages cannot be edited yet"); + }); + }); + + it("falls back past an unsuccessful turn and rejects it explicitly", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + seedCompletedTurn(harness, { + completionStatus: "failed", + providerCheckpointId: "checkpoint-failed", + providerThreadId: "provider-original", + requestSequence: 12, + text: "Failed request", + threadId: thread.id, + turnId: "turn-failed", + }); + + expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ + expectedRequestSequence: 7, + }); + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-failed-turn", + expectedRequestSequence: 12, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }), + ).rejects.toThrow("did not complete successfully"); + }); + }); + + it("rechecks queued messages after rewind preparation", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-queue-race", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + seedQueuedMessage(harness.deps, { + content: [ + { type: "text", text: "Queued while preparing", mentions: [] }, + ], + threadId: thread.id, + }); + const rejectedEdit = expect(editPromise).rejects.toThrow( + "Send or remove queued messages before editing a message", + ); + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: "provider-staged-queue-race", + }); + await rejectedEdit; + expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(11); + }); + }); + it.each(["claude-code", "pi"] as const)( "rejects a %s rewind through legacy history without a checkpoint", async (providerId) => { diff --git a/docs/configuration.md b/docs/configuration.md index 4bd9a5c2b3..9033c56a54 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -585,10 +585,11 @@ The `toolsHub` experiment exposes Extensions for managing skills and plugins, while Automations stays in the Plugins section beside threads. The `toolsHub` gate only controls the UI. Installed skills, automation execution, plugin runtimes, CLI commands, and backend APIs keep working while it is off. -The `editMessages` experiment enables replacing any completed user message in -an idle Codex, Claude Code, or Pi thread. Opening the editor does not change -history; submission atomically replaces that message and every later turn while -keeping workspace changes. +The `editMessages` experiment enables replacing an eligible, successfully +completed root user message in an idle Codex, Claude Code, or Pi thread. +Grouped multi-message requests are not yet editable. Opening the editor does +not change history; submission atomically replaces that message and every later +turn while keeping workspace changes. ## Thread Timeline Window diff --git a/packages/agent-runtime/src/acp/adapter.ts b/packages/agent-runtime/src/acp/adapter.ts index 6d833d1262..53284ba468 100644 --- a/packages/agent-runtime/src/acp/adapter.ts +++ b/packages/agent-runtime/src/acp/adapter.ts @@ -1541,6 +1541,8 @@ export function createAcpProviderAdapter( method: "thread/stop", params: { threadId: command.providerThreadId }, }; + case "thread/discard": + return { kind: "noop", reason: "discard unsupported" }; case "thread/goal/clear": return { kind: "noop", reason: "goals unsupported" }; case "thread/name/set": diff --git a/packages/agent-runtime/src/claude-code/adapter.test.ts b/packages/agent-runtime/src/claude-code/adapter.test.ts index 9e90bbc8e3..4e2c8c2f30 100644 --- a/packages/agent-runtime/src/claude-code/adapter.test.ts +++ b/packages/agent-runtime/src/claude-code/adapter.test.ts @@ -950,6 +950,21 @@ describe("claude-code provider adapter", () => { }); }); + it("buildCommand thread/discard closes the staged bridge session", () => { + const adapter = createClaudeCodeProviderAdapter(); + expect( + adapter.buildCommandPlan({ + type: "thread/discard", + threadId: "bb-staging", + providerThreadId: "claude-staging", + }), + ).toEqual({ + kind: "request", + method: "thread/stop", + params: { threadId: "bb-staging" }, + }); + }); + it("decodeToolCallRequest preserves string request ids", () => { const adapter = createClaudeCodeProviderAdapter(); expect( @@ -2055,6 +2070,52 @@ describe("claude-code provider adapter", () => { ); }); + it("does not replace the root checkpoint with a sidechain assistant UUID", () => { + const adapter = createClaudeCodeProviderAdapter(); + adapter.translateEvent( + { + type: "assistant", + uuid: "root-assistant-message", + message: { + id: "root-message", + role: "assistant", + content: [{ type: "text", text: "Root response" }], + }, + session_id: "sess-1", + }, + { threadId: "bb-thread-1" }, + ); + adapter.translateEvent( + { + type: "assistant", + uuid: "sidechain-assistant-message", + message: { + id: "sidechain-message", + role: "assistant", + content: [{ type: "text", text: "Subagent response" }], + }, + session_id: "sess-1", + }, + { threadId: "bb-thread-1", parentToolCallId: "tool-subagent" }, + ); + + const events = adapter.translateEvent( + { + type: "result", + subtype: "success", + session_id: "sess-1", + }, + { threadId: "bb-thread-1" }, + ); + + expect(events).toContainEqual( + expect.objectContaining({ + type: "turn/completed", + providerCheckpointId: "root-assistant-message", + }), + ); + }); + it("translateEvent completes a pending turn for Claude synthetic no-response messages", () => { const adapter = createClaudeCodeProviderAdapter(); diff --git a/packages/agent-runtime/src/claude-code/adapter.ts b/packages/agent-runtime/src/claude-code/adapter.ts index 19db4d3281..04f0d1c5f9 100644 --- a/packages/agent-runtime/src/claude-code/adapter.ts +++ b/packages/agent-runtime/src/claude-code/adapter.ts @@ -1385,6 +1385,12 @@ export function createClaudeCodeProviderAdapter( threadId: command.threadId, }, }; + case "thread/discard": + return { + kind: "request", + method: "thread/stop", + params: { threadId: command.threadId }, + }; case "thread/goal/clear": return { kind: "noop", reason: "goals unsupported" }; case "thread/name/set": diff --git a/packages/agent-runtime/src/claude-code/translate-message.ts b/packages/agent-runtime/src/claude-code/translate-message.ts index be6f180117..fab2db37c2 100644 --- a/packages/agent-runtime/src/claude-code/translate-message.ts +++ b/packages/agent-runtime/src/claude-code/translate-message.ts @@ -678,7 +678,10 @@ export function translateClaudeSdkMessage( }); } const message = parsedMessage.data; - const providerCheckpointId = message.uuid; + // Sidechain assistant messages belong to subagents/tools, not the root + // conversation lineage that thread/fork can retain through. + const providerCheckpointId = + parentToolCallId === undefined ? message.uuid : undefined; // Claude sends this model transition before it begins streaming from the // fallback model. Its richer system/model_* duplicate arrives only after // the response, so emit now and deduplicate that later event. diff --git a/packages/agent-runtime/src/codex/adapter.test.ts b/packages/agent-runtime/src/codex/adapter.test.ts index d83e9281d7..4582400899 100644 --- a/packages/agent-runtime/src/codex/adapter.test.ts +++ b/packages/agent-runtime/src/codex/adapter.test.ts @@ -2256,6 +2256,21 @@ describe("codex provider adapter", () => { }); }); + it("buildCommand thread/discard archives the staged provider thread", () => { + const adapter = createCodexProviderAdapter(); + expect( + adapter.buildCommandPlan({ + type: "thread/discard", + threadId: "bb-staging", + providerThreadId: "codex-staging", + }), + ).toEqual({ + kind: "request", + method: "thread/archive", + params: { threadId: "codex-staging" }, + }); + }); + it("buildCommand thread/unarchive routes to provider thread id", () => { const adapter = createCodexProviderAdapter(); const cmd = adapter.buildCommandPlan({ diff --git a/packages/agent-runtime/src/codex/adapter.ts b/packages/agent-runtime/src/codex/adapter.ts index 4ba632049f..83411a8669 100644 --- a/packages/agent-runtime/src/codex/adapter.ts +++ b/packages/agent-runtime/src/codex/adapter.ts @@ -2028,6 +2028,15 @@ export function createCodexProviderAdapter( turnId: command.activeTurnId, }, }; + case "thread/discard": + if (!capabilities.supportsArchive) { + return { kind: "noop", reason: "archive unsupported" }; + } + return { + kind: "request", + method: "thread/archive", + params: { threadId: command.providerThreadId }, + }; case "thread/goal/clear": return { kind: "request", diff --git a/packages/agent-runtime/src/pi/adapter.test.ts b/packages/agent-runtime/src/pi/adapter.test.ts index 534a6c9c1c..5c3565678a 100644 --- a/packages/agent-runtime/src/pi/adapter.test.ts +++ b/packages/agent-runtime/src/pi/adapter.test.ts @@ -570,6 +570,21 @@ describe("pi provider adapter", () => { }); }); + it("buildCommand thread/discard maps to destructive bridge cleanup", () => { + const adapter = createPiProviderAdapter(); + expect( + adapter.buildCommandPlan({ + type: "thread/discard", + threadId: "bb-staging", + providerThreadId: "pi-staging", + }), + ).toEqual({ + kind: "request", + method: "thread/discard", + params: { threadId: "pi-staging" }, + }); + }); + it("buildCommand turn/start includes input", () => { const adapter = createPiProviderAdapter(); const cmd = adapter.buildCommandPlan({ diff --git a/packages/agent-runtime/src/pi/adapter.ts b/packages/agent-runtime/src/pi/adapter.ts index 2eec34fcf9..bfcab6779c 100644 --- a/packages/agent-runtime/src/pi/adapter.ts +++ b/packages/agent-runtime/src/pi/adapter.ts @@ -1518,6 +1518,12 @@ export function createPiProviderAdapter( threadId: command.providerThreadId, }, }; + case "thread/discard": + return { + kind: "request", + method: "thread/discard", + params: { threadId: command.providerThreadId }, + }; case "thread/goal/clear": return { kind: "noop", reason: "goals unsupported" }; case "thread/name/set": diff --git a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts index ee4d617a6e..6958733ed2 100644 --- a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts +++ b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts @@ -1,5 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { + existsSync, + mkdtempSync, + readFileSync, + rmSync, + writeFileSync, +} from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import type { AgentSessionEvent } from "@earendil-works/pi-coding-agent"; @@ -449,8 +455,9 @@ describe("pi bridge", () => { it("forks source history through a checkpoint into the deterministic file", async () => { const bridge = createBridgeJsonRpcTestHarness(handleLine); + const forkedSession = createControlledPiAgentSession(); mockCreateAgentSession.mockImplementation(async () => ({ - session: createControlledPiAgentSession(), + session: forkedSession, })); const sessionDir = mkdtempSync(join(tmpdir(), "pi-fork-test-")); @@ -547,6 +554,15 @@ describe("pi bridge", () => { }, }), ); + bridge.sendRequest(42, "thread/discard", { threadId: targetThreadId }); + await bridge.flushWork(); + forkedSession.finishAbort(); + await expect(bridge.waitForResponse(42)).resolves.toMatchObject({ + id: 42, + result: { ok: true }, + }); + expect(existsSync(targetFile)).toBe(false); + expect(readFileSync(sourceFile, "utf8")).toBe(sourceContent); } finally { bridge.restore(); rmSync(sessionDir, { recursive: true, force: true }); diff --git a/packages/agent-runtime/src/pi/bridge/bridge.ts b/packages/agent-runtime/src/pi/bridge/bridge.ts index 815475e613..e77253c3dc 100644 --- a/packages/agent-runtime/src/pi/bridge/bridge.ts +++ b/packages/agent-runtime/src/pi/bridge/bridge.ts @@ -225,6 +225,12 @@ const piCommandSchema = z.discriminatedUnion("method", [ method: z.literal("thread/compact"), params: piThreadIdParamsSchema, }), + z.object({ + method: z.literal("thread/discard"), + params: z.object({ + threadId: z.string(), + }), + }), ]); export type PiCommand = z.infer<typeof piCommandSchema>; @@ -627,6 +633,9 @@ async function handleRequest( case "thread/compact": handleThreadCompact(request.id, request.params); break; + case "thread/discard": + sendResult(request.id, await handleThreadDiscard(request.params)); + break; } } @@ -642,6 +651,10 @@ type ThreadForkParams = Extract<PiCommand, { method: "thread/fork" }>["params"]; type TurnStartParams = Extract<PiCommand, { method: "turn/start" }>["params"]; type TurnSteerParams = Extract<PiCommand, { method: "turn/steer" }>["params"]; type ThreadIdParams = Extract<PiCommand, { method: "thread/stop" }>["params"]; +type ThreadDiscardParams = Extract< + PiCommand, + { method: "thread/discard" } +>["params"]; type PiSessionParams = | ThreadStartParams | ThreadResumeParams @@ -913,6 +926,20 @@ function handleThreadCompact( sendResult(id, { threadId: params.threadId }); } +async function handleThreadDiscard( + params: ThreadDiscardParams, +): Promise<PiThreadStopResult> { + await closeThreadSession({ + message: "Pi staged thread discarded while tool call was pending", + threadId: params.threadId, + }); + rmSync( + resolvePiSessionFilePath({ env: process.env, threadId: params.threadId }), + { force: true }, + ); + return { ok: true }; +} + interface ExtractedInput { text?: string; images: ImageContent[]; diff --git a/packages/agent-runtime/src/provider-adapter.ts b/packages/agent-runtime/src/provider-adapter.ts index 863cb19402..a7d4521f5a 100644 --- a/packages/agent-runtime/src/provider-adapter.ts +++ b/packages/agent-runtime/src/provider-adapter.ts @@ -196,6 +196,11 @@ export type AdapterCommand = */ activeTurnId: string | null; } + | { + type: "thread/discard"; + threadId: string; + providerThreadId: string; + } | { type: "thread/goal/clear"; threadId: string; diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts index fbcf393fc9..e85ec2e849 100644 --- a/packages/agent-runtime/src/runtime-thread-rewind.test.ts +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -66,12 +66,26 @@ describe("prepareThreadRewind", () => { }), ]); expect(events).toEqual([]); + expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(true); await expect( runtime.prepareThreadRewind({ ...request, retainThroughProviderCheckpoint: "different-turn", }), ).rejects.toThrow("reused with different input"); + await runtime.discardThreadRewind({ + operationId: "edit-op-1", + threadId: "thread-1", + }); + expect( + commands.filter((command) => command.type === "thread/discard"), + ).toEqual([ + expect.objectContaining({ + providerThreadId: results[0]?.providerThreadId, + threadId: "thread-1:rewind:edit-op-1", + }), + ]); + expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(false); } finally { await runtime.shutdown(); } diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index fb889bd0ce..e3be72a1c9 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -91,9 +91,13 @@ function normalizeExecutionOptions(args: { } interface PreparedThreadRewind { + cleanupTimer: ReturnType<typeof setTimeout>; + processKey: string; + providerId: string; sourceProviderCheckpointId: string; providerThreadId: string; sourceProviderThreadId: string; + stagingThreadId: string; } interface PreparingThreadRewind { @@ -167,6 +171,7 @@ type ProviderProcess = RuntimeProviderProcess; const threadGoalClearResultSchema = z.object({ cleared: z.boolean() }).strict(); const THREAD_GOAL_CLEAR_EVENT_TIMEOUT_MS = 5_000; +const PREPARED_THREAD_REWIND_TTL_MS = 5 * 60_000; interface ThreadRuntimeConfig { dynamicTools?: DynamicTool[]; @@ -267,7 +272,6 @@ function createAgentRuntimeInternal( const preparedThreadRewinds = new Map<string, PreparedThreadRewind>(); const preparingThreadRewinds = new Map<string, PreparingThreadRewind>(); const suppressedThreadEventIds = new Set<string>(); - const detachedProviderThreadIds = new Set<string>(); const threadGoalState = new RuntimeThreadGoalState(); const turnState = new RuntimeTurnState(); const backgroundWorkState = new RuntimeBackgroundWorkState(); @@ -1030,7 +1034,7 @@ function createAgentRuntimeInternal( const sourceThreadId = getJsonRpcStringParam(args.parsed, "threadId"); if ( sourceThreadId !== undefined && - detachedProviderThreadIds.has(sourceThreadId) + suppressedThreadEventIds.has(sourceThreadId) ) { return; } @@ -1096,6 +1100,55 @@ function createAgentRuntimeInternal( // Public API // ------------------------------------------------------------------------- + async function discardPreparedThreadRewind(args: { + operationId: string; + threadId: string; + }): Promise<void> { + const rewindKey = `${args.threadId}\0${args.operationId}`; + const pending = preparingThreadRewinds.get(rewindKey); + if (pending !== undefined) { + try { + await pending.promise; + } catch { + return; + } + } + const prepared = preparedThreadRewinds.get(rewindKey); + if (prepared === undefined) { + return; + } + preparedThreadRewinds.delete(rewindKey); + clearTimeout(prepared.cleanupTimer); + try { + const proc = requireProviderProcess({ + processKey: prepared.processKey, + providerId: prepared.providerId, + }); + const adapterCommand: AdapterCommand = { + type: "thread/discard", + threadId: prepared.stagingThreadId, + providerThreadId: prepared.providerThreadId, + }; + const command = proc.adapter.buildCommandPlan(adapterCommand); + if (command.kind === "request") { + await sendCommand({ + proc, + message: command, + resultSchema: ignoredJsonRpcResultSchema, + }); + } + forgetThreadRuntimeState(proc, prepared.stagingThreadId); + await shutdownThreadScopedCodexProcessIfIdle(proc); + } catch (error) { + threadIdentityRegistry.clearThread(prepared.stagingThreadId); + options.onStderr?.( + `Failed to discard staged rewind ${args.operationId}: ${error instanceof Error ? error.message : String(error)}`, + ); + } finally { + suppressedThreadEventIds.delete(prepared.stagingThreadId); + } + } + const runtime: AgentRuntime = { async ensureProvider({ providerId, forThreadId, acpLaunchSpec }) { await providerProcesses.ensureProvider({ @@ -1360,6 +1413,7 @@ function createAgentRuntimeInternal( shouldWaitForProviderIdentity: true, threadId: stagingThreadId, }); + let retainedForDiscard = false; try { const envVars = buildThreadShellEnvironment({ baseShellEnv: options.shellEnv, @@ -1407,19 +1461,37 @@ function createAgentRuntimeInternal( `${providerId} did not return a provider thread for rewind operation ${operationId}`, ); } - detachedProviderThreadIds.add(providerThreadId); + recordProviderThreadIdentity( + proc, + stagingThreadId, + providerThreadId, + ); + const cleanupTimer = setTimeout(() => { + void discardPreparedThreadRewind({ + operationId, + threadId, + }); + }, PREPARED_THREAD_REWIND_TTL_MS); + cleanupTimer.unref?.(); preparedThreadRewinds.set(rewindKey, { + cleanupTimer, + processKey, + providerId, sourceProviderCheckpointId: retainThroughProviderCheckpoint, providerThreadId, sourceProviderThreadId, + stagingThreadId, }); + retainedForDiscard = true; return { providerThreadId }; } finally { - suppressedThreadEventIds.delete(stagingThreadId); - threadIdentityRegistry.forgetThread({ - providerState: proc.identity, - threadId: stagingThreadId, - }); + if (!retainedForDiscard) { + suppressedThreadEventIds.delete(stagingThreadId); + threadIdentityRegistry.forgetThread({ + providerState: proc.identity, + threadId: stagingThreadId, + }); + } } }, }); @@ -1438,6 +1510,10 @@ function createAgentRuntimeInternal( } }, + async discardThreadRewind({ threadId, operationId }) { + await discardPreparedThreadRewind({ threadId, operationId }); + }, + async resumeThread({ environmentId, threadId, @@ -1993,6 +2069,15 @@ function createAgentRuntimeInternal( }, async shutdown() { + await Promise.all( + [...preparedThreadRewinds.keys()].map((rewindKey) => { + const separatorIndex = rewindKey.indexOf("\0"); + return discardPreparedThreadRewind({ + threadId: rewindKey.slice(0, separatorIndex), + operationId: rewindKey.slice(separatorIndex + 1), + }); + }), + ); idleProviderSessionSinceMsByThreadId.clear(); pendingTurnStartThreadIds.clear(); threadOperationCounts.clear(); diff --git a/packages/agent-runtime/src/test/fake-adapter.ts b/packages/agent-runtime/src/test/fake-adapter.ts index d2ed295b3d..91e74f8833 100644 --- a/packages/agent-runtime/src/test/fake-adapter.ts +++ b/packages/agent-runtime/src/test/fake-adapter.ts @@ -163,6 +163,15 @@ function buildCommandPlan(command: AdapterCommand): ProviderCommandPlan { threadId: command.threadId, }, }; + case "thread/discard": + return { + kind: "request", + method: "thread/discard", + params: { + providerThreadId: command.providerThreadId, + threadId: command.threadId, + }, + }; case "thread/goal/clear": return { kind: "request", diff --git a/packages/agent-runtime/src/test/fake-provider-script.ts b/packages/agent-runtime/src/test/fake-provider-script.ts index adbce8b793..9871f26f4b 100644 --- a/packages/agent-runtime/src/test/fake-provider-script.ts +++ b/packages/agent-runtime/src/test/fake-provider-script.ts @@ -643,6 +643,15 @@ function handleMessage(message: JsonRecord): void { return; } + if (method === "thread/discard") { + send({ + jsonrpc: "2.0", + id: getJsonRpcId(message.id) ?? 0, + result: { ok: true }, + }); + return; + } + if (method === "thread/goal/clear") { const params = getParams(message); const providerThreadId = getString( diff --git a/packages/agent-runtime/src/test/runtime-test-harness.ts b/packages/agent-runtime/src/test/runtime-test-harness.ts index b83df193d8..54c8c52c38 100644 --- a/packages/agent-runtime/src/test/runtime-test-harness.ts +++ b/packages/agent-runtime/src/test/runtime-test-harness.ts @@ -254,6 +254,7 @@ export function createWarningEventAdapter(scriptPath: string): ProviderAdapter { case "skills/configure": case "turn/steer": case "thread/stop": + case "thread/discard": case "thread/goal/clear": case "thread/name/set": case "thread/archive": @@ -361,6 +362,7 @@ export function createStartedEventAdapter(scriptPath: string): ProviderAdapter { case "turn/start": case "turn/steer": case "thread/stop": + case "thread/discard": case "thread/goal/clear": case "thread/name/set": case "thread/archive": diff --git a/packages/agent-runtime/src/types.ts b/packages/agent-runtime/src/types.ts index 3981a478e5..2f50548719 100644 --- a/packages/agent-runtime/src/types.ts +++ b/packages/agent-runtime/src/types.ts @@ -192,6 +192,11 @@ export interface PrepareThreadRewindResult { providerThreadId: string; } +export interface DiscardThreadRewindArgs { + operationId: string; + threadId: string; +} + export interface ResumeThreadArgs { acpLaunchSpec?: HostDaemonAcpLaunchSpec; environmentId: string; @@ -305,6 +310,8 @@ export interface AgentRuntime { args: PrepareThreadRewindArgs, ): Promise<PrepareThreadRewindResult>; + discardThreadRewind(args: DiscardThreadRewindArgs): Promise<void>; + resumeThread(args: ResumeThreadArgs): Promise<ResumeThreadResult>; runTurn(args: RunTurnArgs): Promise<void>; diff --git a/packages/db/src/data/queued-thread-messages.ts b/packages/db/src/data/queued-thread-messages.ts index 13598a940c..8bf31bbc89 100644 --- a/packages/db/src/data/queued-thread-messages.ts +++ b/packages/db/src/data/queued-thread-messages.ts @@ -562,7 +562,10 @@ export function getQueuedThreadMessage(db: DbConnection, id: string) { ); } -export function listQueuedThreadMessages(db: DbConnection, threadId: string) { +export function listQueuedThreadMessages( + db: DbQueryConnection, + threadId: string, +) { return listUnclaimedQueuedThreadMessages(db, threadId); } diff --git a/packages/host-daemon-contract/src/commands.ts b/packages/host-daemon-contract/src/commands.ts index 02a7b7bc02..c07eb6d327 100644 --- a/packages/host-daemon-contract/src/commands.ts +++ b/packages/host-daemon-contract/src/commands.ts @@ -36,7 +36,7 @@ import { providerCliStatusResponseSchema, } from "./local.js"; -export const HOST_DAEMON_PROTOCOL_VERSION = 100 as const; +export const HOST_DAEMON_PROTOCOL_VERSION = 101 as const; export { BRANCH_LIST_LIMIT_MAX, @@ -335,6 +335,13 @@ export const threadRewindPrepareCommandSchema = hostDaemonThreadTargetSchema }) .strict(); +export const threadRewindDiscardCommandSchema = hostDaemonThreadTargetSchema + .extend({ + type: z.literal("thread.rewind.discard"), + operationId: z.string().min(1), + }) + .strict(); + export const turnSubmitTargetSchema = z.discriminatedUnion("mode", [ z.object({ mode: z.literal("start"), @@ -1570,6 +1577,15 @@ function defineHostDaemonCommandDescriptor< } export const hostDaemonCommandRegistry = { + "thread.rewind.discard": defineHostDaemonCommandDescriptor({ + type: "thread.rewind.discard", + schema: threadRewindDiscardCommandSchema, + resultSchema: emptyCommandResultSchema, + transport: "settled", + retryable: false, + flushEventsBeforeResult: true, + envLane: "read", + }), "thread.rewind.prepare": defineHostDaemonCommandDescriptor({ type: "thread.rewind.prepare", schema: threadRewindPrepareCommandSchema, diff --git a/packages/host-daemon-contract/src/session.ts b/packages/host-daemon-contract/src/session.ts index d96d2cef17..96ec7713a3 100644 --- a/packages/host-daemon-contract/src/session.ts +++ b/packages/host-daemon-contract/src/session.ts @@ -440,6 +440,7 @@ const hostDaemonOnlineRpcResponseSuccessSchema = z.discriminatedUnion( onlineRpcResponseSuccessSchemaFor("workspace.diffFiles"), onlineRpcResponseSuccessSchemaFor("workspace.diffPatch"), onlineRpcResponseSuccessSchemaFor("workspace.pull_request"), + commandRpcResponseSuccessSchemaFor("thread.rewind.discard"), commandRpcResponseSuccessSchemaFor("thread.rewind.prepare"), commandRpcResponseSuccessSchemaFor("thread.start"), commandRpcResponseSuccessSchemaFor("turn.submit"), diff --git a/packages/host-daemon-contract/test/contract.test.ts b/packages/host-daemon-contract/test/contract.test.ts index 67716d2efb..265716888c 100644 --- a/packages/host-daemon-contract/test/contract.test.ts +++ b/packages/host-daemon-contract/test/contract.test.ts @@ -484,6 +484,7 @@ const ONLINE_RPC_RESPONSE_RESULT_FIXTURES: OnlineRpcResponseResultFixtures = { }; const SETTLED_RESPONSE_RESULT_FIXTURES: SettledResponseResultFixtures = { + "thread.rewind.discard": {}, "thread.rewind.prepare": { providerThreadId: "provider-thread-rewind", }, @@ -1054,12 +1055,10 @@ describe("host-daemon local schemas", () => { }); describe("host-daemon command schemas", () => { - // Version 100 makes Codex inference timeoutMs an end-to-end daemon deadline - // and classifies streamed service-unavailable failures for bounded retries. - // An older daemon can outlive the server's wait or hide a retryable failure, - // so it must update before connecting. - it("uses protocol version 100 for Codex inference deadlines", () => { - expect(HOST_DAEMON_PROTOCOL_VERSION).toBe(100); + // Version 101 builds on Codex inference deadlines in version 100 with + // provider-native history checkpointing and staged rewind cleanup. + it("uses protocol version 101 for staged thread rewind cleanup", () => { + expect(HOST_DAEMON_PROTOCOL_VERSION).toBe(101); }); it("binds Plan cancellation to a required turn id and typed result", () => { diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index be55762ea2..f1c9f1d96c 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -2889,8 +2889,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional<z$1.ZodString>; sizeBytes: z$1.ZodNumber; @@ -3386,6 +3386,12 @@ interface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.Zo envLane: HostDaemonCommandEnvironmentLane | null; } declare const hostDaemonCommandRegistry: { + "thread.rewind.discard": HostDaemonCommandDescriptor<"thread.rewind.discard", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.rewind.discard">; + operationId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; "thread.rewind.prepare": HostDaemonCommandDescriptor<"thread.rewind.prepare", z$1.ZodObject<{ environmentId: z$1.ZodString; threadId: z$1.ZodString; @@ -3577,8 +3583,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - append: "append"; replace: "replace"; + append: "append"; }>; type: z$1.ZodLiteral<"thread.rewind.prepare">; operationId: z$1.ZodString; @@ -8746,10 +8752,10 @@ declare const editMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -9490,6 +9496,7 @@ declare const threadResponseSchema: z$1.ZodObject<{ }>; hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>; }, z$1.core.$strip>; + activeBackgroundAgentCount: z$1.ZodNumber; canSpawnChild: z$1.ZodBoolean; }, z$1.core.$strip>; type ThreadResponse = z$1.infer<typeof threadResponseSchema>; @@ -9545,6 +9552,7 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ }>; hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>; }, z$1.core.$strip>; + activeBackgroundAgentCount: z$1.ZodNumber; canSpawnChild: z$1.ZodBoolean; environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{ id: z$1.ZodString; diff --git a/packages/plugin-sdk/src/testing/fixtures.ts b/packages/plugin-sdk/src/testing/fixtures.ts index 4b92545931..6caee8e2e0 100644 --- a/packages/plugin-sdk/src/testing/fixtures.ts +++ b/packages/plugin-sdk/src/testing/fixtures.ts @@ -34,6 +34,7 @@ export function makeThreadResponse( createdAt: 0, updatedAt: 0, runtime: { displayStatus: "idle", hostReconnectGraceExpiresAt: null }, + activeBackgroundAgentCount: 0, canSpawnChild: true, ...overrides, }; diff --git a/packages/server-contract/src/api/threads.ts b/packages/server-contract/src/api/threads.ts index 69827eaef1..4794361bc0 100644 --- a/packages/server-contract/src/api/threads.ts +++ b/packages/server-contract/src/api/threads.ts @@ -415,6 +415,7 @@ export type ThreadSearchResponse = z.infer<typeof threadSearchResponseSchema>; // be created under it. Computed on the server so clients never recompute the // depth cap. export const threadResponseSchema = threadWithRuntimeSchema.extend({ + activeBackgroundAgentCount: z.number().int().nonnegative(), canSpawnChild: z.boolean(), }); export type ThreadResponse = z.infer<typeof threadResponseSchema>; diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index 6c8e1df0ac..c28e7bee73 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n in_progress: \"in_progress\";\n completed: \"completed\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n utf8: \"utf8\";\n base64: \"base64\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n in_progress: \"in_progress\";\n completed: \"completed\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault<z.ZodArray<z.ZodObject<{\n start: z.ZodNumber;\n end: z.ZodNumber;\n resource: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional<z.ZodString>;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable<z.ZodString>;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional<z.ZodString>;\n sizeBytes: z.ZodOptional<z.ZodNumber>;\n mimeType: z.ZodOptional<z.ZodString>;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer<typeof promptInputSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional<z.ZodString>;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable<z.ZodString>;\n branch: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"existing\">;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer<typeof createThreadEnvironmentArgsSchema>;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer<typeof createExecutionInputSourcesSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType<ThreadChatProps>;\ndeclare const Markdown: react.ComponentType<MarkdownProps>;\ndeclare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;\ndeclare const useRpc: <Contract extends PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract<StandardSchemaV1<unknown, unknown>, StandardSchemaV1<unknown, unknown>>>>>() => PluginRpcClient<Contract>;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/packages/templates/src/generated/templates.generated.ts b/packages/templates/src/generated/templates.generated.ts index 4eed9302d8..48b8c44350 100644 --- a/packages/templates/src/generated/templates.generated.ts +++ b/packages/templates/src/generated/templates.generated.ts @@ -39,7 +39,7 @@ export const templateDefinitions = [ }, { "id": "bbGuideCustomization", - "body": "Customization commands\n\nTheming — the app-wide color palette\n\n`bb theme` controls a set of CSS-variable overrides, persisted server-side and\napplied live to every open window. This is the palette only; light/dark mode is a\nseparate per-client setting the palette layers on top of. Custom themes live on\ndisk, one folder per theme, at <bb-data-dir>/theme/<name>/theme.css (the packaged\napp uses ~/.bb/theme/…). The folder name is the theme id.\n\n bb theme list Built-in and custom themes; shows the active one\n bb theme dir Print the custom-theme directory (where to author)\n bb theme set <id> [--favicon-color <color>]\n Activate a theme, preserving the favicon color\n unless the flag supplies the complete selection\n bb theme show [--css] Print the active palette; --css dumps the CSS\n bb theme reset Back to the default theme; preserve favicon color\n bb theme favicon set <color> Set favicon color; preserve the active theme\n bb theme favicon reset Reset favicon color; preserve the active theme\n\nTo author a custom theme, run `bb theme dir`, write <that-dir>/<name>/theme.css,\nthen `bb theme set <name>`. The full design-token reference is in the bb-cli\nskill (references/theming.md).\n\nFavicon colors are `default`, `red`, `orange`, `yellow`, `green`, `teal`,\n`blue`, `purple`, and `pink`. Theme and favicon-only commands carry the other\nappearance value forward explicitly.\n\nAdd --json to any theme command for machine-readable output.\n\nPackaged launcher settings\n\n`bb-app config` and `bb-app env` reload runtime settings in a running server,\nbut the CLI identifies server and launcher settings that are startup-only,\nincluding binding/ports, data and the dev-app port, telemetry, inherited skill\nroots, and `BB_FF_*` flags. `BB_LOG_LEVEL` is also startup-only. Use\n`bb-app config`, not `bb-app env`, to change `BB_APP_URL`, `BB_INFERENCE`,\n`BB_INFERENCE_FALLBACK`, or `BB_TRANSCRIPTION` live. After a startup-only\nchange, run `bb-app stop && bb-app start` or restart the desktop app. Until\nthen, changing or unsetting `BB_SERVER_BIND_HOST` does not close a previous\n`0.0.0.0` listener.\n\nServer helper completions use `BB_INFERENCE` first, then\n`BB_INFERENCE_FALLBACK` after a transient timeout, rate limit, or\nservice-unavailable failure. Their defaults are `codex/gpt-5.6-luna` and\n`codex/gpt-5.4-mini`, respectively.\n\n bb-app config set BB_INFERENCE <provider/model>\n bb-app config set BB_INFERENCE_FALLBACK <provider/model>\n\nServer-backed General settings\n\nSettings → General includes app-wide preferences stored server-side so every\nwindow and restart sees the same value. On macOS, the Caffeinate toggle asks the\nprimary host daemon to run `/usr/bin/caffeinate -i -w <daemon-pid>`, preventing\nsystem idle sleep while bb is running; turning it off stops that process. It\nonly blocks idle sleep: closing a laptop lid or choosing Sleep manually still\nsleeps the Mac. This setting is only shown when the connected primary host\ndaemon reports macOS.\n\nSettings → Keyboard also includes `showKeyboardHints`, which defaults to true.\nTurn it off to hide the delayed shortcut badges shown while holding Command or\nControl on macOS, or Control on Windows/Linux. Shortcut commands continue to\nwork.\n\nSettings → General includes `showUnhandledProviderEvents`, which defaults to\nfalse in packaged builds. Turn it on to show raw provider events bb does not yet\nunderstand; development builds always show these diagnostic rows.\n\nSettings → General also includes `steerActiveThreadOnEnter`, which defaults to\nfalse. Outside an open typeahead menu, enabling it makes Enter steer a running\nthread and Command+Enter queue a follow-up; when disabled, those actions are\nreversed. Shift+Enter inserts a newline, and unmodified Enter inserts a newline\nin zen mode. On coarse-pointer touch devices, the software-keyboard Return path\ninserts a newline. iPadOS WebKit preserves these Enter shortcuts for a connected\nMagic Keyboard.\n\n bb settings show\n bb settings general <key> <true|false>\n bb settings replay-onboarding\n bb settings experiment <key> <value>\n bb settings usage [--machine <id-or-name>]\n bb settings version [--force]\n bb settings reload\n\n`bb settings replay-onboarding` enables the `newOnboarding` experiment and\nclears `onboardingCompletedAt`. The first-run setup guide then shows again on\nthe next app load. The same button lives in Settings → General → Setup guide\nwhile the experiment is on.\n\nThe `newOnboarding` experiment exposes the first-run agent and project setup\nguide.\nThe `toolsHub` experiment exposes Extensions for managing skills and plugins.\nAutomations stays in the Plugins section beside threads. It does not enable or\ndisable installed skills, automation execution, plugin runtimes, CLI commands,\nor backend APIs.\n\nThread timeline windows are bounded by event count as well as user-message\ncount (`BB_FF_TIMELINE_WINDOW_EVENT_BUDGET`, default 1500), so a long thread\nstops reprojecting its whole history — and blocking the server event loop — on\nevery update. A turn still running is cut at the budget too, so a very long\nturn costs the budget per update instead of growing without limit. Older\nactivity loads automatically as you scroll toward the top.\n\nServer-backed keyboard shortcuts\n\nSettings → Keyboard records per-command shortcut overrides. They are persisted\nserver-side, applied live to every connected window, and survive restarts.\nReset removes an override and returns to bb's current default; Clear explicitly\ndisables a command. `Mod` means Command on macOS and Control on Windows/Linux.\nBindings for non-native actions apply in browser and desktop clients. Command\ncontexts and native-only availability remain server-owned, and desktop menu\naccelerators for New Thread, New Window, New Tab, Close, and Settings use the\nsame resolved bindings. The complete default table is in docs/configuration.md.\n\n bb settings keyboard list\n bb settings keyboard hints <true|false>\n bb settings keyboard set <command> <shortcut|disabled>\n bb settings keyboard reset [command]\n\nHost files and voice transcription\n\n bb file read|write|list|paths|mkdir|move|remove ...\n bb voice transcribe <audio-file> [--prompt <context>]\n\nVoice transcription uses the `BB_TRANSCRIPTION` model, which defaults to\n`codex/gpt-transcribe`. Override it with\n`bb-app config set BB_TRANSCRIPTION <provider/model>`.\n\n`bb file` supports `--host` for remote machines and `--root` on mutating\ncommands to confine access beneath an absolute directory. Use `--json` for\nmetadata and machine-readable results.\n\nClient-local UI preferences\n\nSome Settings values live only in the current browser/client. The Voice Input\nmicrophone picker stores the selected browser MediaDevices device id in\nlocalStorage as `bb.voiceInput.audioInputDeviceId`; it does not have a `bb`\ncommand and does not change the server-side transcription model.", + "body": "Customization commands\n\nTheming — the app-wide color palette\n\n`bb theme` controls a set of CSS-variable overrides, persisted server-side and\napplied live to every open window. This is the palette only; light/dark mode is a\nseparate per-client setting the palette layers on top of. Custom themes live on\ndisk, one folder per theme, at <bb-data-dir>/theme/<name>/theme.css (the packaged\napp uses ~/.bb/theme/…). The folder name is the theme id.\n\n bb theme list Built-in and custom themes; shows the active one\n bb theme dir Print the custom-theme directory (where to author)\n bb theme set <id> [--favicon-color <color>]\n Activate a theme, preserving the favicon color\n unless the flag supplies the complete selection\n bb theme show [--css] Print the active palette; --css dumps the CSS\n bb theme reset Back to the default theme; preserve favicon color\n bb theme favicon set <color> Set favicon color; preserve the active theme\n bb theme favicon reset Reset favicon color; preserve the active theme\n\nTo author a custom theme, run `bb theme dir`, write <that-dir>/<name>/theme.css,\nthen `bb theme set <name>`. The full design-token reference is in the bb-cli\nskill (references/theming.md).\n\nFavicon colors are `default`, `red`, `orange`, `yellow`, `green`, `teal`,\n`blue`, `purple`, and `pink`. Theme and favicon-only commands carry the other\nappearance value forward explicitly.\n\nAdd --json to any theme command for machine-readable output.\n\nPackaged launcher settings\n\n`bb-app config` and `bb-app env` reload runtime settings in a running server,\nbut the CLI identifies server and launcher settings that are startup-only,\nincluding binding/ports, data and the dev-app port, telemetry, inherited skill\nroots, and `BB_FF_*` flags. `BB_LOG_LEVEL` is also startup-only. Use\n`bb-app config`, not `bb-app env`, to change `BB_APP_URL`, `BB_INFERENCE`,\n`BB_INFERENCE_FALLBACK`, or `BB_TRANSCRIPTION` live. After a startup-only\nchange, run `bb-app stop && bb-app start` or restart the desktop app. Until\nthen, changing or unsetting `BB_SERVER_BIND_HOST` does not close a previous\n`0.0.0.0` listener.\n\nServer helper completions use `BB_INFERENCE` first, then\n`BB_INFERENCE_FALLBACK` after a transient timeout, rate limit, or\nservice-unavailable failure. Their defaults are `codex/gpt-5.6-luna` and\n`codex/gpt-5.4-mini`, respectively.\n\n bb-app config set BB_INFERENCE <provider/model>\n bb-app config set BB_INFERENCE_FALLBACK <provider/model>\n\nServer-backed General settings\n\nSettings → General includes app-wide preferences stored server-side so every\nwindow and restart sees the same value. On macOS, the Caffeinate toggle asks the\nprimary host daemon to run `/usr/bin/caffeinate -i -w <daemon-pid>`, preventing\nsystem idle sleep while bb is running; turning it off stops that process. It\nonly blocks idle sleep: closing a laptop lid or choosing Sleep manually still\nsleeps the Mac. This setting is only shown when the connected primary host\ndaemon reports macOS.\n\nSettings → Keyboard also includes `showKeyboardHints`, which defaults to true.\nTurn it off to hide the delayed shortcut badges shown while holding Command or\nControl on macOS, or Control on Windows/Linux. Shortcut commands continue to\nwork.\n\nSettings → General includes `showUnhandledProviderEvents`, which defaults to\nfalse in packaged builds. Turn it on to show raw provider events bb does not yet\nunderstand; development builds always show these diagnostic rows.\n\nSettings → General also includes `steerActiveThreadOnEnter`, which defaults to\nfalse. Outside an open typeahead menu, enabling it makes Enter steer a running\nthread and Command+Enter queue a follow-up; when disabled, those actions are\nreversed. Shift+Enter inserts a newline, and unmodified Enter inserts a newline\nin zen mode. On coarse-pointer touch devices, the software-keyboard Return path\ninserts a newline. iPadOS WebKit preserves these Enter shortcuts for a connected\nMagic Keyboard.\n\n bb settings show\n bb settings general <key> <true|false>\n bb settings replay-onboarding\n bb settings experiment <key> <value>\n bb settings usage [--machine <id-or-name>]\n bb settings version [--force]\n bb settings reload\n\n`bb settings replay-onboarding` enables the `newOnboarding` experiment and\nclears `onboardingCompletedAt`. The first-run setup guide then shows again on\nthe next app load. The same button lives in Settings → General → Setup guide\nwhile the experiment is on.\n\nThe `newOnboarding` experiment exposes the first-run agent and project setup\nguide.\nThe `toolsHub` experiment exposes Extensions for managing skills and plugins.\nAutomations stays in the Plugins section beside threads. It does not enable or\ndisable installed skills, automation execution, plugin runtimes, CLI commands,\nor backend APIs.\nThe `editMessages` experiment enables editing eligible, successfully completed\nroot user messages in idle Codex, Claude Code, and Pi threads. Opening the\neditor is client-local; submitting replaces the selected turn and all later\nconversation history while retaining workspace side effects. Grouped\nmulti-message requests are not yet editable.\n\nThread timeline windows are bounded by event count as well as user-message\ncount (`BB_FF_TIMELINE_WINDOW_EVENT_BUDGET`, default 1500), so a long thread\nstops reprojecting its whole history — and blocking the server event loop — on\nevery update. A turn still running is cut at the budget too, so a very long\nturn costs the budget per update instead of growing without limit. Older\nactivity loads automatically as you scroll toward the top.\n\nServer-backed keyboard shortcuts\n\nSettings → Keyboard records per-command shortcut overrides. They are persisted\nserver-side, applied live to every connected window, and survive restarts.\nReset removes an override and returns to bb's current default; Clear explicitly\ndisables a command. `Mod` means Command on macOS and Control on Windows/Linux.\nBindings for non-native actions apply in browser and desktop clients. Command\ncontexts and native-only availability remain server-owned, and desktop menu\naccelerators for New Thread, New Window, New Tab, Close, and Settings use the\nsame resolved bindings. The complete default table is in docs/configuration.md.\n\n bb settings keyboard list\n bb settings keyboard hints <true|false>\n bb settings keyboard set <command> <shortcut|disabled>\n bb settings keyboard reset [command]\n\nHost files and voice transcription\n\n bb file read|write|list|paths|mkdir|move|remove ...\n bb voice transcribe <audio-file> [--prompt <context>]\n\nVoice transcription uses the `BB_TRANSCRIPTION` model, which defaults to\n`codex/gpt-transcribe`. Override it with\n`bb-app config set BB_TRANSCRIPTION <provider/model>`.\n\n`bb file` supports `--host` for remote machines and `--root` on mutating\ncommands to confine access beneath an absolute directory. Use `--json` for\nmetadata and machine-readable results.\n\nClient-local UI preferences\n\nSome Settings values live only in the current browser/client. The Voice Input\nmicrophone picker stores the selected browser MediaDevices device id in\nlocalStorage as `bb.voiceInput.audioInputDeviceId`; it does not have a `bb`\ncommand and does not change the server-side transcription model.", "fileName": "bb-guide-customization.md", "kind": "instruction", "title": "bb Guide — Customization", diff --git a/packages/templates/src/templates/bb-guide-customization.md b/packages/templates/src/templates/bb-guide-customization.md index 5486f154c1..6beb67494a 100644 --- a/packages/templates/src/templates/bb-guide-customization.md +++ b/packages/templates/src/templates/bb-guide-customization.md @@ -101,6 +101,11 @@ The `toolsHub` experiment exposes Extensions for managing skills and plugins. Automations stays in the Plugins section beside threads. It does not enable or disable installed skills, automation execution, plugin runtimes, CLI commands, or backend APIs. +The `editMessages` experiment enables editing eligible, successfully completed +root user messages in idle Codex, Claude Code, and Pi threads. Opening the +editor is client-local; submitting replaces the selected turn and all later +conversation history while retaining workspace side effects. Grouped +multi-message requests are not yet editable. Thread timeline windows are bounded by event count as well as user-message count (`BB_FF_TIMELINE_WINDOW_EVENT_BUDGET`, default 1500), so a long thread diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md index 4193c84c7f..6b3fd90159 100644 --- a/plans/issue-1114-edit-sent-message.md +++ b/plans/issue-1114-edit-sent-message.md @@ -19,11 +19,13 @@ Status (2026-08-10): the functional prototype is implemented behind the default-off `editMessages` experiment. It includes arbitrary-message timeline actions, the shared inline editor, provider checkpoints for Codex, Claude Code, and Pi, atomic event-suffix replacement, realtime invalidation, SDK and CLI -surfaces, and generated database migration `0088_acoustic_celestials.sql`. +surfaces, staged-provider cleanup, and generated daemon-contract artifacts. The +experiment uses the existing keyed +`system_experiments` table, so no schema migration is required. -The remaining work is validation: focused automated tests, full typecheck and -lint, and real-provider smoke tests proving that each replacement turn cannot -see the removed suffix. +Focused and package-wide automated validation is complete. The remaining work +before broadening the experiment is real-provider smoke testing proving that +each replacement turn cannot see the removed suffix. ## Product Contract @@ -34,7 +36,7 @@ When `editMessages` is enabled: inline editor. All later messages remain visible until submission succeeds. - The editor reuses the queued-message editor frame and follow-up composer, labels the action **Submit edit**, uses the short header **Editing message**, - and selects all text when it opens. + and focuses the editor when it opens. - Cancel is client-local and confirms only when it would discard changes. - Submit atomically replaces the selected request and every later conversation event, then starts the edited turn. @@ -49,6 +51,7 @@ This version does not provide: - editing while a root turn, workflow, background agent, or background command is active; - editing turns containing a steer or multiple accepted requests; +- editing one message inside a grouped multi-message request; - ACP, OpenCode, or other provider support; - filesystem or external-side-effect rollback; - a generic history-truncation or plugin API. @@ -56,8 +59,8 @@ This version does not provide: ## Experiment `editMessages` is a required server-backed experiment field with a default of -`false`. It is persisted in `system_experiments.edit_messages` and is exposed -through: +`false`. It is persisted as the `editMessages` key in the existing +`system_experiments` key/value table and is exposed through: - Settings → Experiments → **Edit messages**; - `bb settings experiment editMessages <true|false>`; @@ -77,7 +80,7 @@ Selecting **Edit message**: 2. Creates a separate in-memory edit session from the timeline row's visible `PromptInput[]` and request event sequence. 3. Leaves the ordinary persisted follow-up draft mounted and unchanged. -4. Replaces the selected bubble with the inline editor and selects its text. +4. Replaces the selected bubble with the inline editor and focuses it. 5. Keeps the selected turn's response and the entire later timeline visible. Remote image inputs that cannot be faithfully restored remain ineligible. @@ -110,7 +113,9 @@ The server is authoritative. A selected request is editable only when: - the provider is `codex`, `claude-code`, or `pi`; - the request is user-initiated and targets a root thread start or root turn; - exactly one `turn/input/accepted` event links the request to its root turn; -- that root turn completed and contains no accepted steer or additional input; +- that root turn completed successfully and contains no accepted steer or + additional input; +- the request is not a grouped multi-message request; - there is no queued message, pending interaction, workflow, background agent, or background command; - the replacement provider history can be staged through the root turn @@ -126,11 +131,11 @@ Editing an earlier message needs a provider-native transcript boundary for the turn immediately before it. bb stores that opaque boundary on `turn/completed.providerCheckpointId`: -| Provider | Persisted checkpoint | Rewind implementation | -| ----------- | --------------------------------- | ----------------------------------------------- | -| Codex | bb root turn id | `thread/fork.lastTurnId` | -| Claude Code | latest `SDKAssistantMessage.uuid` | `forkSession(..., { upToMessageId })` | -| Pi | session manager leaf entry id | `SessionManager.createBranchedSession(entryId)` | +| Provider | Persisted checkpoint | Rewind implementation | +| ----------- | -------------------------------------- | ----------------------------------------------- | +| Codex | bb root turn id | `thread/fork.lastTurnId` | +| Claude Code | latest root `SDKAssistantMessage.uuid` | `forkSession(..., { upToMessageId })` | +| Pi | session manager leaf entry id | `SessionManager.createBranchedSession(entryId)` | Editing the first root turn needs no retained checkpoint and starts a fresh provider session. For an existing Claude Code or Pi thread created before @@ -149,9 +154,12 @@ The server sends only opaque provider checkpoints across the daemon boundary: } ``` -The runtime stages a detached provider fork and returns its provider thread id. -The source provider session remains untouched until the database commit. This -wire change requires `HOST_DAEMON_PROTOCOL_VERSION = 79`. +The runtime stages an event-suppressed provider fork and returns its provider +thread id. After the replacement fork settles, bb closes/removes the staged +Claude Code or Pi session and archives the staged Codex fork; a daemon-side TTL +cleans up abandoned preparations. The source provider session remains untouched +until the database commit. The prepare/discard wire contract requires +`HOST_DAEMON_PROTOCOL_VERSION = 97`. ## API, SDK, And CLI @@ -223,7 +231,7 @@ Automated coverage must prove: - the experiment defaults off, persists, renders in Settings, and gates both UI and server; - actions appear on every eligible accepted user request, not only the latest; -- opening/cancelling is non-destructive and selects the complete editor text; +- opening/cancelling is non-destructive and focuses the editor; - submitting an earlier request removes its turn and every later turn; - suffix deletion also clears search, prompt-history, and dynamic-context state while preserving monotonic sequences; From 219e4d2e2778c4749bb0dce8f6dd85dc19a1702b Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Mon, 10 Aug 2026 17:07:49 -0700 Subject: [PATCH 3/9] Harden sent-message edit lifecycle --- .../promptbox/FollowUpPromptBox.tsx | 29 ++- .../ConversationMessageContent.test.tsx | 12 +- .../GeneratedConversationMessage.stories.tsx | 1 + .../thread/timeline/StreamingRows.stories.tsx | 6 +- .../ThreadTimelineRows.actions.test.tsx | 29 ++- .../thread/timeline/ThreadTimelineRows.tsx | 1 + .../timeline/UserMessageMarkdown.stories.tsx | 1 + .../timeline/rows/UnreadDivider.stories.tsx | 2 +- .../timeline/rows/UserMessage.stories.tsx | 13 +- .../timeline/timeline-auto-expand.test.ts | 4 +- .../useThreadTimelineController.test.tsx | 2 +- .../toc/ThreadTableOfContents.stories.tsx | 1 + .../thread/toc/ThreadTableOfContents.test.tsx | 1 + .../thread-runtime-cache-owner.ts | 1 + .../src/test/fixtures/thread-timeline-rows.ts | 6 +- .../ThreadDetailPromptArea.test.tsx | 4 +- .../thread-detail/ThreadDetailPromptArea.tsx | 37 +++- .../views/thread-detail/ThreadDetailView.tsx | 71 +++--- .../thread-detail/sentMessageEdit.test.ts | 36 +++ .../views/thread-detail/sentMessageEdit.ts | 14 ++ .../useThreadTimelinePages.test.ts | 2 +- .../command-output/thread-actions.test.ts | 3 +- .../command-output/thread-log.test.ts | 6 +- .../helpers/command-output-fixtures.ts | 2 +- apps/cli/src/commands/thread/actions.ts | 12 +- apps/host-daemon/src/command-dispatch.test.ts | 3 + .../src/command-handlers/thread.ts | 2 + .../services/threads/thread-edit-message.ts | 117 ++++++---- .../threads/timeline-pagination.test.ts | 2 +- .../test/threads/thread-edit-message.test.ts | 97 ++++++++- .../src/runtime-thread-rewind.test.ts | 80 ++++++- packages/agent-runtime/src/runtime.ts | 206 ++++++++++++++---- .../src/test/fake-provider-script.ts | 10 + packages/agent-runtime/src/types.ts | 2 + packages/db/src/data/index.ts | 1 + .../db/src/data/queued-thread-messages.ts | 15 ++ packages/host-daemon-contract/src/commands.ts | 2 + .../test/contract.test.ts | 4 +- .../bundled-types/bb-plugin-sdk.d.ts | 9 +- .../server-contract/src/thread-timeline.ts | 1 + .../src/generated/plugin-sdk-dts.generated.ts | 2 +- .../src/event-projection-message.ts | 1 + .../thread-view/src/user-message-parsing.ts | 1 + .../test/completed-turn-grouping.test.ts | 11 +- .../timeline-cli-rendering.snapshots.test.ts | 7 +- .../test/timeline-progression.test.ts | 4 +- .../test/user-message-parsing.test.ts | 30 +-- plans/issue-1114-edit-sent-message.md | 14 +- .../fake/smoke/timeline-response.test.ts | 2 +- 49 files changed, 717 insertions(+), 202 deletions(-) diff --git a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx index b26e61b4ea..cd45793bec 100644 --- a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx +++ b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx @@ -142,6 +142,8 @@ function isKeyboardFocusTarget(target: EventTarget | null): boolean { * render submit/queue/stop affordances. */ export type FollowUpBlockedReason = + | "empty-message" + | "editing-requires-idle" | "loading-execution-options" | "loading-pending-interactions" | "pending-interaction" @@ -325,6 +327,11 @@ function FollowUpPromptBoxWithComposer({ const canSubmit = submitMode.kind === "ready" || submitMode.kind === "queue"; const isStopping = submitMode.kind === "blocked" && submitMode.reason === "stopping"; + const isEmptyMessage = + submitMode.kind === "blocked" && submitMode.reason === "empty-message"; + const isEditingRequiringIdle = + submitMode.kind === "blocked" && + submitMode.reason === "editing-requires-idle"; const isLoadingExecutionOptions = submitMode.kind === "blocked" && submitMode.reason === "loading-execution-options"; @@ -728,15 +735,19 @@ function FollowUpPromptBoxWithComposer({ : "Queue follow-up (Enter)" : isStopping ? "Stopping run..." - : isLoadingExecutionOptions - ? "Loading models..." - : isLoadingPendingInteractions - ? "Checking pending interactions..." - : isProvisioning - ? "Provisioning..." - : isUnavailable - ? "Unavailable" - : "Submit (Enter)", + : isEmptyMessage + ? "Enter a message" + : isEditingRequiringIdle + ? "Wait for the thread to become idle" + : isLoadingExecutionOptions + ? "Loading models..." + : isLoadingPendingInteractions + ? "Checking pending interactions..." + : isProvisioning + ? "Provisioning..." + : isUnavailable + ? "Unavailable" + : "Submit (Enter)", isRunning: canStopRuntime, }} typeahead={typeahead} diff --git a/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx b/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx index 0adec02cf7..eed169383d 100644 --- a/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx +++ b/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx @@ -212,7 +212,11 @@ describe("ConversationMessageContent user thread mentions", () => { systemMessageKind="unlabeled" systemMessageSubject={null} text="Why was @thread:thr_ti4st72wgs not a pill?" - turnRequest={{ kind: "message", status: "accepted" }} + turnRequest={{ + isGrouped: false, + kind: "message", + status: "accepted", + }} /> </ThreadTitleMentionResourcesProvider> </RouteNavigationProvider> @@ -258,7 +262,11 @@ describe("ConversationMessageContent user thread mentions", () => { systemMessageKind="unlabeled" systemMessageSubject={null} text="See @thread:thr_cross_project for the result." - turnRequest={{ kind: "message", status: "accepted" }} + turnRequest={{ + isGrouped: false, + kind: "message", + status: "accepted", + }} /> </ThreadTitleMentionResourcesProvider> </RouteNavigationProvider> diff --git a/apps/app/src/components/thread/timeline/GeneratedConversationMessage.stories.tsx b/apps/app/src/components/thread/timeline/GeneratedConversationMessage.stories.tsx index e9183f105f..3c1b593d65 100644 --- a/apps/app/src/components/thread/timeline/GeneratedConversationMessage.stories.tsx +++ b/apps/app/src/components/thread/timeline/GeneratedConversationMessage.stories.tsx @@ -31,6 +31,7 @@ function resolveThreadLink(link: TimelineTitleLink): string | null { } const acceptedMessage = { + isGrouped: false, kind: "message" as const, status: "accepted" as const, }; diff --git a/apps/app/src/components/thread/timeline/StreamingRows.stories.tsx b/apps/app/src/components/thread/timeline/StreamingRows.stories.tsx index 98bde8088c..3191c3ab18 100644 --- a/apps/app/src/components/thread/timeline/StreamingRows.stories.tsx +++ b/apps/app/src/components/thread/timeline/StreamingRows.stories.tsx @@ -190,7 +190,7 @@ function buildOptimisticUserRow(id: string): TimelineRow { text: OPTIMISTIC_USER_PROMPT_TEXT, mentions: [], attachments: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } @@ -310,7 +310,7 @@ function conversationRowFromStep( systemMessageKind: "unlabeled", systemMessageSubject: null, mentions: [], - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } return { @@ -455,7 +455,7 @@ function AssistantContentStreaming({ systemMessageSubject: null, text: ASSISTANT_STREAMING_USER_PROMPT.text, attachments: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; const assistantText = ASSISTANT_STREAMING_CHUNKS.slice(0, step).join(""); const assistantRow: TimelineRow = { diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx index cb4c5cef5e..bc4c38f2ea 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx @@ -433,7 +433,34 @@ describe("ThreadTimelineRows actions", () => { conversationRow({ role: "user", text: "Change direction.", - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { + isGrouped: false, + kind: "steer", + status: "accepted", + }, + }), + ]} + onEditMessage={vi.fn()} + threadRuntimeDisplayStatus="idle" + workspaceRootPath={undefined} + />, + ); + + expect(markup).not.toContain('aria-label="Edit message"'); + }); + + it("does not offer edit for one bubble in a grouped request", () => { + const markup = toMarkup( + <ThreadTimelineRows + timelineRows={[ + conversationRow({ + role: "user", + text: "One message in a group.", + turnRequest: { + isGrouped: true, + kind: "message", + status: "accepted", + }, }), ]} onEditMessage={vi.fn()} diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx index e2095bc315..447fad2911 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx @@ -980,6 +980,7 @@ function ConversationRow({ const canEditMessage = onEditMessage !== undefined && row.initiator === "user" && + !row.turnRequest.isGrouped && row.turnRequest.kind === "message" && row.turnRequest.status === "accepted" && (row.attachments?.imageUrls.length ?? 0) === 0; diff --git a/apps/app/src/components/thread/timeline/UserMessageMarkdown.stories.tsx b/apps/app/src/components/thread/timeline/UserMessageMarkdown.stories.tsx index 8df0140087..17e9e00e4c 100644 --- a/apps/app/src/components/thread/timeline/UserMessageMarkdown.stories.tsx +++ b/apps/app/src/components/thread/timeline/UserMessageMarkdown.stories.tsx @@ -44,6 +44,7 @@ function resolveThreadLink(link: TimelineTitleLink): string | null { const resolveMentionLink = () => () => {}; const acceptedMessage: TimelineConversationTurnRequest = { + isGrouped: false, kind: "message", status: "accepted", }; diff --git a/apps/app/src/components/thread/timeline/rows/UnreadDivider.stories.tsx b/apps/app/src/components/thread/timeline/rows/UnreadDivider.stories.tsx index 12288bdf57..1f9c24988d 100644 --- a/apps/app/src/components/thread/timeline/rows/UnreadDivider.stories.tsx +++ b/apps/app/src/components/thread/timeline/rows/UnreadDivider.stories.tsx @@ -50,7 +50,7 @@ function userRow(args: { text: args.text, mentions: [], attachments: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } diff --git a/apps/app/src/components/thread/timeline/rows/UserMessage.stories.tsx b/apps/app/src/components/thread/timeline/rows/UserMessage.stories.tsx index c7ce382f47..37a4ba9b2f 100644 --- a/apps/app/src/components/thread/timeline/rows/UserMessage.stories.tsx +++ b/apps/app/src/components/thread/timeline/rows/UserMessage.stories.tsx @@ -49,11 +49,20 @@ function resolveThreadLink(link: TimelineTitleLink): string | null { } const acceptedMessage = { + isGrouped: false, kind: "message" as const, status: "accepted" as const, }; -const pendingSteer = { kind: "steer" as const, status: "pending" as const }; -const acceptedSteer = { kind: "steer" as const, status: "accepted" as const }; +const pendingSteer = { + isGrouped: false, + kind: "steer" as const, + status: "pending" as const, +}; +const acceptedSteer = { + isGrouped: false, + kind: "steer" as const, + status: "accepted" as const, +}; interface StoryMentionArgs { resource: PromptMentionResource; diff --git a/apps/app/src/components/thread/timeline/timeline-auto-expand.test.ts b/apps/app/src/components/thread/timeline/timeline-auto-expand.test.ts index 1cc35fccd6..3bb84dc6c7 100644 --- a/apps/app/src/components/thread/timeline/timeline-auto-expand.test.ts +++ b/apps/app/src/components/thread/timeline/timeline-auto-expand.test.ts @@ -159,7 +159,7 @@ describe("collectTimelineAutoExpansionRowIds", () => { role: "user", text: "please keep going", sourceSeqStart: 2, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }), ]); @@ -397,7 +397,7 @@ describe("collectTimelineAutoExpansionRowIds", () => { id: "pending-steer-1", role: "user", text: "Keep this in mind", - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: false, kind: "steer", status: "pending" }, }), ]); diff --git a/apps/app/src/components/thread/timeline/useThreadTimelineController.test.tsx b/apps/app/src/components/thread/timeline/useThreadTimelineController.test.tsx index 437c0c3c08..fee5218556 100644 --- a/apps/app/src/components/thread/timeline/useThreadTimelineController.test.tsx +++ b/apps/app/src/components/thread/timeline/useThreadTimelineController.test.tsx @@ -78,7 +78,7 @@ function makeUserRow( senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } diff --git a/apps/app/src/components/thread/toc/ThreadTableOfContents.stories.tsx b/apps/app/src/components/thread/toc/ThreadTableOfContents.stories.tsx index 11b00a9091..e0a2a209b2 100644 --- a/apps/app/src/components/thread/toc/ThreadTableOfContents.stories.tsx +++ b/apps/app/src/components/thread/toc/ThreadTableOfContents.stories.tsx @@ -46,6 +46,7 @@ function conversationRow({ systemMessageKind: "unlabeled", systemMessageSubject: null, turnRequest: { + isGrouped: false, kind: "message", status: "accepted", }, diff --git a/apps/app/src/components/thread/toc/ThreadTableOfContents.test.tsx b/apps/app/src/components/thread/toc/ThreadTableOfContents.test.tsx index 9e9c6e0711..269a2f2435 100644 --- a/apps/app/src/components/thread/toc/ThreadTableOfContents.test.tsx +++ b/apps/app/src/components/thread/toc/ThreadTableOfContents.test.tsx @@ -67,6 +67,7 @@ function userConversationRow(index = 1): TimelineRow { systemMessageKind: "unlabeled", systemMessageSubject: null, turnRequest: { + isGrouped: false, kind: "message", status: "accepted", }, diff --git a/apps/app/src/hooks/cache-owners/thread-runtime-cache-owner.ts b/apps/app/src/hooks/cache-owners/thread-runtime-cache-owner.ts index 7c45a5bb71..536a7cb6cb 100644 --- a/apps/app/src/hooks/cache-owners/thread-runtime-cache-owner.ts +++ b/apps/app/src/hooks/cache-owners/thread-runtime-cache-owner.ts @@ -618,6 +618,7 @@ function buildOptimisticUserMessageRow({ systemMessageKind: "unlabeled", systemMessageSubject: null, turnRequest: { + isGrouped: false, kind: optimisticTurnRequestKind({ mode, threadStatus }), status: "pending", }, diff --git a/apps/app/src/test/fixtures/thread-timeline-rows.ts b/apps/app/src/test/fixtures/thread-timeline-rows.ts index aba0176f6e..f97e13b982 100644 --- a/apps/app/src/test/fixtures/thread-timeline-rows.ts +++ b/apps/app/src/test/fixtures/thread-timeline-rows.ts @@ -446,7 +446,11 @@ export function conversationRow({ : null, systemMessageKind, systemMessageSubject, - turnRequest: turnRequest ?? { kind: "message", status: "accepted" }, + turnRequest: turnRequest ?? { + isGrouped: false, + kind: "message", + status: "accepted", + }, }; } return { diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx index f152c91183..08aeb54b44 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx @@ -652,6 +652,7 @@ function buildPromptAreaElement({ }: RenderPromptAreaOptions = {}) { return ( <ThreadDetailPromptArea + activeBackgroundAgentCount={0} activeBackgroundCommands={[]} activePromptMode={activePromptMode} activeWorkflows={activeWorkflows} @@ -663,6 +664,7 @@ function buildPromptAreaElement({ goal={goal} modelFallback={modelFallback} isEnvironmentActionPending={false} + isSentMessageEditExperimentEnabled onChangedFileClick={vi.fn()} openThreadDiffPanel={vi.fn()} parentThreadSection={null} @@ -858,7 +860,7 @@ describe("ThreadDetailPromptArea", () => { const inlineEditor = within(hostElement); expect(inlineEditor.getByTestId("submit-mode").textContent).toBe( - "blocked:unavailable", + "blocked:editing-requires-idle", ); fireEvent.click( inlineEditor.getByRole("button", { name: "Submit composer" }), diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx index f416227ffd..6b7f0ad999 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx @@ -136,6 +136,7 @@ export const THREAD_DETAIL_COMPOSER_TEXTAREA_ID = "thread-detail-follow-up-composer"; interface ThreadDetailPromptAreaProps { + activeBackgroundAgentCount: number; canUseGitUi: boolean; contextWindowUsage?: ThreadTimelineResponse["contextWindowUsage"]; environmentCheckout?: WorkspaceCheckoutDisplay; @@ -208,6 +209,7 @@ interface ThreadDetailPromptAreaProps { sendMessage: SendMessageMutationLike; /** Present only while a sent-message editor is mounted in the timeline. */ sentMessageEdit?: ThreadDetailSentMessageEdit; + isSentMessageEditExperimentEnabled: boolean; steerActiveThreadOnEnter: boolean; /** * Bumped by the timeline host each time a quote is appended to the shared @@ -219,6 +221,7 @@ interface ThreadDetailPromptAreaProps { } export function ThreadDetailPromptArea({ + activeBackgroundAgentCount, canUseGitUi, contextWindowUsage, environmentCheckout, @@ -253,6 +256,7 @@ export function ThreadDetailPromptArea({ pullRequest, sendMessage, sentMessageEdit, + isSentMessageEditExperimentEnabled, steerActiveThreadOnEnter, composerFocusRequestNonce, thread, @@ -1049,9 +1053,37 @@ export function ThreadDetailPromptArea({ !isFollowUpSubmitting && !isQueueMutationPending && !sentMessageEdit.isSubmitting && + isSentMessageEditExperimentEnabled && queuedMessages.length === 0 && + activeBackgroundAgentCount === 0 && activeWorkflows.length === 0 && activeBackgroundCommands.length === 0; + const sentMessageEditSubmitMode = useMemo<FollowUpSubmitMode>( + () => + canSubmitSentMessageEdit + ? { kind: "ready" } + : sentMessageEditInput.length === 0 + ? { kind: "blocked", reason: "empty-message" } + : submitMode.kind === "blocked" + ? submitMode + : runtimeDisplayStatus !== "idle" || + queuedMessages.length > 0 || + activeBackgroundAgentCount > 0 || + activeWorkflows.length > 0 || + activeBackgroundCommands.length > 0 + ? { kind: "blocked", reason: "editing-requires-idle" } + : { kind: "blocked", reason: "unavailable" }, + [ + activeBackgroundAgentCount, + activeBackgroundCommands.length, + activeWorkflows.length, + canSubmitSentMessageEdit, + queuedMessages.length, + runtimeDisplayStatus, + sentMessageEditInput.length, + submitMode, + ], + ); const handleSentMessageEditSubmit = useCallback(() => { if (!sentMessageEdit || !canSubmitSentMessageEdit) { return; @@ -1099,9 +1131,7 @@ export function ThreadDetailPromptArea({ promptPlaceholder: "Edit message", canModifierSubmit: canSubmitSentMessageEdit, steerActiveThreadOnEnter: false, - submitMode: canSubmitSentMessageEdit - ? { kind: "ready" } - : { kind: "blocked", reason: "unavailable" }, + submitMode: sentMessageEditSubmitMode, threadRuntimeDisplayStatus: runtimeDisplayStatus, } : null, @@ -1111,6 +1141,7 @@ export function ThreadDetailPromptArea({ handleSentMessageEditSubmit, runtimeDisplayStatus, sentMessageEdit, + sentMessageEditSubmitMode, thread.id, ], ); diff --git a/apps/app/src/views/thread-detail/ThreadDetailView.tsx b/apps/app/src/views/thread-detail/ThreadDetailView.tsx index 4173a67fec..97b4b40f56 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailView.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailView.tsx @@ -122,7 +122,10 @@ import { ThreadDetailPromptArea, type ThreadDetailSentMessageEdit, } from "./ThreadDetailPromptArea"; -import { canStartSentMessageEdit } from "./sentMessageEdit"; +import { + canStartSentMessageEdit, + shouldDiscardSentMessageEdit, +} from "./sentMessageEdit"; import { type ContextBannerMergeBaseConfig, isThreadDisplayStatusBannerActive, @@ -971,7 +974,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { hasPendingInteraction, isExperimentEnabled: systemConfigQuery.data?.experiments.editMessages ?? false, - isEditSessionActive: activeSentMessageEditSession !== null, + isEditSessionActive: sentMessageEditSession !== null, isMutationPending: sendMessage.isPending || createQueuedMessage.isPending || @@ -1001,52 +1004,26 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { const sentMessageEditThreadId = sentMessageEditSession?.threadId ?? null; const sentMessageEditTargetMessageId = sentMessageEditSession?.target.messageId ?? null; + const currentThreadId = thread?.id ?? null; + const sentMessageEditTargetStillPresent = + sentMessageEditThreadId === currentThreadId && + sentMessageEditTargetMessageId !== null + ? hasTimelineRowId(timelineRows, sentMessageEditTargetMessageId) + : true; + const shouldDiscardMissingSentMessageEdit = shouldDiscardSentMessageEdit({ + currentThreadId, + editThreadId: sentMessageEditThreadId, + isTimelineLoading: timelineLoading, + targetStillPresent: sentMessageEditTargetStillPresent, + }); useEffect(() => { - if ( - sentMessageEditThreadId === null || - sentMessageEditTargetMessageId === null - ) { + if (!shouldDiscardMissingSentMessageEdit) { return; } - const sessionStillEligible = - thread !== undefined && - thread.id === sentMessageEditThreadId && - canStartSentMessageEdit({ - activeBackgroundAgentCount: thread.activeBackgroundAgentCount, - activeBackgroundCommandCount: activeBackgroundCommands.length, - activeWorkflowCount: activeWorkflows.length, - archivedAt: thread.archivedAt, - deletedAt: thread.deletedAt, - hasPendingInteraction, - isExperimentEnabled: - systemConfigQuery.data?.experiments.editMessages ?? false, - isEditSessionActive: false, - isMutationPending: false, - isTimelinePending: timelineLoading && timelineRows.length === 0, - queuedMessageCount: queuedMessagesForEditEligibility.length, - providerId: thread.providerId, - runtimeDisplayStatus: thread.runtime.displayStatus, - }); - const targetStillPresent = hasTimelineRowId( - timelineRows, - sentMessageEditTargetMessageId, - ); - if (!sessionStillEligible || (!timelineLoading && !targetStillPresent)) { - setSentMessageEditHostElement(null); - setSentMessageEditSession(null); - } - }, [ - activeBackgroundCommands.length, - activeWorkflows.length, - hasPendingInteraction, - queuedMessagesForEditEligibility.length, - sentMessageEditTargetMessageId, - sentMessageEditThreadId, - systemConfigQuery.data?.experiments.editMessages, - thread, - timelineLoading, - timelineRows, - ]); + setSentMessageEditHostElement(null); + setSentMessageEditSession(null); + appToast.warning("The message being edited is no longer available."); + }, [shouldDiscardMissingSentMessageEdit]); const handleEditSentMessage = useCallback<ThreadTimelineEditMessageHandler>( (target) => { if (!canEditSentMessages) { @@ -2627,6 +2604,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { ); const composerFooter = ( <ThreadDetailPromptArea + activeBackgroundAgentCount={thread.activeBackgroundAgentCount} canUseGitUi={canUseGitUi} contextWindowUsage={contextWindowUsage} environmentCheckout={threadCheckoutDisplay} @@ -2676,6 +2654,9 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { composerFocusRequestNonce={composerFocusRequestNonce} sendMessage={sendMessage} sentMessageEdit={sentMessageEdit} + isSentMessageEditExperimentEnabled={ + systemConfigQuery.data?.experiments.editMessages ?? false + } steerActiveThreadOnEnter={ systemConfigQuery.data?.generalSettings.steerActiveThreadOnEnter ?? defaultAppSettings.steerActiveThreadOnEnter diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts index 40a479efb4..65f17a24c1 100644 --- a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts +++ b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { canStartSentMessageEdit, + shouldDiscardSentMessageEdit, type SentMessageEditAvailability, } from "./sentMessageEdit"; @@ -43,3 +44,38 @@ describe("canStartSentMessageEdit", () => { ); }); }); + +describe("shouldDiscardSentMessageEdit", () => { + it("preserves a parked draft while another thread is open", () => { + expect( + shouldDiscardSentMessageEdit({ + currentThreadId: "thread-2", + editThreadId: "thread-1", + isTimelineLoading: false, + targetStillPresent: false, + }), + ).toBe(false); + }); + + it("waits for the edited thread timeline before deciding the row is gone", () => { + expect( + shouldDiscardSentMessageEdit({ + currentThreadId: "thread-1", + editThreadId: "thread-1", + isTimelineLoading: true, + targetStillPresent: false, + }), + ).toBe(false); + }); + + it("discards only after the target is absent from the loaded edited thread", () => { + expect( + shouldDiscardSentMessageEdit({ + currentThreadId: "thread-1", + editThreadId: "thread-1", + isTimelineLoading: false, + targetStillPresent: false, + }), + ).toBe(true); + }); +}); diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.ts b/apps/app/src/views/thread-detail/sentMessageEdit.ts index 7efa003295..ba2b4d05f0 100644 --- a/apps/app/src/views/thread-detail/sentMessageEdit.ts +++ b/apps/app/src/views/thread-detail/sentMessageEdit.ts @@ -53,3 +53,17 @@ export function canStartSentMessageEdit({ activeBackgroundCommandCount === 0 ); } + +export function shouldDiscardSentMessageEdit(args: { + currentThreadId: string | null; + editThreadId: string | null; + isTimelineLoading: boolean; + targetStillPresent: boolean; +}): boolean { + return ( + args.editThreadId !== null && + args.editThreadId === args.currentThreadId && + !args.isTimelineLoading && + !args.targetStillPresent + ); +} diff --git a/apps/app/src/views/thread-detail/useThreadTimelinePages.test.ts b/apps/app/src/views/thread-detail/useThreadTimelinePages.test.ts index 3e73bd3a3b..eea955b8b9 100644 --- a/apps/app/src/views/thread-detail/useThreadTimelinePages.test.ts +++ b/apps/app/src/views/thread-detail/useThreadTimelinePages.test.ts @@ -49,7 +49,7 @@ function userRow(args: TimelineTestRowArgs): TimelineUserConversationRow { text: args.id, mentions: [], attachments: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } diff --git a/apps/cli/src/__tests__/command-output/thread-actions.test.ts b/apps/cli/src/__tests__/command-output/thread-actions.test.ts index 17d2c310a2..a6a8f5bf6b 100644 --- a/apps/cli/src/__tests__/command-output/thread-actions.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-actions.test.ts @@ -131,7 +131,7 @@ describe("bb thread action command output", () => { }, }); expect(collectLogLines(vi.mocked(console.log))).toContain( - "Thread thread-edit-1 message replaced; workspace changes were kept", + "Thread thread-edit-1 message at request sequence 41 replaced; workspace changes were kept", ); }); @@ -172,6 +172,7 @@ describe("bb thread action command output", () => { ).toMatchObject({ threadId: "thread-edit-self", ok: true, + replacedRequestSequence: 41, requestSequence: 43, }); }); diff --git a/apps/cli/src/__tests__/command-output/thread-log.test.ts b/apps/cli/src/__tests__/command-output/thread-log.test.ts index 00494a462a..70890e7af2 100644 --- a/apps/cli/src/__tests__/command-output/thread-log.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-log.test.ts @@ -75,7 +75,11 @@ describe("bb thread log command output", () => { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { + isGrouped: false, + kind: "message", + status: "accepted", + }, }, { ...fixtures.makeTimelineBase({ diff --git a/apps/cli/src/__tests__/helpers/command-output-fixtures.ts b/apps/cli/src/__tests__/helpers/command-output-fixtures.ts index 735d94afbd..d7c23b2105 100644 --- a/apps/cli/src/__tests__/helpers/command-output-fixtures.ts +++ b/apps/cli/src/__tests__/helpers/command-output-fixtures.ts @@ -98,7 +98,7 @@ export function makePendingSteerTimelineRow(): TimelineUserConversationRow { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: false, kind: "steer", status: "pending" }, }; } diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index 80a95f795a..ecb96d3bde 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -406,9 +406,17 @@ export function registerActionsCommands( expectedRequestSequence, input: buildPromptInputs({ message: opts.message }), }); - if (outputJson(opts, { threadId, ...result })) return; + if ( + outputJson(opts, { + threadId, + replacedRequestSequence: expectedRequestSequence, + ...result, + }) + ) { + return; + } console.log( - `Thread ${threadId} message replaced; workspace changes were kept`, + `Thread ${threadId} message at request sequence ${expectedRequestSequence} replaced; workspace changes were kept`, ); }, ), diff --git a/apps/host-daemon/src/command-dispatch.test.ts b/apps/host-daemon/src/command-dispatch.test.ts index d319ec0e60..4cd0281fb9 100644 --- a/apps/host-daemon/src/command-dispatch.test.ts +++ b/apps/host-daemon/src/command-dispatch.test.ts @@ -961,6 +961,7 @@ describe("dispatchCommand", () => { }, projectId: "proj_1", providerId: "codex", + leaseId: "lease-1", operationId: "edit-op-1", sourceProviderThreadId: "provider-source-1", retainThroughProviderCheckpoint: "turn-before-edit", @@ -1048,6 +1049,7 @@ describe("dispatchCommand", () => { type: "thread.rewind.discard", environmentId: "env-1", threadId: "thread-1", + leaseId: "lease-1", operationId: "edit-op-1", }, { @@ -1065,6 +1067,7 @@ describe("dispatchCommand", () => { ), ).resolves.toEqual({}); expect(runtime.discardThreadRewind).toHaveBeenCalledWith({ + leaseId: "lease-1", operationId: "edit-op-1", threadId: "thread-1", }); diff --git a/apps/host-daemon/src/command-handlers/thread.ts b/apps/host-daemon/src/command-handlers/thread.ts index 233c7236ee..0f80d595f3 100644 --- a/apps/host-daemon/src/command-handlers/thread.ts +++ b/apps/host-daemon/src/command-handlers/thread.ts @@ -271,6 +271,7 @@ export async function prepareThreadRewind( : {}), environmentId: command.environmentId, threadId: command.threadId, + leaseId: command.leaseId, operationId: command.operationId, projectId: command.projectId, providerId: command.providerId, @@ -293,6 +294,7 @@ export async function discardThreadRewind( return {}; } await entry.runtime.discardThreadRewind({ + leaseId: command.leaseId, operationId: command.operationId, threadId: command.threadId, }); diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts index 2d5ac7cbc0..828c87663f 100644 --- a/apps/server/src/services/threads/thread-edit-message.ts +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -1,4 +1,4 @@ -import { createHash } from "node:crypto"; +import { createHash, randomUUID } from "node:crypto"; import { and, desc, eq, lt, sql } from "drizzle-orm"; import { deleteThreadEventSuffixInTransaction, @@ -6,8 +6,8 @@ import { getExperiments, getHighWaterMarks, getThread, + hasQueuedThreadMessages, listActiveBackgroundTaskCountsByThreadIds, - listQueuedThreadMessages, type DbQueryConnection, } from "@bb/db"; import { threadScope, type Thread } from "@bb/domain"; @@ -111,6 +111,7 @@ function findCommittedOperation( } const EDIT_MESSAGE_PROVIDER_IDS = new Set(["claude-code", "codex", "pi"]); +const EDITABLE_TURN_CANDIDATE_PAGE_SIZE = 25; interface StoredTurnCompletion { providerCheckpointId: string | null; @@ -171,6 +172,7 @@ function resolveEditableTurnCandidate( ), ) .orderBy(events.sequence) + .limit(2) .all(); const accepted = acceptedRows.length === 1 ? acceptedRows[0] : undefined; if (!accepted?.turnId) { @@ -319,42 +321,72 @@ function resolveEditableTurn( conflict("Wait for background work to finish before editing the message"); } - const requestRows = db - .select({ - data: events.data, - sequence: events.sequence, - threadId: events.threadId, - type: events.type, - }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "client/turn/requested"), - requestSequence === undefined - ? and( - sql`json_extract(${events.data}, '$.initiator') = 'user'`, - sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, - sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, - ) - : eq(events.sequence, requestSequence), - ), - ) - .orderBy(desc(events.sequence)) - .all(); - for (const requestRow of requestRows) { - try { + if (requestSequence !== undefined) { + const requestRow = db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "client/turn/requested"), + eq(events.sequence, requestSequence), + ), + ) + .limit(1) + .get(); + if (requestRow !== undefined) { return resolveEditableTurnCandidate(db, thread, requestRow); - } catch (error) { - if ( - requestSequence !== undefined || - !(error instanceof ApiError) || - error.status !== 409 || - error.body.code !== "invalid_request" - ) { - throw error; + } + conflict("The thread has no editable user message"); + } + + let beforeSequence: number | null = null; + while (true) { + const requestRows = db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "client/turn/requested"), + sql`json_extract(${events.data}, '$.initiator') = 'user'`, + sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, + sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, + beforeSequence === null + ? undefined + : lt(events.sequence, beforeSequence), + ), + ) + .orderBy(desc(events.sequence)) + .limit(EDITABLE_TURN_CANDIDATE_PAGE_SIZE) + .all(); + for (const requestRow of requestRows) { + try { + return resolveEditableTurnCandidate(db, thread, requestRow); + } catch (error) { + if ( + !(error instanceof ApiError) || + error.status !== 409 || + error.body.code !== "invalid_request" + ) { + throw error; + } } } + if (requestRows.length < EDITABLE_TURN_CANDIDATE_PAGE_SIZE) { + break; + } + beforeSequence = requestRows.at(-1)?.sequence ?? null; } conflict("The thread has no editable user message"); } @@ -369,7 +401,7 @@ export function getLatestThreadMessageEdit( if (deps.pendingInteractions.hasPendingThreadInteraction(thread.id)) { conflict("Resolve the pending interaction before editing the message"); } - if (listQueuedThreadMessages(deps.db, thread.id).length > 0) { + if (hasQueuedThreadMessages(deps.db, thread.id)) { conflict("Send or remove queued messages before editing a message"); } const target = resolveEditableTurn(deps.db, thread); @@ -386,6 +418,7 @@ function rewindPrepareCommandFromStart( start: Extract<HostDaemonCommand, { type: "thread.start" }>, args: { operationId: string; + leaseId: string; retainThroughProviderCheckpoint: string; sourceProviderThreadId: string; }, @@ -408,6 +441,7 @@ function rewindPrepareCommandFromStart( ? { disallowedTools: start.disallowedTools } : {}), instructionMode: start.instructionMode, + leaseId: args.leaseId, operationId: args.operationId, sourceProviderThreadId: args.sourceProviderThreadId, retainThroughProviderCheckpoint: args.retainThroughProviderCheckpoint, @@ -443,7 +477,7 @@ export async function editThreadMessage( if (deps.pendingInteractions.hasPendingThreadInteraction(args.thread.id)) { conflict("Resolve the pending interaction before editing the message"); } - if (listQueuedThreadMessages(deps.db, args.thread.id).length > 0) { + if (hasQueuedThreadMessages(deps.db, args.thread.id)) { conflict("Send or remove queued messages before editing a message"); } @@ -464,10 +498,12 @@ export async function editThreadMessage( ); let stagedProviderThreadId: string | null = null; + let rewindLeaseId: string | null = null; if (target.precedingProviderCheckpoint !== null) { if (target.sourceProviderThreadId === null) { conflict("This earlier turn has no provider session"); } + rewindLeaseId = randomUUID(); const startCommand = await buildThreadStartCommand(deps, { thread: args.thread, fork: null, @@ -486,6 +522,7 @@ export async function editThreadMessage( const prepared: HostDaemonCommandResult<"thread.rewind.prepare"> = await runLiveHostCommand(deps, { command: rewindPrepareCommandFromStart(startCommand, { + leaseId: rewindLeaseId, operationId: args.payload.operationId, retainThroughProviderCheckpoint: target.precedingProviderCheckpoint, sourceProviderThreadId: target.sourceProviderThreadId, @@ -498,7 +535,7 @@ export async function editThreadMessage( const requestSequence = target.oldMaxSequence + 2; const discardStagedRewind = - stagedProviderThreadId === null + stagedProviderThreadId === null || rewindLeaseId === null ? undefined : async () => { try { @@ -507,6 +544,7 @@ export async function editThreadMessage( type: "thread.rewind.discard", environmentId: readyEnvironment.id, threadId: args.thread.id, + leaseId: rewindLeaseId, operationId: args.payload.operationId, }, hostId: readyEnvironment.hostId, @@ -522,7 +560,7 @@ export async function editThreadMessage( try { await sendThreadMessage(deps, { beforeAppendInTransaction: ({ tx }) => { - if (listQueuedThreadMessages(tx, args.thread.id).length > 0) { + if (hasQueuedThreadMessages(tx, args.thread.id)) { conflict("Send or remove queued messages before editing a message"); } const currentThread = getThread(tx, args.thread.id); @@ -602,6 +640,7 @@ export async function editThreadMessage( projectId: args.thread.projectId, }); } catch (error) { + await discardStagedRewind?.(); const concurrentCommit = findCommittedOperation(deps.db, { operationId: args.payload.operationId, threadId: args.thread.id, diff --git a/apps/server/test/services/threads/timeline-pagination.test.ts b/apps/server/test/services/threads/timeline-pagination.test.ts index 0a9a625829..98b0d3787b 100644 --- a/apps/server/test/services/threads/timeline-pagination.test.ts +++ b/apps/server/test/services/threads/timeline-pagination.test.ts @@ -27,7 +27,7 @@ function userRow(args: { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts index 42a7a23cc9..7b3388c78f 100644 --- a/apps/server/test/threads/thread-edit-message.test.ts +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -1,4 +1,5 @@ import { + claimQueuedThreadMessage, createPromptHistoryEntry, getThread, listEvents, @@ -520,6 +521,12 @@ describe("editThreadMessage", () => { providerThreadId: "provider-staged-overlap", }); + const losingLeaseDiscard = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.discard", + ); + await reportQueuedCommandSuccess(harness, losingLeaseDiscard, {}); + await editsResult; await waitForQueuedCommand( harness, @@ -640,6 +647,31 @@ describe("editThreadMessage", () => { }); }); + it("finds an eligible message beyond one bounded candidate page", async () => { + await withTestHarness(async (harness) => { + const { thread } = seedEditableThread(harness); + for (let index = 0; index < 26; index += 1) { + const requestSequence = 12 + index * 5; + seedCompletedTurn(harness, { + inputGroups: [ + [{ type: "text", text: `Grouped ${index}a`, mentions: [] }], + [{ type: "text", text: `Grouped ${index}b`, mentions: [] }], + ], + providerCheckpointId: `checkpoint-grouped-${index}`, + providerThreadId: "provider-original", + requestSequence, + text: `Grouped request ${index}`, + threadId: thread.id, + turnId: `turn-grouped-${index}`, + }); + } + + expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ + expectedRequestSequence: 7, + }); + }); + }); + it("falls back past an unsuccessful turn and rejects it explicitly", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); @@ -670,7 +702,7 @@ describe("editThreadMessage", () => { }); }); - it("rechecks queued messages after rewind preparation", async () => { + it("rechecks claimed queued messages after rewind preparation", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); const editPromise = editThreadMessage(harness.deps, { @@ -686,23 +718,84 @@ describe("editThreadMessage", () => { harness, (queued) => queued.command.type === "thread.rewind.prepare", ); - seedQueuedMessage(harness.deps, { + const queuedMessage = seedQueuedMessage(harness.deps, { content: [ { type: "text", text: "Queued while preparing", mentions: [] }, ], threadId: thread.id, }); + expect( + claimQueuedThreadMessage( + harness.db, + harness.deps.hub, + queuedMessage.id, + ), + ).not.toBeNull(); const rejectedEdit = expect(editPromise).rejects.toThrow( "Send or remove queued messages before editing a message", ); await reportQueuedCommandSuccess(harness, rewind, { providerThreadId: "provider-staged-queue-race", }); + const discard = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.discard", + ); + expect(discard.command).toMatchObject({ + leaseId: + rewind.command.type === "thread.rewind.prepare" + ? rewind.command.leaseId + : undefined, + }); + await reportQueuedCommandSuccess(harness, discard, {}); await rejectedEdit; expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(11); }); }); + it("discards the staged rewind when the thread changes before commit", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-high-water-race", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + seedStoredEvent(harness.deps, { + data: { operation: "concurrent-change" }, + sequence: 12, + scope: threadScope(), + threadId: thread.id, + type: "system/operation", + }); + const rejectedEdit = expect(editPromise).rejects.toThrow( + "The thread changed while the edit was being prepared", + ); + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: "provider-staged-high-water-race", + }); + const discard = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.discard", + ); + await reportQueuedCommandSuccess(harness, discard, {}); + await rejectedEdit; + expect( + listEvents(harness.db, { threadId: thread.id }).map( + (event) => event.sequence, + ), + ).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); + }); + }); + it.each(["claude-code", "pi"] as const)( "rejects a %s rewind through legacy history without a checkpoint", async (providerId) => { diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts index e85ec2e849..0a15d12ca1 100644 --- a/packages/agent-runtime/src/runtime-thread-rewind.test.ts +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -41,6 +41,7 @@ describe("prepareThreadRewind", () => { const request = { environmentId: "env-1", threadId: "thread-1", + leaseId: "lease-1", operationId: "edit-op-1", projectId: "project-1", providerId: "codex", @@ -53,7 +54,7 @@ describe("prepareThreadRewind", () => { try { const results = await Promise.all([ runtime.prepareThreadRewind(request), - runtime.prepareThreadRewind(request), + runtime.prepareThreadRewind({ ...request, leaseId: "lease-2" }), ]); expect(results[0]).toEqual(results[1]); @@ -70,10 +71,21 @@ describe("prepareThreadRewind", () => { await expect( runtime.prepareThreadRewind({ ...request, + leaseId: "lease-3", retainThroughProviderCheckpoint: "different-turn", }), ).rejects.toThrow("reused with different input"); await runtime.discardThreadRewind({ + leaseId: "lease-1", + operationId: "edit-op-1", + threadId: "thread-1", + }); + expect( + commands.filter((command) => command.type === "thread/discard"), + ).toEqual([]); + expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(true); + await runtime.discardThreadRewind({ + leaseId: "lease-2", operationId: "edit-op-1", threadId: "thread-1", }); @@ -90,4 +102,70 @@ describe("prepareThreadRewind", () => { await runtime.shutdown(); } }); + + it("retains a staged rewind when provider cleanup fails so cleanup can retry", async () => { + const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); + temporaryDirectories.push(workspacePath); + const stderr: string[] = []; + const runtime = createAgentRuntimeWithAdapters({ + workspacePath, + onEvent: () => undefined, + onStderr: (line) => stderr.push(line), + onToolCall: async () => ({ + contentItems: [{ type: "inputText", text: "ok" }], + success: true, + }), + adapterFactory: () => { + const adapter = createRecordingAdapter({ + recordedCommands: [], + scriptPath: fakeProviderScriptPath, + }); + return { + ...adapter, + process: { + ...adapter.process, + args: [...adapter.process.args, "--discard-fails-once"], + }, + }; + }, + }); + const request = { + environmentId: "env-1", + threadId: "thread-1", + leaseId: "lease-1", + operationId: "edit-op-retry-cleanup", + projectId: "project-1", + providerId: "codex", + sourceProviderThreadId: "provider-source-1", + retainThroughProviderCheckpoint: "turn-before-edit", + options: fullRuntimeOptions, + instructionMode: "append" as const, + }; + + try { + await runtime.prepareThreadRewind(request); + await runtime.discardThreadRewind({ + leaseId: request.leaseId, + operationId: request.operationId, + threadId: request.threadId, + }); + expect(runtime.hasThread("thread-1:rewind:edit-op-retry-cleanup")).toBe( + true, + ); + expect(stderr).toEqual([ + expect.stringContaining("discard is temporarily unavailable"), + ]); + + await runtime.discardThreadRewind({ + leaseId: request.leaseId, + operationId: request.operationId, + threadId: request.threadId, + }); + expect(runtime.hasThread("thread-1:rewind:edit-op-retry-cleanup")).toBe( + false, + ); + } finally { + await runtime.shutdown(); + } + }); }); diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index e3be72a1c9..82cc5b624a 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -91,16 +91,22 @@ function normalizeExecutionOptions(args: { } interface PreparedThreadRewind { - cleanupTimer: ReturnType<typeof setTimeout>; + cleanupPromise: Promise<void> | null; + cleanupTimer: ReturnType<typeof setTimeout> | null; + leaseIds: Set<string>; + operationId: string; processKey: string; providerId: string; + providerState: RuntimeProviderProcess["identity"]; sourceProviderCheckpointId: string; providerThreadId: string; sourceProviderThreadId: string; stagingThreadId: string; + threadId: string; } interface PreparingThreadRewind { + leaseIds: Set<string>; sourceProviderCheckpointId: string; promise: Promise<{ providerThreadId: string }>; sourceProviderThreadId: string; @@ -172,6 +178,7 @@ type ProviderProcess = RuntimeProviderProcess; const threadGoalClearResultSchema = z.object({ cleared: z.boolean() }).strict(); const THREAD_GOAL_CLEAR_EVENT_TIMEOUT_MS = 5_000; const PREPARED_THREAD_REWIND_TTL_MS = 5 * 60_000; +const PREPARED_THREAD_REWIND_RETRY_MS = 30_000; interface ThreadRuntimeConfig { dynamicTools?: DynamicTool[]; @@ -575,9 +582,16 @@ function createAgentRuntimeInternal( function forgetThreadRuntimeState( proc: ProviderProcess, threadId: string, + ): void { + forgetThreadRuntimeStateForProviderState(proc.identity, threadId); + } + + function forgetThreadRuntimeStateForProviderState( + providerState: RuntimeProviderProcess["identity"], + threadId: string, ): void { threadIdentityRegistry.forgetThread({ - providerState: proc.identity, + providerState, threadId, }); clearThreadRuntimeConfig(threadId); @@ -1100,13 +1114,57 @@ function createAgentRuntimeInternal( // Public API // ------------------------------------------------------------------------- - async function discardPreparedThreadRewind(args: { - operationId: string; - threadId: string; - }): Promise<void> { + function schedulePreparedThreadRewindCleanup( + prepared: PreparedThreadRewind, + delayMs: number, + ): void { + if (prepared.cleanupTimer !== null) { + clearTimeout(prepared.cleanupTimer); + } + prepared.cleanupTimer = setTimeout(() => { + void discardPreparedThreadRewind({ + force: true, + operationId: prepared.operationId, + threadId: prepared.threadId, + }); + }, delayMs); + prepared.cleanupTimer.unref?.(); + } + + function finishPreparedThreadRewindCleanup( + rewindKey: string, + prepared: PreparedThreadRewind, + ): void { + if (prepared.cleanupTimer !== null) { + clearTimeout(prepared.cleanupTimer); + prepared.cleanupTimer = null; + } + if (preparedThreadRewinds.get(rewindKey) === prepared) { + preparedThreadRewinds.delete(rewindKey); + } + suppressedThreadEventIds.delete(prepared.stagingThreadId); + } + + async function discardPreparedThreadRewind( + args: + | { + force: true; + operationId: string; + threadId: string; + } + | { + force?: false; + leaseId: string; + operationId: string; + threadId: string; + }, + ): Promise<void> { const rewindKey = `${args.threadId}\0${args.operationId}`; const pending = preparingThreadRewinds.get(rewindKey); if (pending !== undefined) { + if (!args.force) { + pending.leaseIds.delete(args.leaseId); + } try { await pending.promise; } catch { @@ -1117,35 +1175,78 @@ function createAgentRuntimeInternal( if (prepared === undefined) { return; } - preparedThreadRewinds.delete(rewindKey); - clearTimeout(prepared.cleanupTimer); - try { - const proc = requireProviderProcess({ - processKey: prepared.processKey, - providerId: prepared.providerId, - }); - const adapterCommand: AdapterCommand = { - type: "thread/discard", - threadId: prepared.stagingThreadId, - providerThreadId: prepared.providerThreadId, - }; - const command = proc.adapter.buildCommandPlan(adapterCommand); - if (command.kind === "request") { - await sendCommand({ - proc, - message: command, - resultSchema: ignoredJsonRpcResultSchema, + if (!args.force) { + prepared.leaseIds.delete(args.leaseId); + if (prepared.leaseIds.size > 0) { + return; + } + } + if (prepared.cleanupPromise !== null) { + await prepared.cleanupPromise; + return; + } + + const cleanup = (async () => { + let proc: ProviderProcess; + try { + proc = requireProviderProcess({ + processKey: prepared.processKey, + providerId: prepared.providerId, }); + } catch { + forgetThreadRuntimeStateForProviderState( + prepared.providerState, + prepared.stagingThreadId, + ); + finishPreparedThreadRewindCleanup(rewindKey, prepared); + return; } + + try { + const adapterCommand: AdapterCommand = { + type: "thread/discard", + threadId: prepared.stagingThreadId, + providerThreadId: prepared.providerThreadId, + }; + const command = proc.adapter.buildCommandPlan(adapterCommand); + if (command.kind === "request") { + await sendCommand({ + proc, + message: command, + resultSchema: ignoredJsonRpcResultSchema, + }); + } + } catch (error) { + schedulePreparedThreadRewindCleanup( + prepared, + PREPARED_THREAD_REWIND_RETRY_MS, + ); + options.onStderr?.( + `Failed to discard staged rewind ${args.operationId}; retrying: ${error instanceof Error ? error.message : String(error)}`, + ); + return; + } + forgetThreadRuntimeState(proc, prepared.stagingThreadId); - await shutdownThreadScopedCodexProcessIfIdle(proc); - } catch (error) { - threadIdentityRegistry.clearThread(prepared.stagingThreadId); - options.onStderr?.( - `Failed to discard staged rewind ${args.operationId}: ${error instanceof Error ? error.message : String(error)}`, - ); + finishPreparedThreadRewindCleanup(rewindKey, prepared); + try { + await shutdownThreadScopedCodexProcessIfIdle(proc); + } catch (error) { + options.onStderr?.( + `Failed to stop the idle provider after discarding staged rewind ${args.operationId}: ${error instanceof Error ? error.message : String(error)}`, + ); + } + })(); + prepared.cleanupPromise = cleanup; + try { + await cleanup; } finally { - suppressedThreadEventIds.delete(prepared.stagingThreadId); + if ( + preparedThreadRewinds.get(rewindKey) === prepared && + prepared.cleanupPromise === cleanup + ) { + prepared.cleanupPromise = null; + } } } @@ -1335,6 +1436,7 @@ function createAgentRuntimeInternal( async prepareThreadRewind({ environmentId, threadId, + leaseId, operationId, projectId, providerId, @@ -1357,7 +1459,11 @@ function createAgentRuntimeInternal( ); } const rewindKey = `${threadId}\0${operationId}`; - const existing = preparedThreadRewinds.get(rewindKey); + let existing = preparedThreadRewinds.get(rewindKey); + while (existing?.cleanupPromise) { + await existing.cleanupPromise; + existing = preparedThreadRewinds.get(rewindKey); + } if (existing !== undefined) { if ( existing.sourceProviderThreadId !== sourceProviderThreadId || @@ -1368,6 +1474,11 @@ function createAgentRuntimeInternal( `Prepared rewind operation ${operationId} was reused with different input`, ); } + existing.leaseIds.add(leaseId); + schedulePreparedThreadRewindCleanup( + existing, + PREPARED_THREAD_REWIND_TTL_MS, + ); return { providerThreadId: existing.providerThreadId }; } @@ -1381,9 +1492,11 @@ function createAgentRuntimeInternal( `Prepared rewind operation ${operationId} was reused with different input`, ); } + pending.leaseIds.add(leaseId); return pending.promise; } + const leaseIds = new Set([leaseId]); const preparation = runThreadOperation({ threadId, work: async () => { @@ -1466,22 +1579,25 @@ function createAgentRuntimeInternal( stagingThreadId, providerThreadId, ); - const cleanupTimer = setTimeout(() => { - void discardPreparedThreadRewind({ - operationId, - threadId, - }); - }, PREPARED_THREAD_REWIND_TTL_MS); - cleanupTimer.unref?.(); - preparedThreadRewinds.set(rewindKey, { - cleanupTimer, + const prepared: PreparedThreadRewind = { + cleanupPromise: null, + cleanupTimer: null, + leaseIds, + operationId, processKey, providerId, + providerState: proc.identity, sourceProviderCheckpointId: retainThroughProviderCheckpoint, providerThreadId, sourceProviderThreadId, stagingThreadId, - }); + threadId, + }; + preparedThreadRewinds.set(rewindKey, prepared); + schedulePreparedThreadRewindCleanup( + prepared, + PREPARED_THREAD_REWIND_TTL_MS, + ); retainedForDiscard = true; return { providerThreadId }; } finally { @@ -1496,6 +1612,7 @@ function createAgentRuntimeInternal( }, }); preparingThreadRewinds.set(rewindKey, { + leaseIds, sourceProviderCheckpointId: retainThroughProviderCheckpoint, promise: preparation, sourceProviderThreadId, @@ -1510,8 +1627,8 @@ function createAgentRuntimeInternal( } }, - async discardThreadRewind({ threadId, operationId }) { - await discardPreparedThreadRewind({ threadId, operationId }); + async discardThreadRewind({ threadId, leaseId, operationId }) { + await discardPreparedThreadRewind({ threadId, leaseId, operationId }); }, async resumeThread({ @@ -2073,6 +2190,7 @@ function createAgentRuntimeInternal( [...preparedThreadRewinds.keys()].map((rewindKey) => { const separatorIndex = rewindKey.indexOf("\0"); return discardPreparedThreadRewind({ + force: true, threadId: rewindKey.slice(0, separatorIndex), operationId: rewindKey.slice(separatorIndex + 1), }); diff --git a/packages/agent-runtime/src/test/fake-provider-script.ts b/packages/agent-runtime/src/test/fake-provider-script.ts index 9871f26f4b..88ef7859d8 100644 --- a/packages/agent-runtime/src/test/fake-provider-script.ts +++ b/packages/agent-runtime/src/test/fake-provider-script.ts @@ -69,6 +69,7 @@ const defaultModelList = { // Test-only mode used by runtime command-contract coverage. const simulateArchivedSession = process.argv.includes("--archived-session"); const failUnarchive = process.argv.includes("--unarchive-fails"); +let failNextDiscard = process.argv.includes("--discard-fails-once"); // Exit right after reporting the archived error, so recovery has to work // against a replacement process. const exitAfterArchivedError = process.argv.includes("--exit-after-archived"); @@ -644,6 +645,15 @@ function handleMessage(message: JsonRecord): void { } if (method === "thread/discard") { + if (failNextDiscard) { + failNextDiscard = false; + send({ + jsonrpc: "2.0", + id: getJsonRpcId(message.id) ?? 0, + error: { code: -32000, message: "discard is temporarily unavailable" }, + }); + return; + } send({ jsonrpc: "2.0", id: getJsonRpcId(message.id) ?? 0, diff --git a/packages/agent-runtime/src/types.ts b/packages/agent-runtime/src/types.ts index 2f50548719..97c1622288 100644 --- a/packages/agent-runtime/src/types.ts +++ b/packages/agent-runtime/src/types.ts @@ -176,6 +176,7 @@ export interface PrepareThreadRewindArgs { acpLaunchSpec?: HostDaemonAcpLaunchSpec; environmentId: string; threadId: string; + leaseId: string; operationId: string; projectId: string; providerId: string; @@ -193,6 +194,7 @@ export interface PrepareThreadRewindResult { } export interface DiscardThreadRewindArgs { + leaseId: string; operationId: string; threadId: string; } diff --git a/packages/db/src/data/index.ts b/packages/db/src/data/index.ts index 06fc69af7e..b63ac96285 100644 --- a/packages/db/src/data/index.ts +++ b/packages/db/src/data/index.ts @@ -520,6 +520,7 @@ export { deleteClaimedQueuedThreadMessageInTransaction, deleteQueuedThreadMessage, getQueuedThreadMessage, + hasQueuedThreadMessages, listIdleThreadsWithQueuedMessages, listQueuedThreadMessages, releaseQueuedMessageClaim, diff --git a/packages/db/src/data/queued-thread-messages.ts b/packages/db/src/data/queued-thread-messages.ts index 8bf31bbc89..e3420cbb32 100644 --- a/packages/db/src/data/queued-thread-messages.ts +++ b/packages/db/src/data/queued-thread-messages.ts @@ -569,6 +569,21 @@ export function listQueuedThreadMessages( return listUnclaimedQueuedThreadMessages(db, threadId); } +/** Includes messages currently claimed by the queue drain worker. */ +export function hasQueuedThreadMessages( + db: DbQueryConnection, + threadId: string, +): boolean { + return ( + db + .select({ id: queuedThreadMessages.id }) + .from(queuedThreadMessages) + .where(eq(queuedThreadMessages.threadId, threadId)) + .limit(1) + .get() !== undefined + ); +} + export function listIdleThreadsWithQueuedMessages( db: DbConnection, ): QueuedMessageThreadRow[] { diff --git a/packages/host-daemon-contract/src/commands.ts b/packages/host-daemon-contract/src/commands.ts index c07eb6d327..bed0e814b7 100644 --- a/packages/host-daemon-contract/src/commands.ts +++ b/packages/host-daemon-contract/src/commands.ts @@ -329,6 +329,7 @@ export const threadRewindPrepareCommandSchema = hostDaemonThreadTargetSchema .merge(hostDaemonThreadRuntimeContextSchema) .extend({ type: z.literal("thread.rewind.prepare"), + leaseId: z.string().min(1), operationId: z.string().min(1), sourceProviderThreadId: z.string().min(1), retainThroughProviderCheckpoint: z.string().min(1), @@ -338,6 +339,7 @@ export const threadRewindPrepareCommandSchema = hostDaemonThreadTargetSchema export const threadRewindDiscardCommandSchema = hostDaemonThreadTargetSchema .extend({ type: z.literal("thread.rewind.discard"), + leaseId: z.string().min(1), operationId: z.string().min(1), }) .strict(); diff --git a/packages/host-daemon-contract/test/contract.test.ts b/packages/host-daemon-contract/test/contract.test.ts index 265716888c..550d834c05 100644 --- a/packages/host-daemon-contract/test/contract.test.ts +++ b/packages/host-daemon-contract/test/contract.test.ts @@ -1056,8 +1056,8 @@ describe("host-daemon local schemas", () => { describe("host-daemon command schemas", () => { // Version 101 builds on Codex inference deadlines in version 100 with - // provider-native history checkpointing and staged rewind cleanup. - it("uses protocol version 101 for staged thread rewind cleanup", () => { + // provider-native history checkpointing and ownership-leased staged rewinds. + it("uses protocol version 101 for leased staged thread rewind cleanup", () => { expect(HOST_DAEMON_PROTOCOL_VERSION).toBe(101); }); diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index f1c9f1d96c..be95c129ac 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -2538,8 +2538,8 @@ declare const skillListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; description: z$1.ZodNullable<z$1.ZodString>; provider: z$1.ZodNullable<z$1.ZodEnum<{ - "claude-code": "claude-code"; codex: "codex"; + "claude-code": "claude-code"; "acp-cursor": "acp-cursor"; }>>; scope: z$1.ZodEnum<{ @@ -3390,6 +3390,7 @@ declare const hostDaemonCommandRegistry: { environmentId: z$1.ZodString; threadId: z$1.ZodString; type: z$1.ZodLiteral<"thread.rewind.discard">; + leaseId: z$1.ZodString; operationId: z$1.ZodString; }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; "thread.rewind.prepare": HostDaemonCommandDescriptor<"thread.rewind.prepare", z$1.ZodObject<{ @@ -3583,10 +3584,11 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - replace: "replace"; append: "append"; + replace: "replace"; }>; type: z$1.ZodLiteral<"thread.rewind.prepare">; + leaseId: z$1.ZodString; operationId: z$1.ZodString; sourceProviderThreadId: z$1.ZodString; retainThroughProviderCheckpoint: z$1.ZodString; @@ -7450,6 +7452,7 @@ declare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodO count: z$1.ZodNumber; }, z$1.core.$strip>], "kind">>; turnRequest: z$1.ZodObject<{ + isGrouped: z$1.ZodBoolean; kind: z$1.ZodEnum<{ message: "message"; steer: "steer"; @@ -10047,8 +10050,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable<z$1.ZodObject<{ mode: z$1.ZodLiteral<"plan">; providerId: z$1.ZodEnum<{ - "claude-code": "claude-code"; codex: "codex"; + "claude-code": "claude-code"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; diff --git a/packages/server-contract/src/thread-timeline.ts b/packages/server-contract/src/thread-timeline.ts index 960364e45c..3f221f3efd 100644 --- a/packages/server-contract/src/thread-timeline.ts +++ b/packages/server-contract/src/thread-timeline.ts @@ -92,6 +92,7 @@ export const timelineConversationTurnRequestStatusValues = [ "accepted", ] as const; export const timelineConversationTurnRequestSchema = z.object({ + isGrouped: z.boolean(), kind: z.enum(timelineConversationTurnRequestKindValues), status: z.enum(timelineConversationTurnRequestStatusValues), }); diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index c28e7bee73..d29e5980a9 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n in_progress: \"in_progress\";\n completed: \"completed\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n in_progress: \"in_progress\";\n completed: \"completed\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n codex: \"codex\";\n \"claude-code\": \"claude-code\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n codex: \"codex\";\n \"claude-code\": \"claude-code\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault<z.ZodArray<z.ZodObject<{\n start: z.ZodNumber;\n end: z.ZodNumber;\n resource: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional<z.ZodString>;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable<z.ZodString>;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional<z.ZodString>;\n sizeBytes: z.ZodOptional<z.ZodNumber>;\n mimeType: z.ZodOptional<z.ZodString>;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer<typeof promptInputSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional<z.ZodString>;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable<z.ZodString>;\n branch: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"existing\">;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer<typeof createThreadEnvironmentArgsSchema>;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer<typeof createExecutionInputSourcesSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType<ThreadChatProps>;\ndeclare const Markdown: react.ComponentType<MarkdownProps>;\ndeclare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;\ndeclare const useRpc: <Contract extends PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract<StandardSchemaV1<unknown, unknown>, StandardSchemaV1<unknown, unknown>>>>>() => PluginRpcClient<Contract>;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/packages/thread-view/src/event-projection-message.ts b/packages/thread-view/src/event-projection-message.ts index 7e0763736e..c59825646c 100644 --- a/packages/thread-view/src/event-projection-message.ts +++ b/packages/thread-view/src/event-projection-message.ts @@ -78,6 +78,7 @@ export type EventProjectionTurnRequestStatus = (typeof eventProjectionTurnRequestStatusValues)[number]; export interface EventProjectionTurnRequest { + isGrouped: boolean; kind: EventProjectionTurnRequestKind; status: EventProjectionTurnRequestStatus; } diff --git a/packages/thread-view/src/user-message-parsing.ts b/packages/thread-view/src/user-message-parsing.ts index 69c3e8cc50..70d3af526b 100644 --- a/packages/thread-view/src/user-message-parsing.ts +++ b/packages/thread-view/src/user-message-parsing.ts @@ -224,6 +224,7 @@ function buildTurnRequest( acceptedClientRequest: AcceptedClientRequest | undefined, ): EventProjectionTurnRequest { return { + isGrouped: decoded.inputGroups !== undefined, kind: resolveTurnRequestKind({ acceptedClientRequest, decoded, diff --git a/packages/thread-view/test/completed-turn-grouping.test.ts b/packages/thread-view/test/completed-turn-grouping.test.ts index b3fc7b83bf..0fe50788b4 100644 --- a/packages/thread-view/test/completed-turn-grouping.test.ts +++ b/packages/thread-view/test/completed-turn-grouping.test.ts @@ -53,6 +53,7 @@ function userMessage(args: UserMessageArgs): EventProjectionUserMessage { systemMessageKind: "unlabeled", systemMessageSubject: null, turnRequest: args.turnRequest ?? { + isGrouped: false, kind: "message", status: "accepted", }, @@ -162,11 +163,7 @@ describe("groupCompletedTurnMessages", () => { seq: 3, }); const turn = completedTurn( - [ - assistantBefore, - userMessage({ id: "user", seq: 2 }), - assistantAfter, - ], + [assistantBefore, userMessage({ id: "user", seq: 2 }), assistantAfter], assistantAfter, ); const groups = groupCompletedTurnMessages(turn); @@ -199,13 +196,13 @@ describe("groupCompletedTurnMessages", () => { id: "agent-steer", initiator: "agent", seq: 2, - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "steer", status: "accepted" }, }), userMessage({ id: "system-steer", initiator: "system", seq: 3, - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "steer", status: "accepted" }, }), assistantMessage({ id: "assistant-after", seq: 4 }), ], diff --git a/packages/thread-view/test/timeline-cli-rendering.snapshots.test.ts b/packages/thread-view/test/timeline-cli-rendering.snapshots.test.ts index 04882a64ae..73640aff34 100644 --- a/packages/thread-view/test/timeline-cli-rendering.snapshots.test.ts +++ b/packages/thread-view/test/timeline-cli-rendering.snapshots.test.ts @@ -527,6 +527,7 @@ describe("timeline CLI rendering snapshots", () => { ); expect(pendingSteerRow?.sourceSeqStart).toBe(3); expect(pendingSteerRow?.turnRequest).toEqual({ + isGrouped: false, kind: "steer", status: "pending", }); @@ -582,6 +583,7 @@ describe("timeline CLI rendering snapshots", () => { ); expect(steerMessage?.sourceSeqStart).toBe(4); expect(steerMessage?.turnRequest).toEqual({ + isGrouped: false, kind: "steer", status: "accepted", }); @@ -598,6 +600,7 @@ describe("timeline CLI rendering snapshots", () => { ); expect(steerRow?.sourceSeqStart).toBe(4); expect(steerRow?.turnRequest).toEqual({ + isGrouped: false, kind: "steer", status: "accepted", }); @@ -674,8 +677,8 @@ describe("timeline CLI rendering snapshots", () => { "Follow-up task", ]); expect(userMessages.map((message) => message.turnRequest)).toEqual([ - { kind: "message", status: "accepted" }, - { kind: "message", status: "accepted" }, + { isGrouped: false, kind: "message", status: "accepted" }, + { isGrouped: false, kind: "message", status: "accepted" }, ]); const topLevelUserRows = timeline.rows.filter( (row) => row.kind === "conversation" && row.role === "user", diff --git a/packages/thread-view/test/timeline-progression.test.ts b/packages/thread-view/test/timeline-progression.test.ts index 32e7b2b5ae..67fcfe37fa 100644 --- a/packages/thread-view/test/timeline-progression.test.ts +++ b/packages/thread-view/test/timeline-progression.test.ts @@ -63,7 +63,7 @@ function userRow(text: string): TimelineConversationRow { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }; } @@ -336,7 +336,7 @@ describe("findTimelineFrontierRow", () => { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: false, kind: "steer", status: "pending" }, }, ]); diff --git a/packages/thread-view/test/user-message-parsing.test.ts b/packages/thread-view/test/user-message-parsing.test.ts index a8b38c0f5a..cd89c83b66 100644 --- a/packages/thread-view/test/user-message-parsing.test.ts +++ b/packages/thread-view/test/user-message-parsing.test.ts @@ -159,7 +159,7 @@ describe("user message parsing", () => { kind: "user", initiator: "user", senderThreadId: null, - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, text: "Hello", }); }); @@ -194,8 +194,8 @@ describe("user message parsing", () => { `${event.threadId}:user-seed:${meta.seq}-1`, ]); expect(messages.map((message) => message.turnRequest)).toEqual([ - { kind: "message", status: "pending" }, - { kind: "message", status: "pending" }, + { isGrouped: true, kind: "message", status: "pending" }, + { isGrouped: true, kind: "message", status: "pending" }, ]); }); @@ -262,7 +262,7 @@ describe("user message parsing", () => { kind: "user", initiator: "agent", senderThreadId: SENDER_THREAD_ID, - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, // Text passes through unchanged — the renderer mutes the `[bb …]` // prefix at display time; the projection never slices. text: agentText, @@ -306,7 +306,7 @@ describe("user message parsing", () => { kind: "user", initiator: "system", senderThreadId: null, - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, }); }); @@ -345,7 +345,7 @@ describe("user message parsing", () => { initiator: "system", senderThreadId: null, text, - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, }); expect(message?.mentions).toEqual([mention]); }); @@ -375,7 +375,7 @@ describe("user message parsing", () => { }), ).toMatchObject({ kind: "user", - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: false, kind: "steer", status: "pending" }, // Pending steers anchor at the request's own meta — there is no // accept event yet to route to. text: expectedText, @@ -390,7 +390,7 @@ describe("user message parsing", () => { }), ).toMatchObject({ kind: "user", - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "steer", status: "accepted" }, // Accepted steers anchor at the accept event's seq, not the request's, // so they land at the right point in the timeline once accepted. text: expectedText, @@ -444,12 +444,12 @@ describe("user message parsing", () => { { id: "thread-1:user-seed:1", text: "First grouped steer", - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: true, kind: "steer", status: "pending" }, }, { id: "thread-1:user-seed:1-1", text: "Second grouped steer", - turnRequest: { kind: "steer", status: "pending" }, + turnRequest: { isGrouped: true, kind: "steer", status: "pending" }, }, ]); expect( @@ -469,13 +469,13 @@ describe("user message parsing", () => { id: "thread-1:user-seed:1", sourceSeqStart: accepted.meta.seq, text: "First grouped steer", - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { isGrouped: true, kind: "steer", status: "accepted" }, }, { id: "thread-1:user-seed:1-1", sourceSeqStart: accepted.meta.seq, text: "Second grouped steer", - turnRequest: { kind: "steer", status: "accepted" }, + turnRequest: { isGrouped: true, kind: "steer", status: "accepted" }, }, ]); }); @@ -565,7 +565,7 @@ describe("user message parsing", () => { scope: turnScope("turn-2"), sourceSeqStart: meta.seq, text: "Mid-turn steer", - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, }); }); @@ -592,7 +592,7 @@ describe("user message parsing", () => { ).toMatchObject({ kind: "user", text: "Fallback message", - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, }); }); @@ -609,7 +609,7 @@ describe("user message parsing", () => { initiator: "system", kind: "user", text: "[bb system] Maintenance notice.", - turnRequest: { kind: "message", status: "pending" }, + turnRequest: { isGrouped: false, kind: "message", status: "pending" }, }); }); }); diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md index 6b3fd90159..c2135a7487 100644 --- a/plans/issue-1114-edit-sent-message.md +++ b/plans/issue-1114-edit-sent-message.md @@ -87,11 +87,13 @@ Remote image inputs that cannot be faithfully restored remain ineligible. Agent-only context is excluded from the editor and is resolved again through the normal submit pipeline. -### Cancel +### Cancel And Navigation -Cancel or navigation clears only the client edit session. No provider or server -state changes. If the draft differs from the original, cancellation confirms -before discarding it. +Cancel clears only the client edit session. No provider or server state changes. +If the draft differs from the original, cancellation confirms before discarding +it. Navigating to another thread parks the edit session and restores it when the +user returns; temporary eligibility blockers disable submission without losing +the draft. ### Submit @@ -150,6 +152,7 @@ The server sends only opaque provider checkpoints across the daemon boundary: type: "thread.rewind.prepare"; sourceProviderThreadId: string; retainThroughProviderCheckpoint: string; + leaseId: string; operationId: string; } ``` @@ -159,7 +162,8 @@ thread id. After the replacement fork settles, bb closes/removes the staged Claude Code or Pi session and archives the staged Codex fork; a daemon-side TTL cleans up abandoned preparations. The source provider session remains untouched until the database commit. The prepare/discard wire contract requires -`HOST_DAEMON_PROTOCOL_VERSION = 97`. +`HOST_DAEMON_PROTOCOL_VERSION = 98` (the staged rewind commands now carry an +ownership lease so overlapping edits cannot discard each other's fork). ## API, SDK, And CLI diff --git a/tests/integration/fake/smoke/timeline-response.test.ts b/tests/integration/fake/smoke/timeline-response.test.ts index a00fcef08f..9dbc00882b 100644 --- a/tests/integration/fake/smoke/timeline-response.test.ts +++ b/tests/integration/fake/smoke/timeline-response.test.ts @@ -37,7 +37,7 @@ const USER_ROW = { senderThreadId: null, systemMessageKind: "unlabeled", systemMessageSubject: null, - turnRequest: { kind: "message", status: "accepted" }, + turnRequest: { isGrouped: false, kind: "message", status: "accepted" }, } satisfies TimelineRow; function makeTimelineResponse( From 26f435e3aaae6e02c497edf160696a6165293367 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Mon, 10 Aug 2026 19:58:51 -0700 Subject: [PATCH 4/9] Fix Pi message edit rewinds --- apps/cli/src/commands/thread/actions.ts | 2 - .../src/pi/bridge/__tests__/bridge.test.ts | 5 +- .../agent-runtime/src/pi/bridge/bridge.ts | 5 +- .../src/runtime-thread-rewind.test.ts | 56 +++++++++++++++++++ packages/agent-runtime/src/runtime.ts | 29 ++++++++++ .../src/test/fake-provider-script.ts | 12 +++- 6 files changed, 102 insertions(+), 7 deletions(-) diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index ecb96d3bde..12a54843f8 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -89,8 +89,6 @@ interface ThreadEditMessageCommandOptions { self?: boolean; } -type ThreadBannerActionCommandOptions = ThreadActionOptions; - type ThreadTellDeliveryMode = "auto" | "queue" | "steer"; interface PostThreadMessageArgs { diff --git a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts index 6958733ed2..3c5d4ec476 100644 --- a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts +++ b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts @@ -528,7 +528,10 @@ describe("pi bridge", () => { } expect(response).toMatchObject({ id: 40, - result: { threadId: targetThreadId }, + result: { + providerThreadId: targetThreadId, + threadId: targetThreadId, + }, }); // The forked session is materialized at the NEW thread's deterministic diff --git a/packages/agent-runtime/src/pi/bridge/bridge.ts b/packages/agent-runtime/src/pi/bridge/bridge.ts index e77253c3dc..78ab65bc0d 100644 --- a/packages/agent-runtime/src/pi/bridge/bridge.ts +++ b/packages/agent-runtime/src/pi/bridge/bridge.ts @@ -741,7 +741,10 @@ async function startPiThreadSession({ throw error; } - sendResult(id, { threadId }); + // Pi has no separately minted session id: its provider identity is the BB + // thread id. Return that identity synchronously so callers do not have to + // race the thread/identity notification emitted after start/fork. + sendResult(id, { threadId, providerThreadId: threadId }); } async function handleThreadStart( diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts index 0a15d12ca1..a1c11fe0e3 100644 --- a/packages/agent-runtime/src/runtime-thread-rewind.test.ts +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -168,4 +168,60 @@ describe("prepareThreadRewind", () => { await runtime.shutdown(); } }); + + it("discards a staged fork when its response does not identify an adoptable provider thread", async () => { + const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); + temporaryDirectories.push(workspacePath); + const commands: AdapterCommand[] = []; + const runtime = createAgentRuntimeWithAdapters({ + workspacePath, + onEvent: () => undefined, + onToolCall: async () => ({ + contentItems: [{ type: "inputText", text: "ok" }], + success: true, + }), + adapterFactory: () => { + const adapter = createRecordingAdapter({ + recordedCommands: commands, + scriptPath: fakeProviderScriptPath, + }); + return { + ...adapter, + process: { + ...adapter.process, + args: [...adapter.process.args, "--thread-id-provider-identity"], + }, + }; + }, + }); + const request = { + environmentId: "env-1", + threadId: "thread-1", + leaseId: "lease-1", + operationId: "edit-op-ambiguous-identity", + projectId: "project-1", + providerId: "pi", + sourceProviderThreadId: "provider-source-1", + retainThroughProviderCheckpoint: "turn-before-edit", + options: fullRuntimeOptions, + instructionMode: "append" as const, + }; + const stagingThreadId = "thread-1:rewind:edit-op-ambiguous-identity"; + + try { + await expect(runtime.prepareThreadRewind(request)).rejects.toThrow( + "pi did not return a provider thread for rewind operation edit-op-ambiguous-identity", + ); + expect(commands).toContainEqual( + expect.objectContaining({ + type: "thread/discard", + providerThreadId: stagingThreadId, + threadId: stagingThreadId, + }), + ); + expect(runtime.hasThread(stagingThreadId)).toBe(false); + } finally { + await runtime.shutdown(); + } + }); }); diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index 82cc5b624a..2ae09cd8bc 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -1527,6 +1527,7 @@ function createAgentRuntimeInternal( threadId: stagingThreadId, }); let retainedForDiscard = false; + let providerThreadIdForCleanup: string | undefined; try { const envVars = buildThreadShellEnvironment({ baseShellEnv: options.shellEnv, @@ -1565,6 +1566,14 @@ function createAgentRuntimeInternal( resultSchema: threadIdentityResultSchema, timeoutMs: THREAD_CREATION_REQUEST_TIMEOUT_MS, }); + // An ambiguous threadId is not sufficient to adopt a provider + // thread, but it is safe to use for best-effort cleanup because + // the BB staging id is unique to this rewind operation. + providerThreadIdForCleanup = + result.providerThreadId ?? + result.thread?.id ?? + result.threadId ?? + undefined; const providerThreadId = resolveThreadIdentityResult({ result, threadId: stagingThreadId, @@ -1602,6 +1611,26 @@ function createAgentRuntimeInternal( return { providerThreadId }; } finally { if (!retainedForDiscard) { + if (providerThreadIdForCleanup !== undefined) { + try { + const cleanupCommand = proc.adapter.buildCommandPlan({ + type: "thread/discard", + threadId: stagingThreadId, + providerThreadId: providerThreadIdForCleanup, + }); + if (cleanupCommand.kind === "request") { + await sendCommand({ + proc, + message: cleanupCommand, + resultSchema: ignoredJsonRpcResultSchema, + }); + } + } catch (error) { + options.onStderr?.( + `Failed to discard unretained staged rewind ${operationId}: ${error instanceof Error ? error.message : String(error)}`, + ); + } + } suppressedThreadEventIds.delete(stagingThreadId); threadIdentityRegistry.forgetThread({ providerState: proc.identity, diff --git a/packages/agent-runtime/src/test/fake-provider-script.ts b/packages/agent-runtime/src/test/fake-provider-script.ts index 88ef7859d8..967fa43d12 100644 --- a/packages/agent-runtime/src/test/fake-provider-script.ts +++ b/packages/agent-runtime/src/test/fake-provider-script.ts @@ -70,6 +70,9 @@ const defaultModelList = { const simulateArchivedSession = process.argv.includes("--archived-session"); const failUnarchive = process.argv.includes("--unarchive-fails"); let failNextDiscard = process.argv.includes("--discard-fails-once"); +const returnThreadIdAsProviderIdentity = process.argv.includes( + "--thread-id-provider-identity", +); // Exit right after reporting the archived error, so recovery has to work // against a replacement process. const exitAfterArchivedError = process.argv.includes("--exit-after-archived"); @@ -439,8 +442,9 @@ function startOrResumeThread( ): void { const params = getParams(message); const threadId = getString(params.threadId, "unknown"); - const providerThreadId = - mode === "resume" + const providerThreadId = returnThreadIdAsProviderIdentity + ? threadId + : mode === "resume" ? getString(params.providerThreadId) || `resumed-${nextProviderThreadId++}` : `prov-${nextProviderThreadId++}`; @@ -455,7 +459,9 @@ function startOrResumeThread( send({ jsonrpc: "2.0", id: getJsonRpcId(message.id) ?? 0, - result: { providerThreadId }, + result: returnThreadIdAsProviderIdentity + ? { threadId } + : { providerThreadId }, }); if (mode === "start" || mode === "fork") { From 6760bb302b3c059f056799ade3c86e50249633b2 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Mon, 10 Aug 2026 20:37:41 -0700 Subject: [PATCH 5/9] Address sent-message edit review findings --- .../ThreadTimelineRows.actions.test.tsx | 58 + .../thread-runtime-mutations.test.tsx | 22 +- .../mutations/thread-runtime-mutations.ts | 3 + .../views/thread-detail/ThreadDetailView.tsx | 22 +- .../command-output/thread-actions.test.ts | 32 + apps/cli/src/commands/thread/actions.ts | 2 + .../skills/builtin-skills/bb-cli/SKILL.md | 4 +- .../services/threads/thread-edit-message.ts | 20 +- .../test/threads/thread-edit-message.test.ts | 141 +- .../src/runtime-thread-rewind.test.ts | 104 +- packages/agent-runtime/src/runtime.ts | 20 +- .../db/drizzle/0092_windy_doctor_faustus.sql | 2 + packages/db/drizzle/meta/0092_snapshot.json | 3440 +++++++++++++++++ packages/db/drizzle/meta/_journal.json | 7 + packages/db/src/schema.ts | 5 +- packages/db/test/query-plans.test.ts | 22 + .../bundled-types/bb-plugin-sdk.d.ts | 41 +- packages/server-contract/src/api/threads.ts | 2 +- .../src/generated/plugin-sdk-dts.generated.ts | 2 +- .../src/generated/templates.generated.ts | 2 +- .../src/templates/bb-guide-threads.md | 3 +- 21 files changed, 3895 insertions(+), 59 deletions(-) create mode 100644 packages/db/drizzle/0092_windy_doctor_faustus.sql create mode 100644 packages/db/drizzle/meta/0092_snapshot.json diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx index bc4c38f2ea..46cd7f0c8d 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx @@ -94,6 +94,43 @@ function SameThreadSearchNavigationHarness() { ); } +function EditActionAvailabilityHarness({ + onEditMessage, +}: { + onEditMessage: NonNullable< + ComponentProps<typeof ThreadTimelineRows>["onEditMessage"] + >; +}) { + const [isIdle, setIsIdle] = useState(false); + const [rows] = useState(() => [ + conversationRow({ + id: "earlier_user_message", + role: "user", + text: "An earlier request.", + sourceSeqStart: 3, + }), + conversationRow({ + id: "latest_user_message", + role: "user", + text: "The latest request.", + sourceSeqStart: 7, + }), + ]); + return ( + <> + <button type="button" onClick={() => setIsIdle(true)}> + Complete turn + </button> + <ThreadTimelineRows + timelineRows={rows} + onEditMessage={isIdle ? onEditMessage : undefined} + threadRuntimeDisplayStatus={isIdle ? "idle" : "active"} + workspaceRootPath={undefined} + /> + </> + ); +} + function SearchOlderRowsHarness({ onLoadOlderRows, }: { @@ -378,6 +415,27 @@ describe("ThreadTimelineRows actions", () => { }); }); + it("restores edit actions on every cached message after an active turn becomes idle", () => { + const onEditMessage = vi.fn(); + renderWithRouter( + <EditActionAvailabilityHarness onEditMessage={onEditMessage} />, + ); + expect( + screen.queryAllByRole("button", { name: "Edit message" }), + ).toHaveLength(0); + + fireEvent.click(screen.getByRole("button", { name: "Complete turn" })); + + const editButtons = screen.getAllByRole("button", { + name: "Edit message", + }); + expect(editButtons).toHaveLength(2); + fireEvent.click(editButtons[0]!); + expect(onEditMessage).toHaveBeenCalledWith( + expect.objectContaining({ messageId: "earlier_user_message" }), + ); + }); + it("replaces the matching sent message with an inline editor host", () => { const onHostElementChange = vi.fn(); const view = renderWithRouter( diff --git a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx index a35f7eccc3..b0048dca0f 100644 --- a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx +++ b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx @@ -8,6 +8,7 @@ import type { } from "@bb/server-contract"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { BbHttpError, sdk } from "@/lib/sdk"; +import { wsManager } from "@/lib/ws"; import { createQueryClientTestHarness } from "@/test/queryClientTestHarness"; import { threadQueuedMessagesQueryKey, @@ -115,6 +116,7 @@ const executionInputSources = { } satisfies ExistingThreadExecutionInputSources; beforeEach(() => { + vi.mocked(wsManager.getConnectionState).mockReturnValue("connected"); vi.mocked(sdk.threads.cancelPlan).mockResolvedValue({ ok: true }); vi.mocked(sdk.threads.clearGoal).mockResolvedValue({ ok: true }); vi.mocked(sdk.threads.editMessage).mockResolvedValue({ @@ -136,7 +138,7 @@ afterEach(() => { }); describe("thread runtime mutations", () => { - it("keeps the existing timeline while an edit is pending and invalidates it after success", async () => { + it("keeps the existing timeline while an edit is pending and lets connected realtime own success", async () => { const { queryClient, wrapper } = createQueryClientTestHarness(); const invalidateQueries = vi.spyOn(queryClient, "invalidateQueries"); const edit = deferred<{ @@ -180,6 +182,24 @@ describe("thread runtime mutations", () => { expectedRequestSequence: 41, input: [{ type: "text", text: "Replacement", mentions: [] }], }); + expect(invalidateQueries).not.toHaveBeenCalled(); + }); + + it("invalidates rewritten history after edit success when realtime is disconnected", async () => { + vi.mocked(wsManager.getConnectionState).mockReturnValue("reconnecting"); + const { queryClient, wrapper } = createQueryClientTestHarness(); + const invalidateQueries = vi.spyOn(queryClient, "invalidateQueries"); + const { result } = renderHook(() => useEditThreadMessage(), { wrapper }); + + await act(async () => { + await result.current.mutateAsync({ + id: "thread-1", + operationId: "edit-op-disconnected", + expectedRequestSequence: 41, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }); + }); + expect(invalidateQueries).toHaveBeenCalledWith( expect.objectContaining({ queryKey: threadTimelineQueryKey("thread-1") }), ); diff --git a/apps/app/src/hooks/mutations/thread-runtime-mutations.ts b/apps/app/src/hooks/mutations/thread-runtime-mutations.ts index bf78ebd0d3..f25991b35d 100644 --- a/apps/app/src/hooks/mutations/thread-runtime-mutations.ts +++ b/apps/app/src/hooks/mutations/thread-runtime-mutations.ts @@ -226,6 +226,9 @@ export function useEditThreadMessage() { mutationFn: ({ id, ...request }: EditMessageMutationRequest) => sdk.threads.editMessage({ threadId: id, ...request }), onSuccess: (_result, variables) => { + if (wsManager.getConnectionState() === "connected") { + return; + } invalidateThreadHistoryRewriteQueries({ queryClient, threadId: variables.id, diff --git a/apps/app/src/views/thread-detail/ThreadDetailView.tsx b/apps/app/src/views/thread-detail/ThreadDetailView.tsx index 97b4b40f56..73576a2a5f 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailView.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailView.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useNavigate } from "react-router-dom"; import { useAtom } from "jotai"; import { atomWithStorage } from "jotai/utils"; @@ -984,9 +984,12 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { providerId: thread.providerId, runtimeDisplayStatus: thread.runtime.displayStatus, }); - const enterSentMessageEdit = useCallback( + const sentMessageEditEntryRef = useRef({ canEditSentMessages, thread }); + sentMessageEditEntryRef.current = { canEditSentMessages, thread }; + const handleEditSentMessage = useCallback<ThreadTimelineEditMessageHandler>( (target: ThreadTimelineEditMessageTarget) => { - if (!thread || !canEditSentMessages) { + const current = sentMessageEditEntryRef.current; + if (!current.thread || !current.canEditSentMessages) { return; } const editDraft = promptInputToDraft(target.input); @@ -996,10 +999,10 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { originalDraft: editDraft, operationId: crypto.randomUUID(), target, - threadId: thread.id, + threadId: current.thread.id, }); }, - [canEditSentMessages, thread], + [], ); const sentMessageEditThreadId = sentMessageEditSession?.threadId ?? null; const sentMessageEditTargetMessageId = @@ -1024,15 +1027,6 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { setSentMessageEditSession(null); appToast.warning("The message being edited is no longer available."); }, [shouldDiscardMissingSentMessageEdit]); - const handleEditSentMessage = useCallback<ThreadTimelineEditMessageHandler>( - (target) => { - if (!canEditSentMessages) { - return; - } - enterSentMessageEdit(target); - }, - [canEditSentMessages, enterSentMessageEdit], - ); const activeSentMessageEditOperationId = activeSentMessageEditSession?.operationId ?? null; const updateSentMessageEditDraft = useCallback( diff --git a/apps/cli/src/__tests__/command-output/thread-actions.test.ts b/apps/cli/src/__tests__/command-output/thread-actions.test.ts index a6a8f5bf6b..d1ac141521 100644 --- a/apps/cli/src/__tests__/command-output/thread-actions.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-actions.test.ts @@ -135,6 +135,38 @@ describe("bb thread action command output", () => { ); }); + it("bb thread edit-message preserves an agent caller when targeting another thread", async () => { + vi.stubEnv("BB_THREAD_ID", "thread-agent-caller"); + const submitEdit = vi.fn(async () => ({ + ok: true, + operationId: "edit-op-server", + requestSequence: 43, + })); + stubServerApi({ + "v1.threads.:id.edit-message.$post": submitEdit, + }); + + await runCommand( + [ + "thread", + "edit-message", + "thread-edit-target", + "--message", + "Replacement", + "--expected-request-sequence", + "41", + ], + register, + ); + + expect(submitEdit).toHaveBeenCalledWith({ + param: { id: "thread-edit-target" }, + json: expect.objectContaining({ + senderThreadId: "thread-agent-caller", + }), + }); + }); + it("bb thread edit-message accepts an explicit stale-edit guard", async () => { vi.stubEnv("BB_THREAD_ID", "thread-edit-self"); const getEdit = vi.fn(); diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index 12a54843f8..b55bbf24d2 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -398,11 +398,13 @@ export function registerActionsCommands( requestedSequence ?? (await sdk.threads.getLatestMessageEdit({ threadId })) .expectedRequestSequence; + const senderThreadId = resolveSenderThreadId(threadId); const result = await sdk.threads.editMessage({ threadId, operationId: randomUUID(), expectedRequestSequence, input: buildPromptInputs({ message: opts.message }), + ...(senderThreadId !== undefined ? { senderThreadId } : {}), }); if ( outputJson(opts, { diff --git a/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md b/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md index fea0700c2b..a3385c7d11 100644 --- a/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md +++ b/apps/server/src/services/skills/builtin-skills/bb-cli/SKILL.md @@ -347,7 +347,9 @@ or artifacts, validation performed, and blockers. the latest completed user message in an idle Codex, Claude Code, or Pi thread. Pass `--expected-request-sequence <sequence>` to select an earlier message. Opening edit mode in the app is non-destructive; history changes only when the - edit is submitted successfully, and workspace changes remain. + edit is submitted successfully, and workspace changes remain. When an agent + edits another thread, the CLI carries its `BB_THREAD_ID` so the replacement + runs under agent permission policy. - `bb thread tell` steers by default, delivering the message immediately into the active turn. Use `--mode queue` when the message is non-urgent and the agent can finish its current work first. Steer is especially important for a diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts index 828c87663f..13735fa966 100644 --- a/apps/server/src/services/threads/thread-edit-message.ts +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -3,6 +3,7 @@ import { and, desc, eq, lt, sql } from "drizzle-orm"; import { deleteThreadEventSuffixInTransaction, events, + getActivePendingInteractionForThread, getExperiments, getHighWaterMarks, getThread, @@ -38,7 +39,10 @@ import { LIVE_DAEMON_COMMAND_TIMEOUT_MS, runLiveHostCommand, } from "../hosts/live-command.js"; -import { sendThreadMessage } from "./thread-send.js"; +import { + resolveMessageSenderThreadId, + sendThreadMessage, +} from "./thread-send.js"; type ThreadRewindPrepareCommand = Extract< HostDaemonCommand, @@ -68,6 +72,7 @@ function requestFingerprint(payload: EditMessageRequest): string { model: payload.model, permissionMode: payload.permissionMode, reasoningLevel: payload.reasoningLevel, + senderThreadId: payload.senderThreadId, serviceTier: payload.serviceTier, }), ) @@ -480,6 +485,11 @@ export async function editThreadMessage( if (hasQueuedThreadMessages(deps.db, args.thread.id)) { conflict("Send or remove queued messages before editing a message"); } + const senderThreadId = resolveMessageSenderThreadId(deps, { + senderThreadId: args.payload.senderThreadId, + targetThread: args.thread, + }); + const initiator = senderThreadId === null ? "user" : "agent"; const target = resolveEditableTurn( deps.db, @@ -512,7 +522,7 @@ export async function editThreadMessage( execution, permissionEscalation: resolvePermissionEscalation({ thread: args.thread, - initiator: "user", + initiator, }), environment: readyEnvironment, projectId: args.thread.projectId, @@ -560,6 +570,11 @@ export async function editThreadMessage( try { await sendThreadMessage(deps, { beforeAppendInTransaction: ({ tx }) => { + if (getActivePendingInteractionForThread(tx, args.thread.id)) { + conflict( + "Resolve the pending interaction before editing the message", + ); + } if (hasQueuedThreadMessages(tx, args.thread.id)) { conflict("Send or remove queued messages before editing a message"); } @@ -632,6 +647,7 @@ export async function editThreadMessage( ...(args.payload.executionInputSources !== undefined ? { executionInputSources: args.payload.executionInputSources } : {}), + ...(senderThreadId !== null ? { senderThreadId } : {}), }, thread: args.thread, trigger: "user", diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts index 7b3388c78f..db29787347 100644 --- a/apps/server/test/threads/thread-edit-message.test.ts +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -1,5 +1,6 @@ import { claimQueuedThreadMessage, + createPendingInteraction, createPromptHistoryEntry, getThread, listEvents, @@ -14,7 +15,7 @@ import { turnScope, type PromptInput, } from "@bb/domain"; -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import { editThreadMessage, getLatestThreadMessageEdit, @@ -225,6 +226,84 @@ function seedEditableThread( } describe("editThreadMessage", () => { + it("preserves an agent caller and applies agent permission policy", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + includeSecondTurn: false, + }); + const senderThread = seedThread(harness.deps, { + environmentId: environment.id, + projectId: thread.projectId, + providerId: "codex", + status: "active", + }); + + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-agent-caller", + expectedRequestSequence: 2, + input: [ + { type: "text", text: "Replacement by agent", mentions: [] }, + ], + permissionMode: "accept-edits", + senderThreadId: senderThread.id, + }, + }), + ).resolves.toMatchObject({ ok: true, requestSequence: 8 }); + + const replacement = listEvents(harness.db, { threadId: thread.id }).find( + (event) => event.sequence === 8, + ); + expect(JSON.parse(replacement?.data ?? "null")).toMatchObject({ + initiator: "agent", + senderThreadId: senderThread.id, + execution: { + permissionMode: "accept-edits", + }, + input: [ + expect.objectContaining({ + type: "text", + text: expect.stringContaining("Replacement by agent"), + }), + ], + }); + const start = await waitForQueuedCommand( + harness, + (queued) => + queued.command.type === "thread.start" && + queued.command.threadId === thread.id, + ); + expect(start.command).toMatchObject({ + options: { permissionEscalation: "deny" }, + }); + }); + }); + + it("rejects an unknown agent caller before rewriting history", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness, { + includeSecondTurn: false, + }); + + await expect( + editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-unknown-agent", + expectedRequestSequence: 2, + input: [{ type: "text", text: "Replacement", mentions: [] }], + senderThreadId: "thread-does-not-exist", + }, + }), + ).rejects.toThrow("Sender thread is invalid"); + expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(6); + }); + }); + it("resolves the latest user message when a later turn was agent-initiated", async () => { await withTestHarness(async (harness) => { const { thread } = seedEditableThread(harness); @@ -753,6 +832,66 @@ describe("editThreadMessage", () => { }); }); + it("rechecks pending interactions in the edit commit transaction", async () => { + await withTestHarness(async (harness) => { + const { environment, thread } = seedEditableThread(harness); + let pendingInteractionChecks = 0; + const originalHasPendingInteraction = + harness.deps.pendingInteractions.hasPendingThreadInteraction.bind( + harness.deps.pendingInteractions, + ); + const pendingInteractionSpy = vi + .spyOn(harness.deps.pendingInteractions, "hasPendingThreadInteraction") + .mockImplementation((threadId) => { + pendingInteractionChecks += 1; + if (pendingInteractionChecks === 2) { + createPendingInteraction(harness.db, { + originKind: "plugin", + pluginId: "plugin-edit-race", + rendererId: "renderer-edit-race", + threadId, + turnId: null, + payload: JSON.stringify({ kind: "plugin", title: "Confirm" }), + }); + return false; + } + return originalHasPendingInteraction(threadId); + }); + try { + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-interaction-race", + expectedRequestSequence: 7, + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + const rejectedEdit = expect(editPromise).rejects.toThrow( + "Resolve the pending interaction before editing the message", + ); + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: "provider-staged-interaction-race", + }); + const discard = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.discard", + ); + await reportQueuedCommandSuccess(harness, discard, {}); + await rejectedEdit; + expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength( + 11, + ); + } finally { + pendingInteractionSpy.mockRestore(); + } + }); + }); + it("discards the staged rewind when the thread changes before commit", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts index a1c11fe0e3..c9c5bbd9a2 100644 --- a/packages/agent-runtime/src/runtime-thread-rewind.test.ts +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -66,8 +66,12 @@ describe("prepareThreadRewind", () => { sourceProviderThreadId: "provider-source-1", }), ]); + const stagingThreadId = commands.find( + (command) => command.type === "thread/fork", + )?.threadId; + expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); expect(events).toEqual([]); - expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(true); + expect(runtime.hasThread(stagingThreadId!)).toBe(true); await expect( runtime.prepareThreadRewind({ ...request, @@ -83,7 +87,7 @@ describe("prepareThreadRewind", () => { expect( commands.filter((command) => command.type === "thread/discard"), ).toEqual([]); - expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(true); + expect(runtime.hasThread(stagingThreadId!)).toBe(true); await runtime.discardThreadRewind({ leaseId: "lease-2", operationId: "edit-op-1", @@ -94,10 +98,10 @@ describe("prepareThreadRewind", () => { ).toEqual([ expect.objectContaining({ providerThreadId: results[0]?.providerThreadId, - threadId: "thread-1:rewind:edit-op-1", + threadId: stagingThreadId, }), ]); - expect(runtime.hasThread("thread-1:rewind:edit-op-1")).toBe(false); + expect(runtime.hasThread(stagingThreadId!)).toBe(false); } finally { await runtime.shutdown(); } @@ -107,6 +111,7 @@ describe("prepareThreadRewind", () => { const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); temporaryDirectories.push(workspacePath); const stderr: string[] = []; + const commands: AdapterCommand[] = []; const runtime = createAgentRuntimeWithAdapters({ workspacePath, onEvent: () => undefined, @@ -117,7 +122,7 @@ describe("prepareThreadRewind", () => { }), adapterFactory: () => { const adapter = createRecordingAdapter({ - recordedCommands: [], + recordedCommands: commands, scriptPath: fakeProviderScriptPath, }); return { @@ -144,14 +149,16 @@ describe("prepareThreadRewind", () => { try { await runtime.prepareThreadRewind(request); + const stagingThreadId = commands.find( + (command) => command.type === "thread/fork", + )?.threadId; + expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); await runtime.discardThreadRewind({ leaseId: request.leaseId, operationId: request.operationId, threadId: request.threadId, }); - expect(runtime.hasThread("thread-1:rewind:edit-op-retry-cleanup")).toBe( - true, - ); + expect(runtime.hasThread(stagingThreadId!)).toBe(true); expect(stderr).toEqual([ expect.stringContaining("discard is temporarily unavailable"), ]); @@ -161,9 +168,7 @@ describe("prepareThreadRewind", () => { operationId: request.operationId, threadId: request.threadId, }); - expect(runtime.hasThread("thread-1:rewind:edit-op-retry-cleanup")).toBe( - false, - ); + expect(runtime.hasThread(stagingThreadId!)).toBe(false); } finally { await runtime.shutdown(); } @@ -206,12 +211,14 @@ describe("prepareThreadRewind", () => { options: fullRuntimeOptions, instructionMode: "append" as const, }; - const stagingThreadId = "thread-1:rewind:edit-op-ambiguous-identity"; - try { await expect(runtime.prepareThreadRewind(request)).rejects.toThrow( "pi did not return a provider thread for rewind operation edit-op-ambiguous-identity", ); + const stagingThreadId = commands.find( + (command) => command.type === "thread/fork", + )?.threadId; + expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); expect(commands).toContainEqual( expect.objectContaining({ type: "thread/discard", @@ -219,7 +226,76 @@ describe("prepareThreadRewind", () => { threadId: stagingThreadId, }), ); - expect(runtime.hasThread(stagingThreadId)).toBe(false); + expect(runtime.hasThread(stagingThreadId!)).toBe(false); + } finally { + await runtime.shutdown(); + } + }); + + it("keeps Pi staging sessions distinct when external operation ids sanitize alike", async () => { + const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); + temporaryDirectories.push(workspacePath); + const commands: AdapterCommand[] = []; + const runtime = createAgentRuntimeWithAdapters({ + workspacePath, + onEvent: () => undefined, + onToolCall: async () => ({ + contentItems: [{ type: "inputText", text: "ok" }], + success: true, + }), + adapterFactory: () => + createRecordingAdapter({ + recordedCommands: commands, + scriptPath: fakeProviderScriptPath, + }), + }); + const baseRequest = { + environmentId: "env-1", + threadId: "thread-1", + projectId: "project-1", + providerId: "pi", + sourceProviderThreadId: "provider-source-1", + options: fullRuntimeOptions, + instructionMode: "append" as const, + }; + + try { + await runtime.prepareThreadRewind({ + ...baseRequest, + leaseId: "lease-slash", + operationId: "a/b", + retainThroughProviderCheckpoint: "checkpoint-slash", + }); + await runtime.prepareThreadRewind({ + ...baseRequest, + leaseId: "lease-question", + operationId: "a?b", + retainThroughProviderCheckpoint: "checkpoint-question", + }); + + const stagingThreadIds = commands + .filter((command) => command.type === "thread/fork") + .map((command) => command.threadId); + expect(stagingThreadIds).toHaveLength(2); + expect(new Set(stagingThreadIds).size).toBe(2); + expect( + new Set( + stagingThreadIds.map((threadId) => + threadId.replace(/[^A-Za-z0-9._-]/g, "_"), + ), + ).size, + ).toBe(2); + + await runtime.discardThreadRewind({ + leaseId: "lease-slash", + operationId: "a/b", + threadId: "thread-1", + }); + await runtime.discardThreadRewind({ + leaseId: "lease-question", + operationId: "a?b", + threadId: "thread-1", + }); } finally { await runtime.shutdown(); } diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index 2ae09cd8bc..379302a230 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -1,3 +1,4 @@ +import { createHash } from "node:crypto"; import path from "node:path"; import { z } from "zod"; import { @@ -180,6 +181,16 @@ const THREAD_GOAL_CLEAR_EVENT_TIMEOUT_MS = 5_000; const PREPARED_THREAD_REWIND_TTL_MS = 5 * 60_000; const PREPARED_THREAD_REWIND_RETRY_MS = 30_000; +function preparedThreadRewindStagingThreadId( + threadId: string, + operationId: string, +): string { + const operationDigest = createHash("sha256") + .update(operationId) + .digest("hex"); + return `${threadId}:rewind:${operationDigest}`; +} + interface ThreadRuntimeConfig { dynamicTools?: DynamicTool[]; disallowedTools?: readonly string[]; @@ -1518,7 +1529,14 @@ function createAgentRuntimeInternal( providerId, }); - const stagingThreadId = `${threadId}:rewind:${operationId}`; + // Provider adapters may turn this identity into a filesystem key. + // Hash the external idempotency key so distinct unsafe characters + // cannot collapse onto the same provider session path (Pi replaces + // each unsafe character with an underscore). + const stagingThreadId = preparedThreadRewindStagingThreadId( + threadId, + operationId, + ); suppressedThreadEventIds.add(stagingThreadId); threadIdentityRegistry.registerThreadProvider({ providerId, diff --git a/packages/db/drizzle/0092_windy_doctor_faustus.sql b/packages/db/drizzle/0092_windy_doctor_faustus.sql new file mode 100644 index 0000000000..c1009b2b01 --- /dev/null +++ b/packages/db/drizzle/0092_windy_doctor_faustus.sql @@ -0,0 +1,2 @@ +DROP INDEX IF EXISTS `thread_search_segments_thread_idx`;--> statement-breakpoint +CREATE INDEX IF NOT EXISTS `thread_search_segments_thread_source_seq_idx` ON `thread_search_segments` (`thread_id`,`source_seq`); diff --git a/packages/db/drizzle/meta/0092_snapshot.json b/packages/db/drizzle/meta/0092_snapshot.json new file mode 100644 index 0000000000..fedda2c448 --- /dev/null +++ b/packages/db/drizzle/meta/0092_snapshot.json @@ -0,0 +1,3440 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "844ac91a-7746-44d4-b60f-dd235fa51627", + "prevId": "5b18174f-ab74-455c-ade6-d10d8677baf2", + "tables": { + "app_settings": { + "name": "app_settings", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "caffeinate": { + "name": "caffeinate", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "show_keyboard_hints": { + "name": "show_keyboard_hints", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "steer_active_thread_on_enter": { + "name": "steer_active_thread_on_enter", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "show_unhandled_provider_events": { + "name": "show_unhandled_provider_events", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "codex_memory_enabled": { + "name": "codex_memory_enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "claude_code_memory_enabled": { + "name": "claude_code_memory_enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "codex_subagents_disabled": { + "name": "codex_subagents_disabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "claude_code_subagents_disabled": { + "name": "claude_code_subagents_disabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "claude_code_workflows_disabled": { + "name": "claude_code_workflows_disabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "keybinding_overrides": { + "name": "keybinding_overrides", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "onboarding_completed_at": { + "name": "onboarding_completed_at", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "app_theme": { + "name": "app_theme", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "theme_id": { + "name": "theme_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "favicon_color": { + "name": "favicon_color", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'default'" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "apikey": { + "name": "apikey", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "start": { + "name": "start", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "referenceId": { + "name": "referenceId", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "refillInterval": { + "name": "refillInterval", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "refillAmount": { + "name": "refillAmount", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "lastRefillAt": { + "name": "lastRefillAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rateLimitEnabled": { + "name": "rateLimitEnabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rateLimitTimeWindow": { + "name": "rateLimitTimeWindow", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rateLimitMax": { + "name": "rateLimitMax", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "requestCount": { + "name": "requestCount", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "remaining": { + "name": "remaining", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "lastRequest": { + "name": "lastRequest", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expiresAt": { + "name": "expiresAt", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permissions": { + "name": "permissions", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "configId": { + "name": "configId", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "apikey_key_unique": { + "name": "apikey_key_unique", + "columns": [ + "key" + ], + "isUnique": true + }, + "apikey_reference_id_idx": { + "name": "apikey_reference_id_idx", + "columns": [ + "referenceId" + ], + "isUnique": false + }, + "apikey_config_id_idx": { + "name": "apikey_config_id_idx", + "columns": [ + "configId" + ], + "isUnique": false + } + }, + "foreignKeys": { + "apikey_referenceId_user_id_fk": { + "name": "apikey_referenceId_user_id_fk", + "tableFrom": "apikey", + "tableTo": "user", + "columnsFrom": [ + "referenceId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "emailVerified": { + "name": "emailVerified", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updatedAt": { + "name": "updatedAt", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "user_email_unique": { + "name": "user_email_unique", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "environments": { + "name": "environments", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "host_id": { + "name": "host_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "managed": { + "name": "managed", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "is_git_repo": { + "name": "is_git_repo", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "is_worktree": { + "name": "is_worktree", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "branch_name": { + "name": "branch_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_branch": { + "name": "default_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "merge_base_branch": { + "name": "merge_base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "destroy_attempt_id": { + "name": "destroy_attempt_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "retire_requested_at": { + "name": "retire_requested_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "workspace_provision_type": { + "name": "workspace_provision_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'provisioning'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "environments_project_host_path_idx": { + "name": "environments_project_host_path_idx", + "columns": [ + "project_id", + "host_id", + "path" + ], + "isUnique": true + }, + "environments_host_path_lookup_idx": { + "name": "environments_host_path_lookup_idx", + "columns": [ + "host_id", + "path" + ], + "isUnique": false + }, + "environments_project_idx": { + "name": "environments_project_idx", + "columns": [ + "project_id" + ], + "isUnique": false + }, + "environments_status_idx": { + "name": "environments_status_idx", + "columns": [ + "status" + ], + "isUnique": false + } + }, + "foreignKeys": { + "environments_project_id_projects_id_fk": { + "name": "environments_project_id_projects_id_fk", + "tableFrom": "environments", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "environments_host_id_hosts_id_fk": { + "name": "environments_host_id_hosts_id_fk", + "tableFrom": "environments", + "tableTo": "hosts", + "columnsFrom": [ + "host_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "events": { + "name": "events", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "environment_id": { + "name": "environment_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "scope_kind": { + "name": "scope_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "turn_id": { + "name": "turn_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_thread_id": { + "name": "provider_thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sequence": { + "name": "sequence", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "item_id": { + "name": "item_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "item_kind": { + "name": "item_kind", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'{}'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "events_thread_sequence_idx": { + "name": "events_thread_sequence_idx", + "columns": [ + "thread_id", + "sequence" + ], + "isUnique": true + }, + "events_thread_type_item_kind_sequence_idx": { + "name": "events_thread_type_item_kind_sequence_idx", + "columns": [ + "thread_id", + "type", + "item_kind", + "sequence" + ], + "isUnique": false + }, + "events_background_task_thread_type_item_sequence_idx": { + "name": "events_background_task_thread_type_item_sequence_idx", + "columns": [ + "thread_id", + "type", + "item_id", + "sequence" + ], + "isUnique": false, + "where": "\"events\".\"item_kind\" = 'backgroundTask'" + }, + "events_thread_type_sequence_idx": { + "name": "events_thread_type_sequence_idx", + "columns": [ + "thread_id", + "type", + "sequence" + ], + "isUnique": false + }, + "events_thread_turn_type_item_sequence_idx": { + "name": "events_thread_turn_type_item_sequence_idx", + "columns": [ + "thread_id", + "turn_id", + "type", + "item_id", + "sequence" + ], + "isUnique": false + }, + "events_environment_idx": { + "name": "events_environment_idx", + "columns": [ + "environment_id" + ], + "isUnique": false + }, + "events_completed_item_truncation_idx": { + "name": "events_completed_item_truncation_idx", + "columns": [ + "item_kind", + "created_at", + "id" + ], + "isUnique": false, + "where": "\"events\".\"type\" = 'item/completed'" + }, + "events_goal_thread_sequence_idx": { + "name": "events_goal_thread_sequence_idx", + "columns": [ + "thread_id", + "sequence" + ], + "isUnique": false, + "where": "\"events\".\"type\" IN ('thread/goal/updated', 'thread/goal/cleared')" + } + }, + "foreignKeys": { + "events_thread_id_threads_id_fk": { + "name": "events_thread_id_threads_id_fk", + "tableFrom": "events", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "events_environment_id_environments_id_fk": { + "name": "events_environment_id_environments_id_fk", + "tableFrom": "events", + "tableTo": "environments", + "columnsFrom": [ + "environment_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": { + "events_scope_shape_check": { + "name": "events_scope_shape_check", + "value": "(\n (\"events\".\"scope_kind\" = 'turn' AND \"events\".\"turn_id\" IS NOT NULL)\n OR\n (\"events\".\"scope_kind\" = 'thread' AND \"events\".\"turn_id\" IS NULL)\n )" + } + } + }, + "host_daemon_sessions": { + "name": "host_daemon_sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "host_id": { + "name": "host_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "instance_id": { + "name": "instance_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "host_name": { + "name": "host_name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "host_type": { + "name": "host_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "data_dir": { + "name": "data_dir", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "protocol_version": { + "name": "protocol_version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "heartbeat_interval_ms": { + "name": "heartbeat_interval_ms", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "lease_timeout_ms": { + "name": "lease_timeout_ms", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "lease_expires_at": { + "name": "lease_expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "closed_at": { + "name": "closed_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "host_daemon_sessions_host_status_idx": { + "name": "host_daemon_sessions_host_status_idx", + "columns": [ + "host_id", + "status" + ], + "isUnique": false + }, + "host_daemon_sessions_host_latest_idx": { + "name": "host_daemon_sessions_host_latest_idx", + "columns": [ + "host_id", + "updated_at", + "created_at", + "id" + ], + "isUnique": false + }, + "host_daemon_sessions_closed_prune_idx": { + "name": "host_daemon_sessions_closed_prune_idx", + "columns": [ + "status", + "closed_at", + "id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "host_daemon_sessions_host_id_hosts_id_fk": { + "name": "host_daemon_sessions_host_id_hosts_id_fk", + "tableFrom": "host_daemon_sessions", + "tableTo": "hosts", + "columnsFrom": [ + "host_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "hosts": { + "name": "hosts", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "connect_machine_id": { + "name": "connect_machine_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "max_permission_mode": { + "name": "max_permission_mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'full'" + }, + "destroyed_at": { + "name": "destroyed_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_seen_at": { + "name": "last_seen_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_rejected_protocol_version": { + "name": "last_rejected_protocol_version", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "hosts_last_seen_idx": { + "name": "hosts_last_seen_idx", + "columns": [ + "last_seen_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugins": { + "name": "plugins", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "source": { + "name": "source", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provenance": { + "name": "provenance", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'direct'" + }, + "catalog_entry_id": { + "name": "catalog_entry_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_kind": { + "name": "source_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'path'" + }, + "source_path": { + "name": "source_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_builtin_name": { + "name": "source_builtin_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_npm_package": { + "name": "source_npm_package", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_npm_registry": { + "name": "source_npm_registry", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_npm_requested_spec": { + "name": "source_npm_requested_spec", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_npm_spec_kind": { + "name": "source_npm_spec_kind", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_git_url": { + "name": "source_git_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_git_subdirectory": { + "name": "source_git_subdirectory", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_git_requested_ref": { + "name": "source_git_requested_ref", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_git_ref_kind": { + "name": "source_git_ref_kind", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "npm_resolved_version": { + "name": "npm_resolved_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "npm_integrity": { + "name": "npm_integrity", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_resolved_commit": { + "name": "git_resolved_commit", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_update_check_at": { + "name": "last_update_check_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "available_compatible_version": { + "name": "available_compatible_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "newest_incompatible_version": { + "name": "newest_incompatible_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "update_status_detail": { + "name": "update_status_detail", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_failure_version": { + "name": "last_failure_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_failure_at": { + "name": "last_failure_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_failure_detail": { + "name": "last_failure_detail", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "active_artifact_id": { + "name": "active_artifact_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "normalization_version": { + "name": "normalization_version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "root_dir": { + "name": "root_dir", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version": { + "name": "version", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "removed_at": { + "name": "removed_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "installed_at": { + "name": "installed_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "plugins_active_artifact_id_plugin_artifacts_id_fk": { + "name": "plugins_active_artifact_id_plugin_artifacts_id_fk", + "tableFrom": "plugins", + "tableTo": "plugin_artifacts", + "columnsFrom": [ + "active_artifact_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "maintenance_scan_cursors": { + "name": "maintenance_scan_cursors", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "policy": { + "name": "policy", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "version": { + "name": "version", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "item_kind": { + "name": "item_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "output_path": { + "name": "output_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_created_at": { + "name": "last_created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "last_event_id": { + "name": "last_event_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "maintenance_scan_cursors_path_idx": { + "name": "maintenance_scan_cursors_path_idx", + "columns": [ + "policy", + "version", + "item_kind", + "output_path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "pending_interactions": { + "name": "pending_interactions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "origin_kind": { + "name": "origin_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'provider'" + }, + "turn_id": { + "name": "turn_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_thread_id": { + "name": "provider_thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_request_id": { + "name": "provider_request_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "renderer_id": { + "name": "renderer_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "payload": { + "name": "payload", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "resolution": { + "name": "resolution", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status_reason": { + "name": "status_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "resolved_at": { + "name": "resolved_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "pending_interactions_provider_request_idx": { + "name": "pending_interactions_provider_request_idx", + "columns": [ + "provider_id", + "provider_thread_id", + "provider_request_id" + ], + "isUnique": true + }, + "pending_interactions_thread_created_idx": { + "name": "pending_interactions_thread_created_idx", + "columns": [ + "thread_id", + "created_at" + ], + "isUnique": false + }, + "pending_interactions_thread_status_created_idx": { + "name": "pending_interactions_thread_status_created_idx", + "columns": [ + "thread_id", + "status", + "created_at" + ], + "isUnique": false + }, + "pending_interactions_status_created_idx": { + "name": "pending_interactions_status_created_idx", + "columns": [ + "status", + "created_at" + ], + "isUnique": false + }, + "pending_interactions_plugin_status_created_idx": { + "name": "pending_interactions_plugin_status_created_idx", + "columns": [ + "plugin_id", + "status", + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": { + "pending_interactions_thread_id_threads_id_fk": { + "name": "pending_interactions_thread_id_threads_id_fk", + "tableFrom": "pending_interactions", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugin_artifacts": { + "name": "plugin_artifacts", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_kind": { + "name": "source_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "npm_resolved_version": { + "name": "npm_resolved_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_resolved_commit": { + "name": "git_resolved_commit", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "integrity": { + "name": "integrity", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "content_hash": { + "name": "content_hash", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "validation_result": { + "name": "validation_result", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "validated_at": { + "name": "validated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "plugin_artifacts_plugin_idx": { + "name": "plugin_artifacts_plugin_idx", + "columns": [ + "plugin_id" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugin_kv": { + "name": "plugin_kv", + "columns": { + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "plugin_kv_plugin_id_key_pk": { + "columns": [ + "plugin_id", + "key" + ], + "name": "plugin_kv_plugin_id_key_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugin_schedules": { + "name": "plugin_schedules", + "columns": { + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cron": { + "name": "cron", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "next_run_at": { + "name": "next_run_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_run_at": { + "name": "last_run_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_status": { + "name": "last_status", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_error": { + "name": "last_error", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "plugin_schedules_plugin_id_name_pk": { + "columns": [ + "plugin_id", + "name" + ], + "name": "plugin_schedules_plugin_id_name_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugin_settings": { + "name": "plugin_settings", + "columns": { + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "plugin_settings_plugin_id_key_pk": { + "columns": [ + "plugin_id", + "key" + ], + "name": "plugin_settings_plugin_id_key_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "plugin_state_snapshots": { + "name": "plugin_state_snapshots", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "plugin_id": { + "name": "plugin_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "from_artifact_id": { + "name": "from_artifact_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "to_artifact_id": { + "name": "to_artifact_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "snapshot_path": { + "name": "snapshot_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "database_path": { + "name": "database_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "state_path": { + "name": "state_path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "secrets_path": { + "name": "secrets_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "registration_path": { + "name": "registration_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rollback_candidate_version": { + "name": "rollback_candidate_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "rollback_source_fingerprint": { + "name": "rollback_source_fingerprint", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "rollback_bb_version": { + "name": "rollback_bb_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "rollback_sdk_version": { + "name": "rollback_sdk_version", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "rollback_detail": { + "name": "rollback_detail", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "retained_until": { + "name": "retained_until", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "plugin_state_snapshots_plugin_idx": { + "name": "plugin_state_snapshots_plugin_idx", + "columns": [ + "plugin_id" + ], + "isUnique": false + }, + "plugin_state_snapshots_retention_idx": { + "name": "plugin_state_snapshots_retention_idx", + "columns": [ + "retained_until" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "project_execution_defaults": { + "name": "project_execution_defaults", + "columns": { + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "service_tier": { + "name": "service_tier", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reasoning_level": { + "name": "reasoning_level", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission_mode": { + "name": "permission_mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "project_execution_defaults_project_idx": { + "name": "project_execution_defaults_project_idx", + "columns": [ + "project_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "project_execution_defaults_project_id_projects_id_fk": { + "name": "project_execution_defaults_project_id_projects_id_fk", + "tableFrom": "project_execution_defaults", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "project_sources": { + "name": "project_sources", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "host_id": { + "name": "host_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "is_default": { + "name": "is_default", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "project_sources_project_idx": { + "name": "project_sources_project_idx", + "columns": [ + "project_id" + ], + "isUnique": false + }, + "project_sources_host_idx": { + "name": "project_sources_host_idx", + "columns": [ + "host_id" + ], + "isUnique": false + }, + "project_sources_project_host_idx": { + "name": "project_sources_project_host_idx", + "columns": [ + "project_id", + "host_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "project_sources_project_id_projects_id_fk": { + "name": "project_sources_project_id_projects_id_fk", + "tableFrom": "project_sources", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_sources_host_id_hosts_id_fk": { + "name": "project_sources_host_id_hosts_id_fk", + "tableFrom": "project_sources", + "tableTo": "hosts", + "columnsFrom": [ + "host_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": { + "project_sources_shape_check": { + "name": "project_sources_shape_check", + "value": "(\n \"project_sources\".\"type\" = 'local_path' AND \"project_sources\".\"host_id\" IS NOT NULL AND \"project_sources\".\"path\" IS NOT NULL\n )" + } + } + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "kind": { + "name": "kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'standard'" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "git_remote_url": { + "name": "git_remote_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sort_key": { + "name": "sort_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'V'" + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "projects_updated_idx": { + "name": "projects_updated_idx", + "columns": [ + "updated_at" + ], + "isUnique": false + }, + "projects_deleted_idx": { + "name": "projects_deleted_idx", + "columns": [ + "deleted_at" + ], + "isUnique": false + }, + "projects_sort_idx": { + "name": "projects_sort_idx", + "columns": [ + "sort_key", + "id" + ], + "isUnique": false + }, + "projects_personal_singleton_idx": { + "name": "projects_personal_singleton_idx", + "columns": [ + "kind" + ], + "isUnique": true, + "where": "\"projects\".\"kind\" = 'personal'" + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "prompt_history_entries": { + "name": "prompt_history_entries", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "request_sequence": { + "name": "request_sequence", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "input": { + "name": "input", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "prompt_history_entries_thread_request_idx": { + "name": "prompt_history_entries_thread_request_idx", + "columns": [ + "thread_id", + "request_sequence" + ], + "isUnique": true + }, + "prompt_history_entries_project_scope_created_idx": { + "name": "prompt_history_entries_project_scope_created_idx", + "columns": [ + "project_id", + "scope", + "created_at", + "request_sequence", + "id" + ], + "isUnique": false + }, + "prompt_history_entries_thread_scope_created_idx": { + "name": "prompt_history_entries_thread_scope_created_idx", + "columns": [ + "thread_id", + "scope", + "created_at", + "request_sequence", + "id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "prompt_history_entries_project_id_projects_id_fk": { + "name": "prompt_history_entries_project_id_projects_id_fk", + "tableFrom": "prompt_history_entries", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "prompt_history_entries_thread_id_threads_id_fk": { + "name": "prompt_history_entries_thread_id_threads_id_fk", + "tableFrom": "prompt_history_entries", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "queued_thread_messages": { + "name": "queued_thread_messages", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "sender_thread_id": { + "name": "sender_thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "reasoning_level": { + "name": "reasoning_level", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "permission_mode": { + "name": "permission_mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "service_tier": { + "name": "service_tier", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "group_with_next": { + "name": "group_with_next", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "claimed_at": { + "name": "claimed_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "claim_token": { + "name": "claim_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "sort_key": { + "name": "sort_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "queued_thread_messages_thread_created_idx": { + "name": "queued_thread_messages_thread_created_idx", + "columns": [ + "thread_id", + "created_at", + "id" + ], + "isUnique": false + }, + "queued_thread_messages_thread_sort_idx": { + "name": "queued_thread_messages_thread_sort_idx", + "columns": [ + "thread_id", + "sort_key", + "id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "queued_thread_messages_thread_id_threads_id_fk": { + "name": "queued_thread_messages_thread_id_threads_id_fk", + "tableFrom": "queued_thread_messages", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "system_experiments": { + "name": "system_experiments", + "columns": { + "key": { + "name": "key", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "value": { + "name": "value", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "terminal_sessions": { + "name": "terminal_sessions", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "environment_id": { + "name": "environment_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "host_id": { + "name": "host_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "daemon_session_id": { + "name": "daemon_session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "initial_cwd": { + "name": "initial_cwd", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "cols": { + "name": "cols", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "rows": { + "name": "rows", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "exit_code": { + "name": "exit_code", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "close_reason": { + "name": "close_reason", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_user_input_at": { + "name": "last_user_input_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "terminal_sessions_thread_status_updated_idx": { + "name": "terminal_sessions_thread_status_updated_idx", + "columns": [ + "thread_id", + "status", + "updated_at" + ], + "isUnique": false + }, + "terminal_sessions_environment_status_idx": { + "name": "terminal_sessions_environment_status_idx", + "columns": [ + "environment_id", + "status" + ], + "isUnique": false + }, + "terminal_sessions_host_status_idx": { + "name": "terminal_sessions_host_status_idx", + "columns": [ + "host_id", + "status" + ], + "isUnique": false + }, + "terminal_sessions_daemon_session_idx": { + "name": "terminal_sessions_daemon_session_idx", + "columns": [ + "daemon_session_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "terminal_sessions_thread_id_threads_id_fk": { + "name": "terminal_sessions_thread_id_threads_id_fk", + "tableFrom": "terminal_sessions", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "terminal_sessions_environment_id_environments_id_fk": { + "name": "terminal_sessions_environment_id_environments_id_fk", + "tableFrom": "terminal_sessions", + "tableTo": "environments", + "columnsFrom": [ + "environment_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "terminal_sessions_host_id_hosts_id_fk": { + "name": "terminal_sessions_host_id_hosts_id_fk", + "tableFrom": "terminal_sessions", + "tableTo": "hosts", + "columnsFrom": [ + "host_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "terminal_sessions_daemon_session_id_host_daemon_sessions_id_fk": { + "name": "terminal_sessions_daemon_session_id_host_daemon_sessions_id_fk", + "tableFrom": "terminal_sessions", + "tableTo": "host_daemon_sessions", + "columnsFrom": [ + "daemon_session_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "thread_dynamic_context_file_states": { + "name": "thread_dynamic_context_file_states", + "columns": { + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "file_key": { + "name": "file_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content_status": { + "name": "content_status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "content_hash": { + "name": "content_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "shown_at": { + "name": "shown_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "thread_dynamic_context_file_states_thread_file_idx": { + "name": "thread_dynamic_context_file_states_thread_file_idx", + "columns": [ + "thread_id", + "file_key" + ], + "isUnique": true + } + }, + "foreignKeys": { + "thread_dynamic_context_file_states_thread_id_threads_id_fk": { + "name": "thread_dynamic_context_file_states_thread_id_threads_id_fk", + "tableFrom": "thread_dynamic_context_file_states", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "thread_search_segments": { + "name": "thread_search_segments", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_kind": { + "name": "source_kind", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_key": { + "name": "source_key", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source_seq": { + "name": "source_seq", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "thread_search_segments_source_idx": { + "name": "thread_search_segments_source_idx", + "columns": [ + "thread_id", + "source_kind", + "source_key" + ], + "isUnique": true + }, + "thread_search_segments_thread_source_seq_idx": { + "name": "thread_search_segments_thread_source_seq_idx", + "columns": [ + "thread_id", + "source_seq" + ], + "isUnique": false + } + }, + "foreignKeys": { + "thread_search_segments_thread_id_threads_id_fk": { + "name": "thread_search_segments_thread_id_threads_id_fk", + "tableFrom": "thread_search_segments", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "thread_sections": { + "name": "thread_sections", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "thread_sections_name_idx": { + "name": "thread_sections_name_idx", + "columns": [ + "name" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "thread_tabs": { + "name": "thread_tabs", + "columns": { + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "tabs_json": { + "name": "tabs_json", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "revision": { + "name": "revision", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "thread_tabs_thread_id_threads_id_fk": { + "name": "thread_tabs_thread_id_threads_id_fk", + "tableFrom": "thread_tabs", + "tableTo": "threads", + "columnsFrom": [ + "thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "threads": { + "name": "threads", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "environment_id": { + "name": "environment_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "model_override": { + "name": "model_override", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "reasoning_level_override": { + "name": "reasoning_level_override", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "title_fallback": { + "name": "title_fallback", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "section_id": { + "name": "section_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'starting'" + }, + "parent_thread_id": { + "name": "parent_thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source_thread_id": { + "name": "source_thread_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "origin_kind": { + "name": "origin_kind", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "child_origin": { + "name": "child_origin", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "origin_plugin_id": { + "name": "origin_plugin_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "visibility": { + "name": "visibility", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'visible'" + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pinned_at": { + "name": "pinned_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pin_sort_key": { + "name": "pin_sort_key", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_read_at": { + "name": "last_read_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "latest_attention_at": { + "name": "latest_attention_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "threads_project_updated_idx": { + "name": "threads_project_updated_idx", + "columns": [ + "project_id", + "updated_at" + ], + "isUnique": false + }, + "threads_project_archived_deleted_idx": { + "name": "threads_project_archived_deleted_idx", + "columns": [ + "project_id", + "archived_at", + "deleted_at", + "id" + ], + "isUnique": false + }, + "threads_pin_sort_idx": { + "name": "threads_pin_sort_idx", + "columns": [ + "archived_at", + "deleted_at", + "pin_sort_key", + "id" + ], + "isUnique": false, + "where": "\"threads\".\"pinned_at\" IS NOT NULL" + }, + "threads_environment_idx": { + "name": "threads_environment_idx", + "columns": [ + "environment_id" + ], + "isUnique": false + }, + "threads_parent_idx": { + "name": "threads_parent_idx", + "columns": [ + "parent_thread_id" + ], + "isUnique": false + }, + "threads_source_origin_idx": { + "name": "threads_source_origin_idx", + "columns": [ + "source_thread_id", + "origin_kind" + ], + "isUnique": false + }, + "threads_origin_plugin_archived_idx": { + "name": "threads_origin_plugin_archived_idx", + "columns": [ + "origin_plugin_id", + "archived_at" + ], + "isUnique": false + }, + "threads_section_archived_deleted_idx": { + "name": "threads_section_archived_deleted_idx", + "columns": [ + "section_id", + "archived_at", + "deleted_at", + "id" + ], + "isUnique": false + }, + "threads_archived_status_idx": { + "name": "threads_archived_status_idx", + "columns": [ + "archived_at", + "status" + ], + "isUnique": false + }, + "threads_environment_archived_deleted_idx": { + "name": "threads_environment_archived_deleted_idx", + "columns": [ + "environment_id", + "archived_at", + "deleted_at" + ], + "isUnique": false + }, + "threads_active_maintenance_idx": { + "name": "threads_active_maintenance_idx", + "columns": [ + "status" + ], + "isUnique": false, + "where": "\"threads\".\"deleted_at\" IS NULL" + } + }, + "foreignKeys": { + "threads_project_id_projects_id_fk": { + "name": "threads_project_id_projects_id_fk", + "tableFrom": "threads", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "threads_environment_id_environments_id_fk": { + "name": "threads_environment_id_environments_id_fk", + "tableFrom": "threads", + "tableTo": "environments", + "columnsFrom": [ + "environment_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "threads_section_id_thread_sections_id_fk": { + "name": "threads_section_id_thread_sections_id_fk", + "tableFrom": "threads", + "tableTo": "thread_sections", + "columnsFrom": [ + "section_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "threads_parent_thread_id_threads_id_fk": { + "name": "threads_parent_thread_id_threads_id_fk", + "tableFrom": "threads", + "tableTo": "threads", + "columnsFrom": [ + "parent_thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "threads_source_thread_id_threads_id_fk": { + "name": "threads_source_thread_id_threads_id_fk", + "tableFrom": "threads", + "tableTo": "threads", + "columnsFrom": [ + "source_thread_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index c3987d2b50..969783aa3d 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -645,6 +645,13 @@ "when": 1786416023798, "tag": "0091_daffy_dark_phoenix", "breakpoints": true + }, + { + "idx": 92, + "version": "6", + "when": 1786468375011, + "tag": "0092_windy_doctor_faustus", + "breakpoints": true } ] } \ No newline at end of file diff --git a/packages/db/src/schema.ts b/packages/db/src/schema.ts index 417388441d..29677a5b59 100644 --- a/packages/db/src/schema.ts +++ b/packages/db/src/schema.ts @@ -610,7 +610,10 @@ export const threadSearchSegments = sqliteTable( table.sourceKind, table.sourceKey, ), - index("thread_search_segments_thread_idx").on(table.threadId), + index("thread_search_segments_thread_source_seq_idx").on( + table.threadId, + table.sourceSeq, + ), ], ); diff --git a/packages/db/test/query-plans.test.ts b/packages/db/test/query-plans.test.ts index 291d9cbc0d..34fadf3042 100644 --- a/packages/db/test/query-plans.test.ts +++ b/packages/db/test/query-plans.test.ts @@ -527,6 +527,28 @@ describe("slow query index plans", () => { db.$client.close(); }); + it("uses the thread and sequence index for search segment suffix deletes", () => { + const { db } = setup(); + + const details = queryPlanDetails({ + db, + params: ["thread-query-plan", 10, 20], + sql: ` + DELETE FROM thread_search_segments + WHERE thread_id = ? + AND source_seq >= ? + AND source_seq <= ? + `, + }); + + expect(details).toMatch( + /USING (?:COVERING )?INDEX thread_search_segments_thread_source_seq_idx/, + ); + expect(details).not.toContain("SCAN thread_search_segments"); + + db.$client.close(); + }); + it("uses the completed item truncation partial index for emitted cursor scans", () => { const { db, logger, thread } = setup(); const createdBefore = Date.now(); diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index be95c129ac..88ab2db8ea 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -891,9 +891,9 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon }>; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1123,9 +1123,9 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon }>; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1252,9 +1252,9 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon }>; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1324,9 +1324,9 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon }>; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -2084,8 +2084,8 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{ text: z$1.ZodString; status: z$1.ZodEnum<{ pending: "pending"; - in_progress: "in_progress"; completed: "completed"; + in_progress: "in_progress"; }>; }, z$1.core.$strip>>; }, z$1.core.$strip>; @@ -2538,8 +2538,8 @@ declare const skillListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; description: z$1.ZodNullable<z$1.ZodString>; provider: z$1.ZodNullable<z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; "acp-cursor": "acp-cursor"; }>>; scope: z$1.ZodEnum<{ @@ -2889,8 +2889,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - base64: "base64"; utf8: "utf8"; + base64: "base64"; }>; mimeType: z$1.ZodOptional<z$1.ZodString>; sizeBytes: z$1.ZodNumber; @@ -2903,8 +2903,8 @@ declare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{ type EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>; declare const pullRequestMergeMethodSchema: z$1.ZodEnum<{ merge: "merge"; - squash: "squash"; rebase: "rebase"; + squash: "squash"; }>; type PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>; declare const commitActionResponseSchema: z$1.ZodObject<{ @@ -2935,8 +2935,8 @@ declare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{ action: z$1.ZodLiteral<"pull_request_merge">; method: z$1.ZodEnum<{ merge: "merge"; - squash: "squash"; rebase: "rebase"; + squash: "squash"; }>; message: z$1.ZodString; }, z$1.core.$strip>; @@ -3584,8 +3584,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - append: "append"; replace: "replace"; + append: "append"; }>; type: z$1.ZodLiteral<"thread.rewind.prepare">; leaseId: z$1.ZodString; @@ -3786,8 +3786,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - append: "append"; replace: "replace"; + append: "append"; }>; type: z$1.ZodLiteral<"thread.start">; requestId: z$1.ZodString; @@ -4279,8 +4279,8 @@ declare const hostDaemonCommandRegistry: { }>; }, z$1.core.$strip>; instructionMode: z$1.ZodEnum<{ - append: "append"; replace: "replace"; + append: "append"; }>; projectId: z$1.ZodString; providerId: z$1.ZodString; @@ -4593,8 +4593,8 @@ declare const hostDaemonCommandRegistry: { }>; }, z$1.core.$strip>; instructionMode: z$1.ZodEnum<{ - append: "append"; replace: "replace"; + append: "append"; }>; projectId: z$1.ZodString; providerId: z$1.ZodString; @@ -5630,9 +5630,9 @@ declare const hostDaemonCommandRegistry: { executablePath: z$1.ZodNullable<z$1.ZodString>; installed: z$1.ZodBoolean; installSource: z$1.ZodEnum<{ - external: "external"; notInstalled: "notInstalled"; npmGlobal: "npmGlobal"; + external: "external"; }>; currentVersion: z$1.ZodNullable<z$1.ZodString>; latestVersion: z$1.ZodNullable<z$1.ZodString>; @@ -5805,13 +5805,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5855,13 +5855,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5917,13 +5917,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5965,13 +5965,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6089,9 +6089,9 @@ declare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{ executablePath: z$1.ZodNullable<z$1.ZodString>; installed: z$1.ZodBoolean; installSource: z$1.ZodEnum<{ - external: "external"; notInstalled: "notInstalled"; npmGlobal: "npmGlobal"; + external: "external"; }>; currentVersion: z$1.ZodNullable<z$1.ZodString>; latestVersion: z$1.ZodNullable<z$1.ZodString>; @@ -8739,6 +8739,7 @@ declare const editMessageRequestSchema: z$1.ZodObject<{ sizeBytes: z$1.ZodOptional<z$1.ZodNumber>; mimeType: z$1.ZodOptional<z$1.ZodString>; }, z$1.core.$strip>], "type">>; + senderThreadId: z$1.ZodOptional<z$1.ZodString>; model: z$1.ZodOptional<z$1.ZodString>; serviceTier: z$1.ZodOptional<z$1.ZodEnum<{ default: "default"; @@ -10050,8 +10051,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable<z$1.ZodObject<{ mode: z$1.ZodLiteral<"plan">; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; diff --git a/packages/server-contract/src/api/threads.ts b/packages/server-contract/src/api/threads.ts index 4794361bc0..0c4a7f5281 100644 --- a/packages/server-contract/src/api/threads.ts +++ b/packages/server-contract/src/api/threads.ts @@ -273,7 +273,7 @@ export type ContinueAfterProviderRateLimitResponse = z.infer< >; export const editMessageRequestSchema = sendMessageRequestSchema - .omit({ mode: true, senderThreadId: true }) + .omit({ mode: true }) .extend({ operationId: z.string().min(1), expectedRequestSequence: z.number().int().nonnegative(), diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index d29e5980a9..2acedb57ce 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n in_progress: \"in_progress\";\n completed: \"completed\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n codex: \"codex\";\n \"claude-code\": \"claude-code\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n codex: \"codex\";\n \"claude-code\": \"claude-code\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n utf8: \"utf8\";\n base64: \"base64\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n external: \"external\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n external: \"external\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault<z.ZodArray<z.ZodObject<{\n start: z.ZodNumber;\n end: z.ZodNumber;\n resource: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional<z.ZodString>;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable<z.ZodString>;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional<z.ZodString>;\n sizeBytes: z.ZodOptional<z.ZodNumber>;\n mimeType: z.ZodOptional<z.ZodString>;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer<typeof promptInputSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional<z.ZodString>;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable<z.ZodString>;\n branch: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"existing\">;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer<typeof createThreadEnvironmentArgsSchema>;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer<typeof createExecutionInputSourcesSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType<ThreadChatProps>;\ndeclare const Markdown: react.ComponentType<MarkdownProps>;\ndeclare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;\ndeclare const useRpc: <Contract extends PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract<StandardSchemaV1<unknown, unknown>, StandardSchemaV1<unknown, unknown>>>>>() => PluginRpcClient<Contract>;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/packages/templates/src/generated/templates.generated.ts b/packages/templates/src/generated/templates.generated.ts index 48b8c44350..08e7a3a79c 100644 --- a/packages/templates/src/generated/templates.generated.ts +++ b/packages/templates/src/generated/templates.generated.ts @@ -127,7 +127,7 @@ export const templateDefinitions = [ }, { "id": "bbGuideThreads", - "body": "Thread commands\n\nEvery command supports --json for machine-readable output.\n\nSpawning:\n\n bb thread spawn --project <id> --prompt \"...\" [options]\n\n --prompt <prompt> Initial prompt (required)\n --title <title> Thread title\n --project <id> Project (required)\n --parent-thread <id> Parent thread\n --parent-self Parent to the current thread (BB_THREAD_ID)\n --provider <id> Provider override\n --model <model> Model override\n --reasoning-level <level> Reasoning level: low, medium, high, xhigh, max (provider-dependent)\n --environment <id-or-path> Attach to an existing environment (ID or workspace path)\n --new-environment <kind> Create a new environment (worktree)\n --base-branch <branch> Base branch for a new managed worktree\n --machine <id-or-name> Run on a machine (--host is an alias)\n --service-tier <tier> Service tier: fast, default\n --permission-mode <mode> Permission mode: accept-edits, auto, or full\n --section <id> Create the thread in a section\n --visibility <visibility> visible or hidden; a child inherits its parent by default\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n --origin-kind <kind> Create a fork thread\n --source-thread <id> Source thread for a fork\n --source-seq-end <seq> Last included source event sequence\n\n Execution defaults resolve from explicit flags, live parent execution, and\n remembered project defaults. With no remembered model, bb uses the explicitly\n requested provider or Codex and resolves its provider-reported default model\n on the target machine. The product reasoning and permission defaults are\n medium and auto.\n accept-edits uses workspace sandboxing with user-reviewed escalation. auto uses\n the same workspace sandbox with provider-native automatic review. full is the\n explicit sandbox and approval bypass. Plan mode is separate from permissions.\n Subagents inherit the parent's permission mode by default; pass --permission-mode full only when the user or task needs unsandboxed execution.\n Parenting is opt-in. Inside a thread, pass --parent-self to parent the new thread to the current thread.\n Hidden threads are for plugin/background workers. They remain addressable by\n ID while staying out of sidebar organization and unread/pending favicon\n attention. Thread lists exclude them unless\n --include-hidden is passed; direct-ID operations remain available.\n A new child thread inherits the visibility of its parent, so the subagents of\n a hidden thread stay hidden too. Pass --visibility to override the inherited\n value. A hidden child still reports its turns and blockers to its parent\n thread; only source-derived forks stay silent.\n A machine selector accepts an exact ID or an unambiguous name. It works with\n an unmanaged --environment path, --new-environment worktree, or the personal\n workspace. It cannot be combined with an existing environment ID because that\n environment already selects its machine. Without the flag, local/primary\n machine resolution is unchanged.\n\nForking:\n\n bb thread fork <source-thread-id> [options]\n\n --prompt <prompt> Optional first prompt; omit for an idle fork\n --source-seq-end <seq> Fork at this source event sequence (tip by default)\n --workspace <mode> isolated (default) or reuse\n --title <title> Thread title\n --permission-mode <mode> Inherit source by default; accepts accept-edits, auto, full\n --visibility <visibility> visible (default) or hidden\n --agent-context-seed <text> Persist agent-only context without a first run\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Forks clone the source provider session on the same machine. Isolated forks\n create a fresh managed worktree (or personal workspace for personal threads);\n reuse attaches the source environment. Omit --prompt to create an idle fork.\n\nEditing a sent message (requires the `editMessages` experiment):\n\n bb thread edit-message <id> --message \"Replacement text\"\n --self Target the current thread (BB_THREAD_ID)\n --expected-request-sequence <seq> Select the message and reject a stale target\n\n Without --expected-request-sequence, the latest eligible message is edited.\n Codex, Claude Code, and Pi threads are supported. The original conversation\n remains unchanged until the provider prepares the replacement history.\n Submitting replaces that turn and every later turn while retaining workspace\n changes.\n\nListing:\n\n bb thread list List threads\n --project <id> Filter by project\n --parent-thread <id> Filter by parent thread\n --archived Show only archived threads\n --section <id> Filter by section\n --unsectioned Show only threads outside sections\n --include-hidden Include hidden threads\n\n bb thread search <query> Search threads and messages\n bb thread history <id> List prompt history\n\nSections:\n\n bb thread section list\n bb thread section create <name>\n bb thread section rename <id> <name>\n bb thread section delete <id> [--yes]\n\nInspecting:\n\n bb thread show [id] Show thread details and pull request status\n --self Target current thread\n --work-status Include git working-tree status\n --git-diff Include git diff\n --diff-target <type> Diff scope: uncommitted, branch_committed, all, commit\n --diff-sha <sha> Commit SHA (for --diff-target commit)\n --diff-merge-base <branch> Override merge-base branch for diff\n --merge-base-branches List available merge-base branches\n\n Shows pull request status for the attached environment branch when available.\n\n bb thread log [id] Show thread event log\n --self Target current thread\n --format <format> Output format: json, minimal, verbose\n --limit <count> Limit entries\n --after-seq <seq> Paginate after sequence number\n\n bb thread output [id] Get the final output of a thread\n --self Target current thread\n\n bb thread wait <id> Wait for a thread status or event (defaults to --status idle)\n --status <status> Wait for this status\n --event <type> Wait for this event type\n --timeout <seconds> Timeout in seconds (default: 1200 / 20 min)\n --poll-interval <ms> Polling interval in milliseconds\n\nOpening threads and files in the app:\n\n bb thread open <path> Open a file in the current BB thread panel\n bb thread open <thread-id> [path] Open a thread, optionally with a panel file\n --line <number> Line number to focus\n --split <placement> right, down, left, top, or replace\n bb thread pane <action> [thread-id] Maximize, restore, or toggle an open thread pane\n\n Inside a BB thread, BB_THREAD_ID selects the current thread automatically and\n the thread ID argument is omitted for file-only opens. Pass an explicit thread\n ID with --split to open another thread. Outside a BB thread, pass the thread ID\n as the first argument. A thread already open in a pane is focused instead of\n duplicated. Edge placement creates panes through the eighth pane; at eight\n panes, it replaces the focused pane.\n Pane actions broadcast to connected BB app windows and affect the matching\n already-open pane without changing its split tree.\n Paths can be thread-relative workspace paths, or absolute paths inside the\n target thread workspace. Absolute paths under BB_THREAD_STORAGE open as\n thread-storage files for the current thread. Use this for Markdown or HTML\n artifacts you create for the user so they open in the BB IDE.\n\nMessaging:\n\n bb thread tell <id> <message> Send a follow-up message\n --mode <mode> Message mode: steer (default), queue, or auto\n --model <model> Model override for this turn\n --reasoning-level <level> Reasoning level override\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Tell steers by default, delivering the message immediately into the active\n turn. Use --mode queue for non-urgent follow-ups that can wait until the agent\n is free.\n\n bb thread stop [id] Stop an active or provisioning thread\n bb thread retry [id] Continue a subscription-limited turn\n --self Target current thread\n --request-id <id> Require an exact failed request id\n bb thread compact [id] Request compaction of an idle or errored thread's context\n bb thread cancel-plan [id] Exit the provider's active Plan mode\n bb thread clear-goal [id] Clear the provider's active Goal\n --self Target current thread\n\n `thread compact` enqueues the same structured /compact turn used by the\n composer. Follow the thread timeline for the eventual compaction result.\n\n `thread retry` is only for a terminal provider subscription-limit failure.\n The server requires accepted input, available execution settings, no newer\n request, and no provider-owned retry. Prior output or tool activity does not\n disqualify the turn. It starts an agent-only system turn containing `Please\n continue.` on the existing provider conversation; it does not resend the\n original prompt or create another user message. When enabled, the Provider\n retry plugin invokes this continuation automatically for timed limits.\n\nOwnership:\n\n bb thread update [id] Update thread metadata\n --self Target current thread\n --title <title> Set title\n --parent-thread <id> Assign to a parent thread\n --clear-parent-thread Remove parent assignment\n --section <id> Move into a section\n --clear-section Remove section assignment\n --visibility <visibility> Set visible or hidden\n\n bb thread read [id] Mark read\n bb thread unread [id] Mark unread\n bb thread reorder-pinned <id> [--after <id>] [--before <id>]\n\nQueued messages:\n\n bb thread queue list <thread-id>\n bb thread queue create <thread-id> <message>\n bb thread queue update <thread-id> <message-id> <message> [--file <path>] [--image <path>]\n bb thread queue send <thread-id> <message-id> [--mode auto|steer]\n bb thread queue reorder <thread-id> <message-id> [--after <id>] [--before <id>]\n bb thread queue group <thread-id> <boundary-id> --prefix <comma-separated-ids>\n bb thread queue delete <thread-id> <message-id>\n\nPersisted panel tabs:\n\n bb thread tabs show <thread-id>\n bb thread tabs set <thread-id> --expected-revision <n> --tabs-json '<json>'\n\nLifecycle:\n\n bb thread archive [id] Archive a thread (and children/hidden forks)\n --self Archive current thread\n\n bb thread unarchive [id] Unarchive a thread\n --self Unarchive current thread\n\n bb thread delete <id> Delete permanently\n --yes Skip confirmation\n\nRead-only commands require a thread ID or --self where supported.\nMutating thread lifecycle and messaging commands require an explicit ID or --self.", + "body": "Thread commands\n\nEvery command supports --json for machine-readable output.\n\nSpawning:\n\n bb thread spawn --project <id> --prompt \"...\" [options]\n\n --prompt <prompt> Initial prompt (required)\n --title <title> Thread title\n --project <id> Project (required)\n --parent-thread <id> Parent thread\n --parent-self Parent to the current thread (BB_THREAD_ID)\n --provider <id> Provider override\n --model <model> Model override\n --reasoning-level <level> Reasoning level: low, medium, high, xhigh, max (provider-dependent)\n --environment <id-or-path> Attach to an existing environment (ID or workspace path)\n --new-environment <kind> Create a new environment (worktree)\n --base-branch <branch> Base branch for a new managed worktree\n --machine <id-or-name> Run on a machine (--host is an alias)\n --service-tier <tier> Service tier: fast, default\n --permission-mode <mode> Permission mode: accept-edits, auto, or full\n --section <id> Create the thread in a section\n --visibility <visibility> visible or hidden; a child inherits its parent by default\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n --origin-kind <kind> Create a fork thread\n --source-thread <id> Source thread for a fork\n --source-seq-end <seq> Last included source event sequence\n\n Execution defaults resolve from explicit flags, live parent execution, and\n remembered project defaults. With no remembered model, bb uses the explicitly\n requested provider or Codex and resolves its provider-reported default model\n on the target machine. The product reasoning and permission defaults are\n medium and auto.\n accept-edits uses workspace sandboxing with user-reviewed escalation. auto uses\n the same workspace sandbox with provider-native automatic review. full is the\n explicit sandbox and approval bypass. Plan mode is separate from permissions.\n Subagents inherit the parent's permission mode by default; pass --permission-mode full only when the user or task needs unsandboxed execution.\n Parenting is opt-in. Inside a thread, pass --parent-self to parent the new thread to the current thread.\n Hidden threads are for plugin/background workers. They remain addressable by\n ID while staying out of sidebar organization and unread/pending favicon\n attention. Thread lists exclude them unless\n --include-hidden is passed; direct-ID operations remain available.\n A new child thread inherits the visibility of its parent, so the subagents of\n a hidden thread stay hidden too. Pass --visibility to override the inherited\n value. A hidden child still reports its turns and blockers to its parent\n thread; only source-derived forks stay silent.\n A machine selector accepts an exact ID or an unambiguous name. It works with\n an unmanaged --environment path, --new-environment worktree, or the personal\n workspace. It cannot be combined with an existing environment ID because that\n environment already selects its machine. Without the flag, local/primary\n machine resolution is unchanged.\n\nForking:\n\n bb thread fork <source-thread-id> [options]\n\n --prompt <prompt> Optional first prompt; omit for an idle fork\n --source-seq-end <seq> Fork at this source event sequence (tip by default)\n --workspace <mode> isolated (default) or reuse\n --title <title> Thread title\n --permission-mode <mode> Inherit source by default; accepts accept-edits, auto, full\n --visibility <visibility> visible (default) or hidden\n --agent-context-seed <text> Persist agent-only context without a first run\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Forks clone the source provider session on the same machine. Isolated forks\n create a fresh managed worktree (or personal workspace for personal threads);\n reuse attaches the source environment. Omit --prompt to create an idle fork.\n\nEditing a sent message (requires the `editMessages` experiment):\n\n bb thread edit-message <id> --message \"Replacement text\"\n --self Target the current thread (BB_THREAD_ID)\n --expected-request-sequence <seq> Select the message and reject a stale target\n\n Without --expected-request-sequence, the latest eligible message is edited.\n Codex, Claude Code, and Pi threads are supported. The original conversation\n remains unchanged until the provider prepares the replacement history.\n Submitting replaces that turn and every later turn while retaining workspace\n changes. From an agent thread, the command carries `BB_THREAD_ID` so the\n replacement runs under agent permission policy.\n\nListing:\n\n bb thread list List threads\n --project <id> Filter by project\n --parent-thread <id> Filter by parent thread\n --archived Show only archived threads\n --section <id> Filter by section\n --unsectioned Show only threads outside sections\n --include-hidden Include hidden threads\n\n bb thread search <query> Search threads and messages\n bb thread history <id> List prompt history\n\nSections:\n\n bb thread section list\n bb thread section create <name>\n bb thread section rename <id> <name>\n bb thread section delete <id> [--yes]\n\nInspecting:\n\n bb thread show [id] Show thread details and pull request status\n --self Target current thread\n --work-status Include git working-tree status\n --git-diff Include git diff\n --diff-target <type> Diff scope: uncommitted, branch_committed, all, commit\n --diff-sha <sha> Commit SHA (for --diff-target commit)\n --diff-merge-base <branch> Override merge-base branch for diff\n --merge-base-branches List available merge-base branches\n\n Shows pull request status for the attached environment branch when available.\n\n bb thread log [id] Show thread event log\n --self Target current thread\n --format <format> Output format: json, minimal, verbose\n --limit <count> Limit entries\n --after-seq <seq> Paginate after sequence number\n\n bb thread output [id] Get the final output of a thread\n --self Target current thread\n\n bb thread wait <id> Wait for a thread status or event (defaults to --status idle)\n --status <status> Wait for this status\n --event <type> Wait for this event type\n --timeout <seconds> Timeout in seconds (default: 1200 / 20 min)\n --poll-interval <ms> Polling interval in milliseconds\n\nOpening threads and files in the app:\n\n bb thread open <path> Open a file in the current BB thread panel\n bb thread open <thread-id> [path] Open a thread, optionally with a panel file\n --line <number> Line number to focus\n --split <placement> right, down, left, top, or replace\n bb thread pane <action> [thread-id] Maximize, restore, or toggle an open thread pane\n\n Inside a BB thread, BB_THREAD_ID selects the current thread automatically and\n the thread ID argument is omitted for file-only opens. Pass an explicit thread\n ID with --split to open another thread. Outside a BB thread, pass the thread ID\n as the first argument. A thread already open in a pane is focused instead of\n duplicated. Edge placement creates panes through the eighth pane; at eight\n panes, it replaces the focused pane.\n Pane actions broadcast to connected BB app windows and affect the matching\n already-open pane without changing its split tree.\n Paths can be thread-relative workspace paths, or absolute paths inside the\n target thread workspace. Absolute paths under BB_THREAD_STORAGE open as\n thread-storage files for the current thread. Use this for Markdown or HTML\n artifacts you create for the user so they open in the BB IDE.\n\nMessaging:\n\n bb thread tell <id> <message> Send a follow-up message\n --mode <mode> Message mode: steer (default), queue, or auto\n --model <model> Model override for this turn\n --reasoning-level <level> Reasoning level override\n --file <path> Host-readable absolute or uploaded file path\n --image <path> Host-readable absolute or uploaded image path\n\n Tell steers by default, delivering the message immediately into the active\n turn. Use --mode queue for non-urgent follow-ups that can wait until the agent\n is free.\n\n bb thread stop [id] Stop an active or provisioning thread\n bb thread retry [id] Continue a subscription-limited turn\n --self Target current thread\n --request-id <id> Require an exact failed request id\n bb thread compact [id] Request compaction of an idle or errored thread's context\n bb thread cancel-plan [id] Exit the provider's active Plan mode\n bb thread clear-goal [id] Clear the provider's active Goal\n --self Target current thread\n\n `thread compact` enqueues the same structured /compact turn used by the\n composer. Follow the thread timeline for the eventual compaction result.\n\n `thread retry` is only for a terminal provider subscription-limit failure.\n The server requires accepted input, available execution settings, no newer\n request, and no provider-owned retry. Prior output or tool activity does not\n disqualify the turn. It starts an agent-only system turn containing `Please\n continue.` on the existing provider conversation; it does not resend the\n original prompt or create another user message. When enabled, the Provider\n retry plugin invokes this continuation automatically for timed limits.\n\nOwnership:\n\n bb thread update [id] Update thread metadata\n --self Target current thread\n --title <title> Set title\n --parent-thread <id> Assign to a parent thread\n --clear-parent-thread Remove parent assignment\n --section <id> Move into a section\n --clear-section Remove section assignment\n --visibility <visibility> Set visible or hidden\n\n bb thread read [id] Mark read\n bb thread unread [id] Mark unread\n bb thread reorder-pinned <id> [--after <id>] [--before <id>]\n\nQueued messages:\n\n bb thread queue list <thread-id>\n bb thread queue create <thread-id> <message>\n bb thread queue update <thread-id> <message-id> <message> [--file <path>] [--image <path>]\n bb thread queue send <thread-id> <message-id> [--mode auto|steer]\n bb thread queue reorder <thread-id> <message-id> [--after <id>] [--before <id>]\n bb thread queue group <thread-id> <boundary-id> --prefix <comma-separated-ids>\n bb thread queue delete <thread-id> <message-id>\n\nPersisted panel tabs:\n\n bb thread tabs show <thread-id>\n bb thread tabs set <thread-id> --expected-revision <n> --tabs-json '<json>'\n\nLifecycle:\n\n bb thread archive [id] Archive a thread (and children/hidden forks)\n --self Archive current thread\n\n bb thread unarchive [id] Unarchive a thread\n --self Unarchive current thread\n\n bb thread delete <id> Delete permanently\n --yes Skip confirmation\n\nRead-only commands require a thread ID or --self where supported.\nMutating thread lifecycle and messaging commands require an explicit ID or --self.", "fileName": "bb-guide-threads.md", "kind": "instruction", "title": "bb Guide — Threads", diff --git a/packages/templates/src/templates/bb-guide-threads.md b/packages/templates/src/templates/bb-guide-threads.md index 78c225c16c..d9ff1f6c61 100644 --- a/packages/templates/src/templates/bb-guide-threads.md +++ b/packages/templates/src/templates/bb-guide-threads.md @@ -87,7 +87,8 @@ Editing a sent message (requires the `editMessages` experiment): Codex, Claude Code, and Pi threads are supported. The original conversation remains unchanged until the provider prepares the replacement history. Submitting replaces that turn and every later turn while retaining workspace - changes. + changes. From an agent thread, the command carries `BB_THREAD_ID` so the + replacement runs under agent permission policy. Listing: From ea62666245280ed7919b082d348f9e861d051489 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Tue, 11 Aug 2026 12:38:24 -0700 Subject: [PATCH 6/9] Simplify sent-message editing surfaces - fold latest-target resolution into POST /edit-message: omitting expectedRequestSequence atomically edits the latest eligible message, replacing the GET latest-message-edit route, SDK method, and the CLI's racy GET-then-POST two-step - parse stored events through parseStoredEvent + type narrowing instead of hand-rolled JSON parsers, and reuse hasRootStoredTurnStarted - build the rewind-prepare command with a destructure-rest spread, dropping the dead disallowedTools branch - derive the request target kind from the staged fork instead of threading a redundant historyReplacement field - reuse threadStartResultSchema for the identical prepare result shape - migrate the inline-queued attachment path onto useDraftAttachmentUploads, inline the one-caller sentMessageEdit helpers, and drop the expectedRequestSequence round-trip and experiment-flag prop threading through the prompt area Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --- .../useComposerAttachmentUploads.ts | 143 ++++-------- .../thread/timeline/MessageActionBar.test.tsx | 39 ---- .../thread/timeline/ThreadTimelineRows.tsx | 21 +- .../ThreadDetailPromptArea.test.tsx | 4 - .../thread-detail/ThreadDetailPromptArea.tsx | 111 +++++---- .../views/thread-detail/ThreadDetailView.tsx | 95 +++----- .../thread-detail/sentMessageEdit.test.ts | 81 ------- .../views/thread-detail/sentMessageEdit.ts | 69 ------ .../command-output/thread-actions.test.ts | 17 +- apps/cli/src/commands/thread/actions.ts | 27 +-- apps/server/src/routes/threads/actions.ts | 10 +- .../services/threads/thread-edit-message.ts | 221 +++++------------- .../src/services/threads/thread-send.ts | 10 +- .../test/threads/thread-edit-message.test.ts | 95 +++++--- .../agent-runtime/src/pi/bridge/bridge.ts | 16 +- packages/host-daemon-contract/src/commands.ts | 5 +- .../bundled-types/bb-plugin-sdk.d.ts | 157 +++---------- packages/sdk/src/areas/threads.ts | 13 -- packages/sdk/test/public-types.test.ts | 1 - packages/sdk/test/sdk.test.ts | 16 +- packages/server-contract/src/api/threads.ts | 13 +- packages/server-contract/src/public-api.ts | 7 - .../src/generated/plugin-sdk-dts.generated.ts | 2 +- plans/issue-1114-edit-sent-message.md | 17 +- 24 files changed, 329 insertions(+), 861 deletions(-) delete mode 100644 apps/app/src/views/thread-detail/sentMessageEdit.test.ts delete mode 100644 apps/app/src/views/thread-detail/sentMessageEdit.ts diff --git a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts index 93d382344b..174e0a70d3 100644 --- a/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts +++ b/apps/app/src/components/thread/embedded-chat/useComposerAttachmentUploads.ts @@ -25,11 +25,6 @@ export interface UseComposerAttachmentUploadsResult { isAttachingInlineFiles: boolean; } -interface AttachmentOperationState { - error: string | null; - pendingCount: number; -} - export interface DraftAttachmentUploadTarget { /** Changes whenever a newly mounted draft must not receive older uploads. */ key: string; @@ -48,14 +43,12 @@ export interface UseDraftAttachmentUploadsResult { isAttachingFiles: boolean; } -interface DraftAttachmentOperationState extends AttachmentOperationState { +interface DraftAttachmentOperationState { + error: string | null; + pendingCount: number; targetKey: string | null; } -interface InlineAttachmentOperationState extends AttachmentOperationState { - editSessionId: number | null; -} - /** Upload state for one independently mounted composer draft. */ export function useDraftAttachmentUploads({ projectId, @@ -151,7 +144,6 @@ export function useComposerAttachmentUploads({ inlineEditingQueuedMessageRef, commitInlineQueuedMessage, }: UseComposerAttachmentUploadsArgs): UseComposerAttachmentUploadsResult { - const uploadPromptAttachment = useUploadPromptAttachment(); const { attachmentError: bottomAttachmentError, setAttachmentError: setBottomAttachmentError, @@ -161,110 +153,59 @@ export function useComposerAttachmentUploads({ projectId, target: { key: "bottom", addAttachment: addDraftAttachment }, }); - const [inlineOperation, setInlineOperation] = - useState<InlineAttachmentOperationState>({ - editSessionId: null, - error: null, - pendingCount: 0, - }); - - const setInlineAttachmentError = useCallback( - (error: string | null) => { - const editSessionId = inlineEditingQueuedMessage?.editSessionId ?? null; - setInlineOperation((current) => ({ - editSessionId, - error, - pendingCount: - current.editSessionId === editSessionId ? current.pendingCount : 0, - })); - }, - [inlineEditingQueuedMessage?.editSessionId], - ); - - const handleAttachInlineFiles = useCallback( - async (files: File[]) => { - if (!inlineEditingQueuedMessage || files.length === 0) return; - const { editSessionId, ownerThreadId, queuedMessageId } = - inlineEditingQueuedMessage; - setInlineOperation((current) => ({ - editSessionId, - error: null, - pendingCount: - current.editSessionId === editSessionId - ? current.pendingCount + 1 - : 1, - })); - const failedFiles: string[] = []; - try { - for (const file of files) { - try { - const uploaded = await uploadPromptAttachment.mutateAsync({ - projectId, - file, - }); - const current = inlineEditingQueuedMessageRef.current; - if ( - current?.editSessionId === editSessionId && - current.ownerThreadId === ownerThreadId && - current.queuedMessageId === queuedMessageId && - !current.draft.attachments.some( - (existing) => existing.path === uploaded.path, - ) - ) { - commitInlineQueuedMessage({ - ...current, - draft: { - ...current.draft, - attachments: [...current.draft.attachments, uploaded], - }, - }); - } - } catch { - failedFiles.push(file.name); - } - } - } finally { - setInlineOperation((current) => - current.editSessionId === editSessionId - ? { - editSessionId, - error: - failedFiles.length > 0 && - inlineEditingQueuedMessageRef.current?.editSessionId === - editSessionId - ? `Failed to attach: ${failedFiles.join(", ")}` - : current.error, - pendingCount: Math.max(0, current.pendingCount - 1), - } - : current, - ); + const inlineEditSessionId = inlineEditingQueuedMessage?.editSessionId ?? null; + const addInlineAttachment = useCallback( + (uploaded: PromptDraftAttachment) => { + const current = inlineEditingQueuedMessageRef.current; + if ( + current === null || + current.editSessionId !== inlineEditSessionId || + current.draft.attachments.some( + (existing) => existing.path === uploaded.path, + ) + ) { + return; } + commitInlineQueuedMessage({ + ...current, + draft: { + ...current.draft, + attachments: [...current.draft.attachments, uploaded], + }, + }); }, [ commitInlineQueuedMessage, - inlineEditingQueuedMessage, + inlineEditSessionId, inlineEditingQueuedMessageRef, - projectId, - uploadPromptAttachment, ], ); - - const currentInlineEditSessionId = - inlineEditingQueuedMessage?.editSessionId ?? null; - const isCurrentInlineOperation = - inlineOperation.editSessionId === currentInlineEditSessionId; + const { + attachmentError: inlineAttachmentError, + setAttachmentError: setInlineAttachmentError, + handleAttachFiles: handleAttachInlineFiles, + isAttachingFiles: isAttachingInlineFiles, + } = useDraftAttachmentUploads({ + projectId, + // `editSessionId` is monotonically unique per edit session, so a key match + // is a session match. + target: + inlineEditSessionId !== null + ? { + key: String(inlineEditSessionId), + addAttachment: addInlineAttachment, + } + : null, + }); return { bottomAttachmentError, setBottomAttachmentError, handleAttachBottomFiles, isAttachingBottomFiles, - inlineAttachmentError: isCurrentInlineOperation - ? inlineOperation.error - : null, + inlineAttachmentError, setInlineAttachmentError, handleAttachInlineFiles, - isAttachingInlineFiles: - isCurrentInlineOperation && inlineOperation.pendingCount > 0, + isAttachingInlineFiles, }; } diff --git a/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx b/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx index 25ed7e38d8..87dd0cc931 100644 --- a/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx +++ b/apps/app/src/components/thread/timeline/MessageActionBar.test.tsx @@ -70,22 +70,6 @@ describe("MessageActionBar", () => { expect(onSendToMain).toHaveBeenCalledTimes(1); }); - it("renders edit as a native action and fires its handler", () => { - const onEdit = vi.fn(); - render( - <MessageActionBar - messageText="A sent request." - alignment="end" - mobileActionDisplay="inline" - onEdit={onEdit} - />, - ); - - fireEvent.click(screen.getByRole("button", { name: "Edit message" })); - - expect(onEdit).toHaveBeenCalledTimes(1); - }); - it("orders agent actions as copy, add, then fork", () => { const { container } = render( <MessageActionBar @@ -127,29 +111,6 @@ describe("MessageActionBar", () => { ).toEqual(["Copy message", "Add to chat", "Fork into new thread"]); }); - it("includes edit in the compact mobile overflow", () => { - mockMobileCoarsePointer(); - const onEdit = vi.fn(); - render( - <MessageActionBar - messageText="A sent request." - alignment="end" - mobileActionDisplay="overflow" - onEdit={onEdit} - />, - ); - - fireEvent.click(screen.getByRole("button", { name: "Message actions" })); - const content = - document.body.querySelector<HTMLElement>('[data-side="top"]'); - if (!content) throw new Error("Missing mobile message action menu"); - fireEvent.click( - within(content).getByRole("button", { name: "Edit message" }), - ); - - expect(onEdit).toHaveBeenCalledTimes(1); - }); - it("renders plugin actions after the native ones and fires their handlers", () => { const onSelect = vi.fn(); const { container } = render( diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx index 447fad2911..0788f59eee 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.tsx @@ -9,7 +9,7 @@ import { useState, useSyncExternalStore, } from "react"; -import type { ReactNode, RefCallback } from "react"; +import type { ReactNode } from "react"; import { useLocation } from "react-router-dom"; import { isBackgroundAgentTaskType, @@ -208,8 +208,7 @@ interface TimelineRendererStaticContextValue { getViewRows: GetTimelineViewRows; onForkMessage: ThreadTimelineForkMessageHandler | undefined; onEditMessage: ThreadTimelineEditMessageHandler | undefined; - inlineMessageEditorHostRef: RefCallback<HTMLDivElement> | undefined; - inlineMessageEditorMessageId: string | null; + inlineMessageEditor: ThreadTimelineInlineMessageEditor | undefined; onMessageAddToChat: ThreadTimelineAddToChatHandler | undefined; onSendToMainMessage: ThreadTimelineSendToMainMessageHandler | undefined; onSelectionAddToChat: ThreadTimelineAddToChatHandler | undefined; @@ -909,8 +908,7 @@ function ConversationRow({ ); const { canSpawnChild, - inlineMessageEditorHostRef, - inlineMessageEditorMessageId, + inlineMessageEditor, onEditMessage, onForkMessage, onMessageAddToChat, @@ -932,11 +930,15 @@ function ConversationRow({ workspaceRootPath, } = useTimelineRendererStaticContext(); const senderThreadMetadataById = useSenderThreadMetadataContext(); - if (row.role === "user" && inlineMessageEditorMessageId === row.id) { + if ( + row.role === "user" && + inlineMessageEditor !== undefined && + inlineMessageEditor.messageId === row.id + ) { return ( <div className="ml-auto w-full max-w-[70%] max-md:max-w-full"> <div - ref={inlineMessageEditorHostRef} + ref={inlineMessageEditor.onHostElementChange} data-sent-message-inline-editor-host="" /> </div> @@ -2077,10 +2079,7 @@ function ThreadTimelineRowsForTimelineView(props: ThreadTimelineRowsProps) { getViewRows, onForkMessage: props.onForkMessage, onEditMessage: props.onEditMessage, - inlineMessageEditorHostRef: - props.inlineMessageEditor?.onHostElementChange, - inlineMessageEditorMessageId: - props.inlineMessageEditor?.messageId ?? null, + inlineMessageEditor: props.inlineMessageEditor, onMessageAddToChat: props.onMessageAddToChat, onSendToMainMessage: props.onSendToMainMessage, onSelectionAddToChat: selectionAddToChatHandler, diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx index 08aeb54b44..2ee35e457b 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx @@ -664,7 +664,6 @@ function buildPromptAreaElement({ goal={goal} modelFallback={modelFallback} isEnvironmentActionPending={false} - isSentMessageEditExperimentEnabled onChangedFileClick={vi.fn()} openThreadDiffPanel={vi.fn()} parentThreadSection={null} @@ -752,7 +751,6 @@ describe("ThreadDetailPromptArea", () => { mentions: [], attachments: [], }, - expectedRequestSequence: 42, hostElement, isSubmitting: false, operationId: "edit-operation-1", @@ -817,7 +815,6 @@ describe("ThreadDetailPromptArea", () => { supportsServiceTier: false, executionInputSources: {}, }, - expectedRequestSequence: 42, input: [{ type: "text", text: "Edited request", mentions: [] }], }); expect(mocks.promptDraft.clearIfCurrentMatches).not.toHaveBeenCalled(); @@ -848,7 +845,6 @@ describe("ThreadDetailPromptArea", () => { renderPromptArea({ sentMessageEdit: { draft: { text: "Edited request", mentions: [], attachments: [] }, - expectedRequestSequence: 42, hostElement, isSubmitting: false, operationId: "edit-operation-1", diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx index 6b7f0ad999..897293dab5 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx @@ -117,14 +117,12 @@ const ignorePromptBannerFileClick = () => {}; export interface ThreadDetailSentMessageEdit { draft: PromptDraftState; - expectedRequestSequence: number; hostElement: HTMLDivElement | null; isSubmitting: boolean; operationId: string; onCancel: () => void; onSubmit: (target: { execution: FollowUpExecutionSelection; - expectedRequestSequence: number; input: PromptInput[]; }) => void; updateDraft: ( @@ -209,7 +207,6 @@ interface ThreadDetailPromptAreaProps { sendMessage: SendMessageMutationLike; /** Present only while a sent-message editor is mounted in the timeline. */ sentMessageEdit?: ThreadDetailSentMessageEdit; - isSentMessageEditExperimentEnabled: boolean; steerActiveThreadOnEnter: boolean; /** * Bumped by the timeline host each time a quote is appended to the shared @@ -256,7 +253,6 @@ export function ThreadDetailPromptArea({ pullRequest, sendMessage, sentMessageEdit, - isSentMessageEditExperimentEnabled, steerActiveThreadOnEnter, composerFocusRequestNonce, thread, @@ -399,10 +395,11 @@ export function ThreadDetailPromptArea({ const queuedComposerTextEffects = useComposerTextEffects( queuedComposerTextEffectKey, ); + const sentMessageComposerTextEffectKey = sentMessageEdit + ? `sent-message:${thread.id}:${sentMessageEdit.operationId}` + : null; const sentMessageComposerTextEffects = useComposerTextEffects( - sentMessageEdit - ? `sent-message:${thread.id}:${sentMessageEdit.operationId}` - : null, + sentMessageComposerTextEffectKey, ); const [expandedBannerSection, setExpandedBannerSection] = useState<ThreadPromptContextBannerExpandedSection | null>(null); @@ -685,11 +682,13 @@ export function ThreadDetailPromptArea({ ); const sentMessagePluginComposerHost = useMemo<PluginComposerHost | null>(() => { - if (!sentMessageEdit) return null; + if (!sentMessageEdit || sentMessageComposerTextEffectKey === null) { + return null; + } const { draft, operationId } = sentMessageEdit; return { scope: { kind: "thread", threadId: thread.id }, - textEffectKey: `sent-message:${thread.id}:${operationId}`, + textEffectKey: sentMessageComposerTextEffectKey, draft, getCurrent: () => { const current = sentMessageEditRef.current; @@ -703,7 +702,12 @@ export function ThreadDetailPromptArea({ }, focus: focusInlinePluginComposer, }; - }, [focusInlinePluginComposer, sentMessageEdit, thread.id]); + }, [ + focusInlinePluginComposer, + sentMessageComposerTextEffectKey, + sentMessageEdit, + thread.id, + ]); usePublishPluginComposerHost( queuedPluginComposerHost ?? normalPluginComposerHost, ); @@ -1053,7 +1057,6 @@ export function ThreadDetailPromptArea({ !isFollowUpSubmitting && !isQueueMutationPending && !sentMessageEdit.isSubmitting && - isSentMessageEditExperimentEnabled && queuedMessages.length === 0 && activeBackgroundAgentCount === 0 && activeWorkflows.length === 0 && @@ -1090,7 +1093,6 @@ export function ThreadDetailPromptArea({ } sentMessageEdit.onSubmit({ execution: followUpExecutionSelection, - expectedRequestSequence: sentMessageEdit.expectedRequestSequence, input: sentMessageEditInput, }); }, [ @@ -1418,7 +1420,7 @@ export function ThreadDetailPromptArea({ variant="cap" > <FollowUpPromptBox - id={`${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-sent-${sentMessageEdit.expectedRequestSequence}`} + id={`${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-sent-${sentMessageEdit.operationId}`} attachments={sentMessageAttachmentsConfig} stack={null} composer={sentMessageComposerConfig} @@ -1589,51 +1591,40 @@ export function ThreadDetailPromptArea({ ], ); - if (activePendingInteraction && !shouldHideComposer) { - const pendingInteractionComposer = isPluginPendingInteraction( - activePendingInteraction, - ) ? ( - <PluginPendingInteractionComposer - interaction={activePendingInteraction} - /> + const bottomContent = + activePendingInteraction && !shouldHideComposer ? ( + <div className="space-y-2"> + {activePromptMode ? activePromptModeCard : null} + {goal ? activeGoalCard : null} + <PluginComposerHostProvider value={normalPluginComposerHost}> + <PluginComposerBanners + view={{ + scope: normalPluginComposerHost.scope, + layout: "expanded", + draft: { + text: normalPluginComposerHost.draft.text, + isEmpty: + normalPluginComposerHost.draft.text.trim().length === 0 && + normalPluginComposerHost.draft.attachments.length === 0, + attachmentCount: + normalPluginComposerHost.draft.attachments.length, + }, + run: { isRunning: false, isSubmitting: false }, + }} + /> + </PluginComposerHostProvider> + {isPluginPendingInteraction(activePendingInteraction) ? ( + <PluginPendingInteractionComposer + interaction={activePendingInteraction} + /> + ) : ( + <ThreadPendingInteractionBanner + interaction={activePendingInteraction} + threadId={thread.id} + /> + )} + </div> ) : ( - <ThreadPendingInteractionBanner - interaction={activePendingInteraction} - threadId={thread.id} - /> - ); - return ( - <> - {sentMessageEditorPortal} - <div className="space-y-2"> - {activePromptMode ? activePromptModeCard : null} - {goal ? activeGoalCard : null} - <PluginComposerHostProvider value={normalPluginComposerHost}> - <PluginComposerBanners - view={{ - scope: normalPluginComposerHost.scope, - layout: "expanded", - draft: { - text: normalPluginComposerHost.draft.text, - isEmpty: - normalPluginComposerHost.draft.text.trim().length === 0 && - normalPluginComposerHost.draft.attachments.length === 0, - attachmentCount: - normalPluginComposerHost.draft.attachments.length, - }, - run: { isRunning: false, isSubmitting: false }, - }} - /> - </PluginComposerHostProvider> - {pendingInteractionComposer} - </div> - </> - ); - } - - return ( - <> - {sentMessageEditorPortal} <FollowUpPromptBox id={THREAD_DETAIL_COMPOSER_TEXTAREA_ID} attachments={bottomAttachmentsConfig} @@ -1652,6 +1643,12 @@ export function ThreadDetailPromptArea({ typeahead={typeaheadConfig} promptActions={promptActions} /> + ); + + return ( + <> + {sentMessageEditorPortal} + {bottomContent} </> ); } diff --git a/apps/app/src/views/thread-detail/ThreadDetailView.tsx b/apps/app/src/views/thread-detail/ThreadDetailView.tsx index 73576a2a5f..1294685dc1 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailView.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailView.tsx @@ -122,10 +122,6 @@ import { ThreadDetailPromptArea, type ThreadDetailSentMessageEdit, } from "./ThreadDetailPromptArea"; -import { - canStartSentMessageEdit, - shouldDiscardSentMessageEdit, -} from "./sentMessageEdit"; import { type ContextBannerMergeBaseConfig, isThreadDisplayStatusBannerActive, @@ -963,27 +959,27 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { sentMessageEditSession?.threadId === thread?.id ? sentMessageEditSession : null; + // Client-side affordance policy for the UX prototype. The eventual mutation + // must repeat the full eligibility check on the server before changing state. const canEditSentMessages = thread !== undefined && - canStartSentMessageEdit({ - activeBackgroundAgentCount: thread.activeBackgroundAgentCount, - activeBackgroundCommandCount: activeBackgroundCommands.length, - activeWorkflowCount: activeWorkflows.length, - archivedAt: thread.archivedAt, - deletedAt: thread.deletedAt, - hasPendingInteraction, - isExperimentEnabled: - systemConfigQuery.data?.experiments.editMessages ?? false, - isEditSessionActive: sentMessageEditSession !== null, - isMutationPending: - sendMessage.isPending || - createQueuedMessage.isPending || - editMessage.isPending, - isTimelinePending: timelineLoading && timelineRows.length === 0, - queuedMessageCount: queuedMessagesForEditEligibility.length, - providerId: thread.providerId, - runtimeDisplayStatus: thread.runtime.displayStatus, - }); + (systemConfigQuery.data?.experiments.editMessages ?? false) && + (thread.providerId === "claude-code" || + thread.providerId === "codex" || + thread.providerId === "pi") && + thread.runtime.displayStatus === "idle" && + thread.archivedAt === null && + thread.deletedAt === null && + !hasPendingInteraction && + sentMessageEditSession === null && + !sendMessage.isPending && + !createQueuedMessage.isPending && + !editMessage.isPending && + !(timelineLoading && timelineRows.length === 0) && + queuedMessagesForEditEligibility.length === 0 && + activeWorkflows.length === 0 && + thread.activeBackgroundAgentCount === 0 && + activeBackgroundCommands.length === 0; const sentMessageEditEntryRef = useRef({ canEditSentMessages, thread }); sentMessageEditEntryRef.current = { canEditSentMessages, thread }; const handleEditSentMessage = useCallback<ThreadTimelineEditMessageHandler>( @@ -1013,12 +1009,11 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { sentMessageEditTargetMessageId !== null ? hasTimelineRowId(timelineRows, sentMessageEditTargetMessageId) : true; - const shouldDiscardMissingSentMessageEdit = shouldDiscardSentMessageEdit({ - currentThreadId, - editThreadId: sentMessageEditThreadId, - isTimelineLoading: timelineLoading, - targetStillPresent: sentMessageEditTargetStillPresent, - }); + const shouldDiscardMissingSentMessageEdit = + sentMessageEditThreadId !== null && + sentMessageEditThreadId === currentThreadId && + !timelineLoading && + !sentMessageEditTargetStillPresent; useEffect(() => { if (!shouldDiscardMissingSentMessageEdit) { return; @@ -1067,11 +1062,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { ThreadDetailSentMessageEdit["onSubmit"] >( (target) => { - if ( - !activeSentMessageEditSession || - target.expectedRequestSequence !== - activeSentMessageEditSession.target.expectedRequestSequence - ) { + if (!activeSentMessageEditSession) { return; } const session = activeSentMessageEditSession; @@ -1080,7 +1071,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { .mutateAsync({ id: session.threadId, operationId: session.operationId, - expectedRequestSequence: target.expectedRequestSequence, + expectedRequestSequence: session.target.expectedRequestSequence, input: target.input, ...(execution ? { @@ -1095,9 +1086,7 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { : {}), }) .then(() => { - setSentMessageEditSession((current) => - current?.operationId === session.operationId ? null : current, - ); + finishCancelSentMessageEdit(session.operationId); }) .catch((error) => { appToast.error( @@ -1109,40 +1098,27 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { ); }); }, - [activeSentMessageEditSession, editMessage], + [activeSentMessageEditSession, editMessage, finishCancelSentMessageEdit], ); - const handleSentMessageEditHostElementChange = useCallback( - (element: HTMLDivElement | null) => { - setSentMessageEditHostElement(element); - }, - [], - ); - const sentMessageEditRequestSequence = - activeSentMessageEditSession?.target.expectedRequestSequence ?? null; + const activeSentMessageEditTargetMessageId = + activeSentMessageEditSession?.target.messageId ?? null; const inlineMessageEditor = useMemo< ThreadTimelineInlineMessageEditor | undefined >( () => - sentMessageEditRequestSequence !== null && - sentMessageEditTargetMessageId !== null + activeSentMessageEditTargetMessageId !== null ? { - messageId: sentMessageEditTargetMessageId, - onHostElementChange: handleSentMessageEditHostElementChange, + messageId: activeSentMessageEditTargetMessageId, + onHostElementChange: setSentMessageEditHostElement, } : undefined, - [ - handleSentMessageEditHostElementChange, - sentMessageEditRequestSequence, - sentMessageEditTargetMessageId, - ], + [activeSentMessageEditTargetMessageId], ); const sentMessageEdit = useMemo<ThreadDetailSentMessageEdit | undefined>( () => activeSentMessageEditSession ? { draft: activeSentMessageEditSession.draft, - expectedRequestSequence: - activeSentMessageEditSession.target.expectedRequestSequence, hostElement: sentMessageEditHostElement, isSubmitting: editMessage.isPending, operationId: activeSentMessageEditSession.operationId, @@ -2648,9 +2624,6 @@ function ThreadDetailViewInternal(props: ThreadDetailViewInternalProps) { composerFocusRequestNonce={composerFocusRequestNonce} sendMessage={sendMessage} sentMessageEdit={sentMessageEdit} - isSentMessageEditExperimentEnabled={ - systemConfigQuery.data?.experiments.editMessages ?? false - } steerActiveThreadOnEnter={ systemConfigQuery.data?.generalSettings.steerActiveThreadOnEnter ?? defaultAppSettings.steerActiveThreadOnEnter diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts b/apps/app/src/views/thread-detail/sentMessageEdit.test.ts deleted file mode 100644 index 65f17a24c1..0000000000 --- a/apps/app/src/views/thread-detail/sentMessageEdit.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { - canStartSentMessageEdit, - shouldDiscardSentMessageEdit, - type SentMessageEditAvailability, -} from "./sentMessageEdit"; - -const ELIGIBLE_STATE: SentMessageEditAvailability = { - activeBackgroundAgentCount: 0, - activeBackgroundCommandCount: 0, - activeWorkflowCount: 0, - archivedAt: null, - deletedAt: null, - hasPendingInteraction: false, - isExperimentEnabled: true, - isEditSessionActive: false, - isMutationPending: false, - isTimelinePending: false, - queuedMessageCount: 0, - providerId: "codex", - runtimeDisplayStatus: "idle", -}; - -describe("canStartSentMessageEdit", () => { - it("allows an idle supported-provider thread with no competing activity", () => { - expect(canStartSentMessageEdit(ELIGIBLE_STATE)).toBe(true); - }); - - it.each([ - ["another provider", { providerId: "opencode" }], - ["a disabled experiment", { isExperimentEnabled: false }], - ["an active runtime", { runtimeDisplayStatus: "active" as const }], - ["an archived thread", { archivedAt: 1 }], - ["a pending interaction", { hasPendingInteraction: true }], - ["an active workflow", { activeWorkflowCount: 1 }], - ["an active background agent", { activeBackgroundAgentCount: 1 }], - ["an active background command", { activeBackgroundCommandCount: 1 }], - ["an existing edit session", { isEditSessionActive: true }], - ["another message mutation", { isMutationPending: true }], - ["a queued message", { queuedMessageCount: 1 }], - ])("rejects %s", (_label, override) => { - expect(canStartSentMessageEdit({ ...ELIGIBLE_STATE, ...override })).toBe( - false, - ); - }); -}); - -describe("shouldDiscardSentMessageEdit", () => { - it("preserves a parked draft while another thread is open", () => { - expect( - shouldDiscardSentMessageEdit({ - currentThreadId: "thread-2", - editThreadId: "thread-1", - isTimelineLoading: false, - targetStillPresent: false, - }), - ).toBe(false); - }); - - it("waits for the edited thread timeline before deciding the row is gone", () => { - expect( - shouldDiscardSentMessageEdit({ - currentThreadId: "thread-1", - editThreadId: "thread-1", - isTimelineLoading: true, - targetStillPresent: false, - }), - ).toBe(false); - }); - - it("discards only after the target is absent from the loaded edited thread", () => { - expect( - shouldDiscardSentMessageEdit({ - currentThreadId: "thread-1", - editThreadId: "thread-1", - isTimelineLoading: false, - targetStillPresent: false, - }), - ).toBe(true); - }); -}); diff --git a/apps/app/src/views/thread-detail/sentMessageEdit.ts b/apps/app/src/views/thread-detail/sentMessageEdit.ts deleted file mode 100644 index ba2b4d05f0..0000000000 --- a/apps/app/src/views/thread-detail/sentMessageEdit.ts +++ /dev/null @@ -1,69 +0,0 @@ -import type { ThreadRuntimeDisplayStatus } from "@bb/domain"; - -export interface SentMessageEditAvailability { - activeBackgroundAgentCount: number; - activeBackgroundCommandCount: number; - activeWorkflowCount: number; - archivedAt: number | null; - deletedAt: number | null; - hasPendingInteraction: boolean; - isExperimentEnabled: boolean; - isEditSessionActive: boolean; - isMutationPending: boolean; - isTimelinePending: boolean; - queuedMessageCount: number; - providerId: string; - runtimeDisplayStatus: ThreadRuntimeDisplayStatus; -} - -/** - * Client-side affordance policy for the UX prototype. The eventual mutation - * must repeat the full eligibility check on the server before changing state. - */ -export function canStartSentMessageEdit({ - activeBackgroundAgentCount, - activeBackgroundCommandCount, - activeWorkflowCount, - archivedAt, - deletedAt, - hasPendingInteraction, - isExperimentEnabled, - isEditSessionActive, - isMutationPending, - isTimelinePending, - queuedMessageCount, - providerId, - runtimeDisplayStatus, -}: SentMessageEditAvailability): boolean { - return ( - isExperimentEnabled && - (providerId === "claude-code" || - providerId === "codex" || - providerId === "pi") && - runtimeDisplayStatus === "idle" && - archivedAt === null && - deletedAt === null && - !hasPendingInteraction && - !isEditSessionActive && - !isMutationPending && - !isTimelinePending && - queuedMessageCount === 0 && - activeWorkflowCount === 0 && - activeBackgroundAgentCount === 0 && - activeBackgroundCommandCount === 0 - ); -} - -export function shouldDiscardSentMessageEdit(args: { - currentThreadId: string | null; - editThreadId: string | null; - isTimelineLoading: boolean; - targetStillPresent: boolean; -}): boolean { - return ( - args.editThreadId !== null && - args.editThreadId === args.currentThreadId && - !args.isTimelineLoading && - !args.targetStillPresent - ); -} diff --git a/apps/cli/src/__tests__/command-output/thread-actions.test.ts b/apps/cli/src/__tests__/command-output/thread-actions.test.ts index d1ac141521..decadbc33c 100644 --- a/apps/cli/src/__tests__/command-output/thread-actions.test.ts +++ b/apps/cli/src/__tests__/command-output/thread-actions.test.ts @@ -99,18 +99,13 @@ describe("bb thread action command output", () => { ); }); - it("bb thread edit-message resolves the current target and submits one atomic edit", async () => { - const getEdit = vi.fn(async () => ({ - expectedRequestSequence: 41, - input: [{ type: "text", text: "Original", mentions: [] }], - })); + it("bb thread edit-message targets the latest editable message by default", async () => { const submitEdit = vi.fn(async () => ({ ok: true, operationId: "edit-op-server", requestSequence: 43, })); stubServerApi({ - "v1.threads.:id.latest-message-edit.$get": getEdit, "v1.threads.:id.edit-message.$post": submitEdit, }); @@ -119,19 +114,15 @@ describe("bb thread action command output", () => { register, ); - expect(getEdit).toHaveBeenCalledWith({ - param: { id: "thread-edit-1" }, - }); expect(submitEdit).toHaveBeenCalledWith({ param: { id: "thread-edit-1" }, json: { operationId: expect.any(String), - expectedRequestSequence: 41, input: [{ type: "text", text: "Replacement", mentions: [] }], }, }); expect(collectLogLines(vi.mocked(console.log))).toContain( - "Thread thread-edit-1 message at request sequence 41 replaced; workspace changes were kept", + "Thread thread-edit-1 message replaced; workspace changes were kept", ); }); @@ -169,14 +160,12 @@ describe("bb thread action command output", () => { it("bb thread edit-message accepts an explicit stale-edit guard", async () => { vi.stubEnv("BB_THREAD_ID", "thread-edit-self"); - const getEdit = vi.fn(); const submitEdit = vi.fn(async () => ({ ok: true, operationId: "edit-op-server", requestSequence: 43, })); stubServerApi({ - "v1.threads.:id.latest-message-edit.$get": getEdit, "v1.threads.:id.edit-message.$post": submitEdit, }); @@ -194,7 +183,6 @@ describe("bb thread action command output", () => { register, ); - expect(getEdit).not.toHaveBeenCalled(); expect(submitEdit).toHaveBeenCalledWith({ param: { id: "thread-edit-self" }, json: expect.objectContaining({ expectedRequestSequence: 41 }), @@ -204,7 +192,6 @@ describe("bb thread action command output", () => { ).toMatchObject({ threadId: "thread-edit-self", ok: true, - replacedRequestSequence: 41, requestSequence: 43, }); }); diff --git a/apps/cli/src/commands/thread/actions.ts b/apps/cli/src/commands/thread/actions.ts index b55bbf24d2..b6e7345826 100644 --- a/apps/cli/src/commands/thread/actions.ts +++ b/apps/cli/src/commands/thread/actions.ts @@ -371,7 +371,7 @@ export function registerActionsCommands( .option("--self", "Target the current thread (from BB_THREAD_ID)") .option( "--expected-request-sequence <sequence>", - "Fail if the editable message no longer has this event sequence", + "Edit the message at this event sequence (default: the latest editable message)", ) .option("--json", "Print machine-readable JSON output") .action( @@ -382,41 +382,34 @@ export function registerActionsCommands( ) => { const threadId = requireThreadIdOrSelf(id, opts); const sdk = createCliBbSdk(getUrl()); - const requestedSequence = + const expectedRequestSequence = opts.expectedRequestSequence === undefined ? undefined : Number(opts.expectedRequestSequence); if ( - requestedSequence !== undefined && - (!Number.isInteger(requestedSequence) || requestedSequence < 0) + expectedRequestSequence !== undefined && + (!Number.isInteger(expectedRequestSequence) || + expectedRequestSequence < 0) ) { throw new Error( "--expected-request-sequence must be a non-negative integer.", ); } - const expectedRequestSequence = - requestedSequence ?? - (await sdk.threads.getLatestMessageEdit({ threadId })) - .expectedRequestSequence; const senderThreadId = resolveSenderThreadId(threadId); const result = await sdk.threads.editMessage({ threadId, operationId: randomUUID(), - expectedRequestSequence, + ...(expectedRequestSequence !== undefined + ? { expectedRequestSequence } + : {}), input: buildPromptInputs({ message: opts.message }), ...(senderThreadId !== undefined ? { senderThreadId } : {}), }); - if ( - outputJson(opts, { - threadId, - replacedRequestSequence: expectedRequestSequence, - ...result, - }) - ) { + if (outputJson(opts, { threadId, ...result })) { return; } console.log( - `Thread ${threadId} message at request sequence ${expectedRequestSequence} replaced; workspace changes were kept`, + `Thread ${threadId} message replaced; workspace changes were kept`, ); }, ), diff --git a/apps/server/src/routes/threads/actions.ts b/apps/server/src/routes/threads/actions.ts index e706a1c228..237f36928f 100644 --- a/apps/server/src/routes/threads/actions.ts +++ b/apps/server/src/routes/threads/actions.ts @@ -53,10 +53,7 @@ import { resolveMessageSenderThreadId, sendThreadMessage, } from "../../services/threads/thread-send.js"; -import { - editThreadMessage, - getLatestThreadMessageEdit, -} from "../../services/threads/thread-edit-message.js"; +import { editThreadMessage } from "../../services/threads/thread-edit-message.js"; import { buildExecutionOptions, buildThreadStopCommand, @@ -384,11 +381,6 @@ export function registerThreadActionRoutes(app: Hono, deps: AppDeps): void { return context.json(result); }); - get(routes.latestMessageEdit, (context) => { - const thread = requirePublicThread(deps.db, context.req.param("id")); - return context.json(getLatestThreadMessageEdit(deps, thread)); - }); - post(routes.createQueuedMessage, async (context, payload) => { const thread = requirePublicThread(deps.db, context.req.param("id")); const queuedMessage = await createQueuedMessageForThread(deps, { diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts index 13735fa966..ff1e314443 100644 --- a/apps/server/src/services/threads/thread-edit-message.ts +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -8,14 +8,14 @@ import { getHighWaterMarks, getThread, hasQueuedThreadMessages, + hasRootStoredTurnStarted, listActiveBackgroundTaskCountsByThreadIds, type DbQueryConnection, } from "@bb/db"; -import { threadScope, type Thread } from "@bb/domain"; +import { threadScope, type Thread, type ThreadEvent } from "@bb/domain"; import type { EditMessageRequest, EditMessageResponse, - LatestMessageEditResponse, } from "@bb/server-contract"; import type { HostDaemonCommand, @@ -28,6 +28,7 @@ import { createClientTurnRequestId, parseStoredTurnRequestEvent, } from "./thread-events.js"; +import { parseStoredEvent } from "./thread-data.js"; import { buildExecutionOptions, buildThreadStartCommand, @@ -55,7 +56,6 @@ interface EditableTurn { precedingProviderCheckpoint: string | null; requestSequence: number; sourceProviderThreadId: string | null; - visibleInput: ReturnType<typeof parseStoredTurnRequestEvent>["input"]; } function conflict(message: string): never { @@ -84,7 +84,7 @@ function findCommittedOperation( args: { operationId: string; threadId: string }, ): { fingerprint: string; requestSequence: number } | null { const row = db - .select({ data: events.data }) + .select() .from(events) .where( and( @@ -97,19 +97,10 @@ function findCommittedOperation( .limit(1) .get(); if (!row) return null; - let data: unknown; - try { - data = JSON.parse(row.data); - } catch { - return null; - } - if (typeof data !== "object" || data === null || !("metadata" in data)) { - return null; - } - const metadata = data.metadata; - if (typeof metadata !== "object" || metadata === null) return null; - const fingerprint = Reflect.get(metadata, "fingerprint"); - const requestSequence = Reflect.get(metadata, "requestSequence"); + const event = parseStoredEvent(row); + if (event.type !== "system/operation") return null; + const fingerprint = event.metadata?.fingerprint; + const requestSequence = event.metadata?.requestSequence; return typeof fingerprint === "string" && typeof requestSequence === "number" ? { fingerprint, requestSequence } : null; @@ -118,34 +109,27 @@ function findCommittedOperation( const EDIT_MESSAGE_PROVIDER_IDS = new Set(["claude-code", "codex", "pi"]); const EDITABLE_TURN_CANDIDATE_PAGE_SIZE = 25; -interface StoredTurnCompletion { - providerCheckpointId: string | null; - providerThreadId: string | null; - status: string | null; -} - -function parseStoredTurnCompletion(data: string): StoredTurnCompletion | null { - let parsed: unknown; - try { - parsed = JSON.parse(data); - } catch { - return null; - } - if (typeof parsed !== "object" || parsed === null) return null; - const checkpoint = Reflect.get(parsed, "providerCheckpointId"); - const providerThreadId = Reflect.get(parsed, "providerThreadId"); - const status = Reflect.get(parsed, "status"); - return { - providerCheckpointId: - typeof checkpoint === "string" && checkpoint.length > 0 - ? checkpoint - : null, - providerThreadId: - typeof providerThreadId === "string" && providerThreadId.length > 0 - ? providerThreadId - : null, - status: typeof status === "string" ? status : null, - }; +function getTurnCompletion( + db: DbQueryConnection, + threadId: string, + turnId: string, +): Extract<ThreadEvent, { type: "turn/completed" }> | null { + const row = db + .select() + .from(events) + .where( + and( + eq(events.threadId, threadId), + eq(events.type, "turn/completed"), + eq(events.turnId, turnId), + ), + ) + .orderBy(desc(events.sequence)) + .limit(1) + .get(); + if (!row) return null; + const event = parseStoredEvent(row); + return event.type === "turn/completed" ? event : null; } function resolveEditableTurnCandidate( @@ -184,20 +168,12 @@ function resolveEditableTurnCandidate( conflict("The selected request was not accepted into exactly one turn"); } - const rootTurn = db - .select({ turnId: events.turnId }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "turn/started"), - eq(events.turnId, accepted.turnId), - sql`COALESCE(json_extract(${events.data}, '$.parentToolCallId'), '') = ''`, - ), - ) - .limit(1) - .get(); - if (!rootTurn) { + if ( + !hasRootStoredTurnStarted(db, { + threadId: thread.id, + turnId: accepted.turnId, + }) + ) { conflict("The selected message does not belong to a root turn"); } const turnAcceptedCount = db @@ -216,21 +192,7 @@ function resolveEditableTurnCandidate( "A turn containing steers or multiple accepted messages cannot be edited", ); } - const completionRow = db - .select({ data: events.data }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "turn/completed"), - eq(events.turnId, accepted.turnId), - ), - ) - .limit(1) - .get(); - const completion = completionRow - ? parseStoredTurnCompletion(completionRow.data) - : null; + const completion = getTurnCompletion(db, thread.id, accepted.turnId); if (completion?.status !== "completed") { conflict("The selected turn did not complete successfully"); } @@ -250,25 +212,10 @@ function resolveEditableTurnCandidate( .limit(1) .get(); const precedingTurnId = precedingTurn?.turnId ?? null; - const precedingCompletionRow = + const precedingCompletion = precedingTurnId === null ? null - : db - .select({ data: events.data }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "turn/completed"), - eq(events.turnId, precedingTurnId), - ), - ) - .orderBy(desc(events.sequence)) - .limit(1) - .get(); - const precedingCompletion = precedingCompletionRow - ? parseStoredTurnCompletion(precedingCompletionRow.data) - : null; + : getTurnCompletion(db, thread.id, precedingTurnId); if ( precedingTurnId !== null && (precedingCompletion?.status !== "completed" || @@ -294,9 +241,6 @@ function resolveEditableTurnCandidate( precedingTurnId === null ? null : (precedingCompletion?.providerThreadId ?? null), - visibleInput: request.input.filter( - (part) => part.visibility !== "agent-only", - ), }; } @@ -396,29 +340,6 @@ function resolveEditableTurn( conflict("The thread has no editable user message"); } -export function getLatestThreadMessageEdit( - deps: LoggedPendingInteractionWorkSessionDeps, - thread: Thread, -): LatestMessageEditResponse { - if (!getExperiments(deps.db).editMessages) { - conflict("Enable the Edit messages experiment before editing a message"); - } - if (deps.pendingInteractions.hasPendingThreadInteraction(thread.id)) { - conflict("Resolve the pending interaction before editing the message"); - } - if (hasQueuedThreadMessages(deps.db, thread.id)) { - conflict("Send or remove queued messages before editing a message"); - } - const target = resolveEditableTurn(deps.db, thread); - if (target.visibleInput.length === 0) { - conflict("The message has no user-visible input to edit"); - } - return { - expectedRequestSequence: target.requestSequence, - input: target.visibleInput, - }; -} - function rewindPrepareCommandFromStart( start: Extract<HostDaemonCommand, { type: "thread.start" }>, args: { @@ -428,29 +349,18 @@ function rewindPrepareCommandFromStart( sourceProviderThreadId: string; }, ): ThreadRewindPrepareCommand { - return { - type: "thread.rewind.prepare", - environmentId: start.environmentId, - threadId: start.threadId, - workspaceContext: start.workspaceContext, - projectId: start.projectId, - providerId: start.providerId, - ...(start.acpLaunchSpec !== undefined - ? { acpLaunchSpec: start.acpLaunchSpec } - : {}), - options: start.options, - instructions: start.instructions, - dynamicTools: start.dynamicTools, - injectedSkillSources: start.injectedSkillSources, - ...(start.disallowedTools !== undefined - ? { disallowedTools: start.disallowedTools } - : {}), - instructionMode: start.instructionMode, - leaseId: args.leaseId, - operationId: args.operationId, - sourceProviderThreadId: args.sourceProviderThreadId, - retainThroughProviderCheckpoint: args.retainThroughProviderCheckpoint, - }; + // The daemon parses commands strictly, so every start-only field must stay + // in this destructure — the rest is exactly the shared runtime context. + const { + type: _type, + requestId: _requestId, + input: _input, + inputGroups: _inputGroups, + threadStoragePath: _threadStoragePath, + fork: _fork, + ...context + } = start; + return { type: "thread.rewind.prepare", ...context, ...args }; } export async function editThreadMessage( @@ -567,6 +477,11 @@ export async function editThreadMessage( ); } }; + const { + operationId: _operationId, + expectedRequestSequence: _expectedRequestSequence, + ...sendPayload + } = args.payload; try { await sendThreadMessage(deps, { beforeAppendInTransaction: ({ tx }) => { @@ -586,7 +501,6 @@ export async function editThreadMessage( target.requestSequence, ); if ( - currentTarget.requestSequence !== target.requestSequence || currentTarget.oldMaxSequence !== target.oldMaxSequence || currentTarget.currentTurnId !== target.currentTurnId ) { @@ -624,31 +538,8 @@ export async function editThreadMessage( ...(discardStagedRewind !== undefined ? { onCommandSettled: discardStagedRewind } : {}), - requestTargetKind: - target.precedingProviderCheckpoint === null - ? "thread-start" - : "new-turn", - }, - payload: { - input: args.payload.input, - mode: "start", - ...(args.payload.model !== undefined - ? { model: args.payload.model } - : {}), - ...(args.payload.serviceTier !== undefined - ? { serviceTier: args.payload.serviceTier } - : {}), - ...(args.payload.reasoningLevel !== undefined - ? { reasoningLevel: args.payload.reasoningLevel } - : {}), - ...(args.payload.permissionMode !== undefined - ? { permissionMode: args.payload.permissionMode } - : {}), - ...(args.payload.executionInputSources !== undefined - ? { executionInputSources: args.payload.executionInputSources } - : {}), - ...(senderThreadId !== null ? { senderThreadId } : {}), }, + payload: { ...sendPayload, mode: "start" }, thread: args.thread, trigger: "user", }); diff --git a/apps/server/src/services/threads/thread-send.ts b/apps/server/src/services/threads/thread-send.ts index eab992c803..c97ddfb44a 100644 --- a/apps/server/src/services/threads/thread-send.ts +++ b/apps/server/src/services/threads/thread-send.ts @@ -74,12 +74,12 @@ export interface SendThreadMessageArgs { environment: Environment; /** * Internal edit-message path. Presence forces a new provider session; - * a string forks from a staged provider session and null starts fresh. + * a string forks from a staged provider session and null starts fresh + * (which also makes the request a thread-start rather than a new turn). */ historyReplacement?: { forkSourceProviderThreadId: string | null; onCommandSettled?: () => void | Promise<void>; - requestTargetKind: "new-turn" | "thread-start"; }; payload: SendThreadMessagePayload; thread: Thread; @@ -500,7 +500,11 @@ export async function sendThreadMessage( let target: TurnRequestTarget; if (mode === "start") { target = { - kind: args.historyReplacement?.requestTargetKind ?? "new-turn", + kind: + args.historyReplacement !== undefined && + args.historyReplacement.forkSourceProviderThreadId === null + ? "thread-start" + : "new-turn", }; } else { target = { diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts index db29787347..8a2a7b5c0e 100644 --- a/apps/server/test/threads/thread-edit-message.test.ts +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -16,10 +16,7 @@ import { type PromptInput, } from "@bb/domain"; import { describe, expect, it, vi } from "vitest"; -import { - editThreadMessage, - getLatestThreadMessageEdit, -} from "../../src/services/threads/thread-edit-message.js"; +import { editThreadMessage } from "../../src/services/threads/thread-edit-message.js"; import { listQueuedThreadCommands, reportQueuedCommandError, @@ -304,9 +301,9 @@ describe("editThreadMessage", () => { }); }); - it("resolves the latest user message when a later turn was agent-initiated", async () => { + it("targets the latest user message when expectedRequestSequence is omitted, skipping agent turns", async () => { await withTestHarness(async (harness) => { - const { thread } = seedEditableThread(harness); + const { environment, thread } = seedEditableThread(harness); seedCompletedTurn(harness, { initiator: "agent", providerCheckpointId: "checkpoint-agent", @@ -318,8 +315,34 @@ describe("editThreadMessage", () => { turnId: "turn-agent", }); - expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ - expectedRequestSequence: 7, + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-latest", + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + expect(rewind.command).toMatchObject({ + retainThroughProviderCheckpoint: "turn-first", + }); + if (rewind.command.type !== "thread.rewind.prepare") { + throw new Error("Expected a thread.rewind.prepare command"); + } + await reportQueuedCommandSuccess(harness, rewind, { + providerThreadId: "provider-staged-rewind", + }); + await expect(editPromise).resolves.toMatchObject({ ok: true }); + + const marker = listEvents(harness.db, { threadId: thread.id }).find( + (event) => event.type === "system/operation", + ); + expect(JSON.parse(marker?.data ?? "null")).toMatchObject({ + metadata: { cutoffSequence: 7 }, }); }); }); @@ -432,17 +455,6 @@ describe("editThreadMessage", () => { it("keeps history intact until the staged Codex rewind succeeds, then replaces the suffix", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); - expect(getLatestThreadMessageEdit(harness.deps, thread)).toEqual({ - expectedRequestSequence: 7, - input: [ - { - type: "text", - text: "Original last message", - mentions: [], - }, - ], - }); - const payload = { operationId: "edit-op-success", expectedRequestSequence: 7, @@ -693,7 +705,7 @@ describe("editThreadMessage", () => { }); }); - it("falls back to the latest eligible message and rejects grouped requests", async () => { + it("rejects grouped requests", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); seedCompletedTurn(harness, { @@ -709,9 +721,6 @@ describe("editThreadMessage", () => { turnId: "turn-grouped", }); - expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ - expectedRequestSequence: 7, - }); await expect( editThreadMessage(harness.deps, { environment, @@ -728,7 +737,7 @@ describe("editThreadMessage", () => { it("finds an eligible message beyond one bounded candidate page", async () => { await withTestHarness(async (harness) => { - const { thread } = seedEditableThread(harness); + const { environment, thread } = seedEditableThread(harness); for (let index = 0; index < 26; index += 1) { const requestSequence = 12 + index * 5; seedCompletedTurn(harness, { @@ -745,13 +754,34 @@ describe("editThreadMessage", () => { }); } - expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ - expectedRequestSequence: 7, + const editPromise = editThreadMessage(harness.deps, { + environment, + thread, + payload: { + operationId: "edit-op-paginated", + input: [{ type: "text", text: "Replacement", mentions: [] }], + }, + }); + const rejectedEdit = + expect(editPromise).rejects.toThrow("Codex fork failed"); + const rewind = await waitForQueuedCommand( + harness, + (queued) => queued.command.type === "thread.rewind.prepare", + ); + // Resolving past 26 ineligible grouped candidates lands on sequence 7, + // whose preceding root turn is turn-first. + expect(rewind.command).toMatchObject({ + retainThroughProviderCheckpoint: "turn-first", }); + await reportQueuedCommandError(harness, rewind, { + errorCode: "provider_error", + errorMessage: "Codex fork failed", + }); + await rejectedEdit; }); }); - it("falls back past an unsuccessful turn and rejects it explicitly", async () => { + it("rejects editing a turn that did not complete successfully", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); seedCompletedTurn(harness, { @@ -764,9 +794,6 @@ describe("editThreadMessage", () => { turnId: "turn-failed", }); - expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ - expectedRequestSequence: 7, - }); await expect( editThreadMessage(harness.deps, { environment, @@ -987,24 +1014,18 @@ describe("editThreadMessage", () => { await rejectedEdit; expect(listEvents(harness.db, { threadId: thread.id })).toHaveLength(11); - expect(getLatestThreadMessageEdit(harness.deps, thread)).toMatchObject({ - expectedRequestSequence: 7, - }); expect( listQueuedThreadCommands(harness, "thread.start", thread.id), ).toHaveLength(0); }); }); - it("rejects reads and mutations while the experiment is disabled", async () => { + it("rejects mutations while the experiment is disabled", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness, { editMessagesExperiment: false, }); - expect(() => getLatestThreadMessageEdit(harness.deps, thread)).toThrow( - "Enable the Edit messages experiment", - ); await expect( editThreadMessage(harness.deps, { environment, diff --git a/packages/agent-runtime/src/pi/bridge/bridge.ts b/packages/agent-runtime/src/pi/bridge/bridge.ts index 78ab65bc0d..011d40fc2f 100644 --- a/packages/agent-runtime/src/pi/bridge/bridge.ts +++ b/packages/agent-runtime/src/pi/bridge/bridge.ts @@ -800,14 +800,18 @@ async function handleThreadFork( }); const bridgeSessionDir = resolvePiBridgeSessionDir({ env: process.env }); - const forked = - params.providerCheckpointId === undefined - ? SessionManager.forkFrom(sourceSessionFile, params.cwd, bridgeSessionDir) - : SessionManager.open(sourceSessionFile, bridgeSessionDir, params.cwd); const forkedFile = params.providerCheckpointId === undefined - ? forked.getSessionFile() - : forked.createBranchedSession(params.providerCheckpointId); + ? SessionManager.forkFrom( + sourceSessionFile, + params.cwd, + bridgeSessionDir, + ).getSessionFile() + : SessionManager.open( + sourceSessionFile, + bridgeSessionDir, + params.cwd, + ).createBranchedSession(params.providerCheckpointId); if (!forkedFile) { sendError(id, -32000, "Cannot fork: forked pi session was not persisted"); return; diff --git a/packages/host-daemon-contract/src/commands.ts b/packages/host-daemon-contract/src/commands.ts index bed0e814b7..815390e75d 100644 --- a/packages/host-daemon-contract/src/commands.ts +++ b/packages/host-daemon-contract/src/commands.ts @@ -1367,9 +1367,6 @@ const knownAcpAgentsStatusResultSchema = z const threadStartResultSchema = z.object({ providerThreadId: z.string().min(1), }); -const threadRewindPrepareResultSchema = z - .object({ providerThreadId: z.string().min(1) }) - .strict(); const turnSubmitResultSchema = z.object({ appliedAs: z.enum(["new-turn", "steer"]), }); @@ -1591,7 +1588,7 @@ export const hostDaemonCommandRegistry = { "thread.rewind.prepare": defineHostDaemonCommandDescriptor({ type: "thread.rewind.prepare", schema: threadRewindPrepareCommandSchema, - resultSchema: threadRewindPrepareResultSchema, + resultSchema: threadStartResultSchema, transport: "settled", retryable: false, flushEventsBeforeResult: true, diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index 88ab2db8ea..81098434f2 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -2576,8 +2576,8 @@ type SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - personal: "personal"; standard: "standard"; + personal: "personal"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>; @@ -2598,8 +2598,8 @@ type ProjectResponse = z$1.infer<typeof projectResponseSchema>; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - personal: "personal"; standard: "standard"; + personal: "personal"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>; @@ -2699,8 +2699,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>; }, z$1.core.$strip>>; @@ -2889,8 +2889,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional<z$1.ZodString>; sizeBytes: z$1.ZodNumber; @@ -3119,8 +3119,8 @@ declare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z }>>; }, z$1.core.$strict>; attention: z$1.ZodEnum<{ - blocked: "blocked"; none: "none"; + blocked: "blocked"; merged: "merged"; draft: "draft"; closed: "closed"; @@ -3584,8 +3584,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - replace: "replace"; append: "append"; + replace: "replace"; }>; type: z$1.ZodLiteral<"thread.rewind.prepare">; leaseId: z$1.ZodString; @@ -3594,7 +3594,7 @@ declare const hostDaemonCommandRegistry: { retainThroughProviderCheckpoint: z$1.ZodString; }, z$1.core.$strict>, z$1.ZodObject<{ providerThreadId: z$1.ZodString; - }, z$1.core.$strict>, "settled", false>; + }, z$1.core.$strip>, "settled", false>; "thread.start": HostDaemonCommandDescriptor<"thread.start", z$1.ZodObject<{ environmentId: z$1.ZodString; threadId: z$1.ZodString; @@ -3786,8 +3786,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strict>], "kind">>; disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>; instructionMode: z$1.ZodEnum<{ - replace: "replace"; append: "append"; + replace: "replace"; }>; type: z$1.ZodLiteral<"thread.start">; requestId: z$1.ZodString; @@ -4279,8 +4279,8 @@ declare const hostDaemonCommandRegistry: { }>; }, z$1.core.$strip>; instructionMode: z$1.ZodEnum<{ - replace: "replace"; append: "append"; + replace: "replace"; }>; projectId: z$1.ZodString; providerId: z$1.ZodString; @@ -4593,8 +4593,8 @@ declare const hostDaemonCommandRegistry: { }>; }, z$1.core.$strip>; instructionMode: z$1.ZodEnum<{ - replace: "replace"; append: "append"; + replace: "replace"; }>; projectId: z$1.ZodString; providerId: z$1.ZodString; @@ -5630,9 +5630,9 @@ declare const hostDaemonCommandRegistry: { executablePath: z$1.ZodNullable<z$1.ZodString>; installed: z$1.ZodBoolean; installSource: z$1.ZodEnum<{ + external: "external"; notInstalled: "notInstalled"; npmGlobal: "npmGlobal"; - external: "external"; }>; currentVersion: z$1.ZodNullable<z$1.ZodString>; latestVersion: z$1.ZodNullable<z$1.ZodString>; @@ -5805,13 +5805,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5855,13 +5855,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5917,13 +5917,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5965,13 +5965,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6089,9 +6089,9 @@ declare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{ executablePath: z$1.ZodNullable<z$1.ZodString>; installed: z$1.ZodBoolean; installSource: z$1.ZodEnum<{ + external: "external"; notInstalled: "notInstalled"; npmGlobal: "npmGlobal"; - external: "external"; }>; currentVersion: z$1.ZodNullable<z$1.ZodString>; latestVersion: z$1.ZodNullable<z$1.ZodString>; @@ -6681,8 +6681,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>>; }, z$1.core.$strip>; @@ -6713,8 +6713,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ available: z$1.ZodBoolean; }, z$1.core.$strip>>; permissionCeiling: z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>; models: z$1.ZodArray<z$1.ZodObject<{ @@ -8165,10 +8165,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ providerId: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8409,10 +8409,10 @@ declare const forkThreadRequestSchema: z$1.ZodObject<{ }, z$1.core.$strip>>>>; title: z$1.ZodOptional<z$1.ZodString>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault<z$1.ZodEnum<{ visible: "visible"; hidden: "hidden"; @@ -8528,10 +8528,10 @@ declare const sendMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8756,10 +8756,10 @@ declare const editMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8779,7 +8779,7 @@ declare const editMessageRequestSchema: z$1.ZodObject<{ }>>; }, z$1.core.$strict>>; operationId: z$1.ZodString; - expectedRequestSequence: z$1.ZodNumber; + expectedRequestSequence: z$1.ZodOptional<z$1.ZodNumber>; }, z$1.core.$strict>; type EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>; declare const editMessageResponseSchema: z$1.ZodObject<{ @@ -8788,91 +8788,6 @@ declare const editMessageResponseSchema: z$1.ZodObject<{ requestSequence: z$1.ZodNumber; }, z$1.core.$strict>; type EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>; -declare const latestMessageEditResponseSchema: z$1.ZodObject<{ - expectedRequestSequence: z$1.ZodNumber; - input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ - visibility: z$1.ZodOptional<z$1.ZodEnum<{ - "agent-only": "agent-only"; - }>>; - type: z$1.ZodLiteral<"text">; - text: z$1.ZodString; - mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{ - start: z$1.ZodNumber; - end: z$1.ZodNumber; - resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ - kind: z$1.ZodLiteral<"thread">; - threadId: z$1.ZodString; - projectId: z$1.ZodOptional<z$1.ZodString>; - label: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - kind: z$1.ZodLiteral<"project">; - projectId: z$1.ZodString; - label: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - kind: z$1.ZodLiteral<"section">; - sectionId: z$1.ZodString; - label: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - kind: z$1.ZodLiteral<"path">; - source: z$1.ZodEnum<{ - workspace: "workspace"; - "thread-storage": "thread-storage"; - }>; - entryKind: z$1.ZodEnum<{ - file: "file"; - directory: "directory"; - }>; - path: z$1.ZodString; - label: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - kind: z$1.ZodLiteral<"command">; - trigger: z$1.ZodEnum<{ - "/": "/"; - }>; - name: z$1.ZodString; - source: z$1.ZodEnum<{ - command: "command"; - skill: "skill"; - }>; - origin: z$1.ZodEnum<{ - user: "user"; - project: "project"; - builtin: "builtin"; - }>; - label: z$1.ZodString; - argumentHint: z$1.ZodNullable<z$1.ZodString>; - }, z$1.core.$strip>, z$1.ZodObject<{ - kind: z$1.ZodLiteral<"plugin">; - pluginId: z$1.ZodString; - icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>; - itemId: z$1.ZodString; - label: z$1.ZodString; - }, z$1.core.$strip>], "kind">>; - }, z$1.core.$strip>>>; - }, z$1.core.$strip>, z$1.ZodObject<{ - visibility: z$1.ZodOptional<z$1.ZodEnum<{ - "agent-only": "agent-only"; - }>>; - type: z$1.ZodLiteral<"image">; - url: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - visibility: z$1.ZodOptional<z$1.ZodEnum<{ - "agent-only": "agent-only"; - }>>; - type: z$1.ZodLiteral<"localImage">; - path: z$1.ZodString; - }, z$1.core.$strip>, z$1.ZodObject<{ - visibility: z$1.ZodOptional<z$1.ZodEnum<{ - "agent-only": "agent-only"; - }>>; - type: z$1.ZodLiteral<"localFile">; - path: z$1.ZodString; - name: z$1.ZodOptional<z$1.ZodString>; - sizeBytes: z$1.ZodOptional<z$1.ZodNumber>; - mimeType: z$1.ZodOptional<z$1.ZodString>; - }, z$1.core.$strip>], "type">>; -}, z$1.core.$strict>; -type LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>; declare const createQueuedMessageRequestSchema: z$1.ZodObject<{ input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ visibility: z$1.ZodOptional<z$1.ZodEnum<{ @@ -8971,10 +8886,10 @@ declare const createQueuedMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -9196,8 +9111,8 @@ declare const sendQueuedMessageResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9568,9 +9483,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - unmanaged: "unmanaged"; - "managed-worktree": "managed-worktree"; personal: "personal"; + "managed-worktree": "managed-worktree"; + unmanaged: "unmanaged"; }>; branchName: z$1.ZodNullable<z$1.ZodString>; baseBranch: z$1.ZodNullable<z$1.ZodString>; @@ -9598,8 +9513,8 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ connected: "connected"; }>; maxPermissionMode: z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>; lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>; @@ -9874,8 +9789,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject< ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - auto: "auto"; "accept-edits": "accept-edits"; + auto: "auto"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -10243,8 +10158,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - refusal: "refusal"; provider: "provider"; + refusal: "refusal"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -12678,7 +12593,6 @@ type ThreadSendResult = { type ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus; type ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse; type ThreadEditMessageResult = EditMessageResponse; -type ThreadLatestMessageEditResult = LatestMessageEditResponse; type ThreadStopResult = { ok: true; }; @@ -12909,7 +12823,6 @@ interface ThreadsArea { events: ThreadEventsArea; fork(args: ThreadForkArgs): Promise<ThreadForkResult>; get(args: ThreadGetArgs): Promise<ThreadGetResult>; - getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>; interactions: ThreadInteractionsArea; list(args?: ThreadListArgs): Promise<ThreadListResult>; markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>; diff --git a/packages/sdk/src/areas/threads.ts b/packages/sdk/src/areas/threads.ts index 89ece1550e..11ef199674 100644 --- a/packages/sdk/src/areas/threads.ts +++ b/packages/sdk/src/areas/threads.ts @@ -16,7 +16,6 @@ import type { CreateThreadRequest, EditMessageRequest, EditMessageResponse, - LatestMessageEditResponse, ForkThreadRequest, DeleteThreadRequest, PromptHistoryResponse, @@ -117,7 +116,6 @@ export type ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus; export type ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse; export type ThreadEditMessageResult = EditMessageResponse; -export type ThreadLatestMessageEditResult = LatestMessageEditResponse; export type ThreadStopResult = { ok: true }; export type ThreadCompactResult = { ok: true }; export type ThreadBannerActionResult = { ok: true }; @@ -444,9 +442,6 @@ export interface ThreadsArea { events: ThreadEventsArea; fork(args: ThreadForkArgs): Promise<ThreadForkResult>; get(args: ThreadGetArgs): Promise<ThreadGetResult>; - getLatestMessageEdit( - args: ThreadStatusArgs, - ): Promise<ThreadLatestMessageEditResult>; interactions: ThreadInteractionsArea; list(args?: ThreadListArgs): Promise<ThreadListResult>; markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>; @@ -953,14 +948,6 @@ export function createThreadsArea(args: CreateSdkAreaArgs): ThreadsArea { ); }, get: getThread, - async getLatestMessageEdit(input) { - return transport.readJson( - transport.api.v1.threads[":id"]["latest-message-edit"].$get( - { param: { id: input.threadId } }, - ...signalRequestArgs(input.signal), - ), - ); - }, interactions, async list(input) { return transport.readJson( diff --git a/packages/sdk/test/public-types.test.ts b/packages/sdk/test/public-types.test.ts index ff961e8a7b..2c93103278 100644 --- a/packages/sdk/test/public-types.test.ts +++ b/packages/sdk/test/public-types.test.ts @@ -360,7 +360,6 @@ type ExpectedThreadsKey = | "events" | "fork" | "get" - | "getLatestMessageEdit" | "interactions" | "list" | "markRead" diff --git a/packages/sdk/test/sdk.test.ts b/packages/sdk/test/sdk.test.ts index 0291ca1aab..dde43b94d9 100644 --- a/packages/sdk/test/sdk.test.ts +++ b/packages/sdk/test/sdk.test.ts @@ -1054,14 +1054,8 @@ describe("@bb/sdk", () => { ]); }); - it("reads and submits an atomic message edit", async () => { + it("submits an atomic message edit", async () => { const queue = createFetchQueue([ - { - body: { - expectedRequestSequence: 41, - input: [{ type: "text", text: "Original", mentions: [] }], - }, - }, { body: { ok: true, @@ -1078,9 +1072,6 @@ describe("@bb/sdk", () => { }), }); - await expect( - sdk.threads.getLatestMessageEdit({ threadId: "thr_edit" }), - ).resolves.toMatchObject({ expectedRequestSequence: 41 }); await expect( sdk.threads.editMessage({ threadId: "thr_edit", @@ -1091,11 +1082,6 @@ describe("@bb/sdk", () => { ).resolves.toMatchObject({ requestSequence: 43 }); expect(queue.requests).toEqual([ - { - bodyText: undefined, - method: "GET", - url: "http://bb.test/api/v1/threads/thr_edit/latest-message-edit", - }, { bodyText: JSON.stringify({ operationId: "edit-op-1", diff --git a/packages/server-contract/src/api/threads.ts b/packages/server-contract/src/api/threads.ts index 0c4a7f5281..e7c7cb31da 100644 --- a/packages/server-contract/src/api/threads.ts +++ b/packages/server-contract/src/api/threads.ts @@ -276,7 +276,8 @@ export const editMessageRequestSchema = sendMessageRequestSchema .omit({ mode: true }) .extend({ operationId: z.string().min(1), - expectedRequestSequence: z.number().int().nonnegative(), + /** Omission targets the latest editable message with no staleness guard. */ + expectedRequestSequence: z.number().int().nonnegative().optional(), }) .strict(); export type EditMessageRequest = z.infer<typeof editMessageRequestSchema>; @@ -290,16 +291,6 @@ export const editMessageResponseSchema = z .strict(); export type EditMessageResponse = z.infer<typeof editMessageResponseSchema>; -export const latestMessageEditResponseSchema = z - .object({ - expectedRequestSequence: z.number().int().nonnegative(), - input: z.array(promptInputSchema).min(1), - }) - .strict(); -export type LatestMessageEditResponse = z.infer< - typeof latestMessageEditResponseSchema ->; - export const sendQueuedMessageModeSchema = z.enum(["auto", "steer"]); export type SendQueuedMessageMode = z.infer<typeof sendQueuedMessageModeSchema>; diff --git a/packages/server-contract/src/public-api.ts b/packages/server-contract/src/public-api.ts index d1d2001f31..6f1b8ed69d 100644 --- a/packages/server-contract/src/public-api.ts +++ b/packages/server-contract/src/public-api.ts @@ -62,7 +62,6 @@ import type { CreateThreadRequest, EditMessageRequest, EditMessageResponse, - LatestMessageEditResponse, ForkThreadRequest, RestartTerminalRequest, DeleteThreadSectionRequest, @@ -1004,12 +1003,6 @@ export const publicApiRoutes = { ), response: jsonResponse<EditMessageResponse>(), }), - latestMessageEdit: defineRoute({ - path: "/threads/:id/latest-message-edit", - method: "get", - request: noRequest<PathId>(), - response: jsonResponse<LatestMessageEditResponse>(), - }), /** @deprecated App code uses dedicated composer queries. */ composerBootstrap: defineRoute({ path: "/threads/:id/composer-bootstrap", diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index 2acedb57ce..7b03e8a985 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n utf8: \"utf8\";\n base64: \"base64\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n replace: \"replace\";\n append: \"append\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n external: \"external\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n external: \"external\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const latestMessageEditResponseSchema: z$1.ZodObject<{\n expectedRequestSequence: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strict>;\ntype LatestMessageEditResponse = z$1.infer<typeof latestMessageEditResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadLatestMessageEditResult = LatestMessageEditResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n getLatestMessageEdit(args: ThreadStatusArgs): Promise<ThreadLatestMessageEditResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n standard: \"standard\";\n personal: \"personal\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n standard: \"standard\";\n personal: \"personal\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n none: \"none\";\n blocked: \"blocked\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n personal: \"personal\";\n \"managed-worktree\": \"managed-worktree\";\n unmanaged: \"unmanaged\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n provider: \"provider\";\n refusal: \"refusal\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault<z.ZodArray<z.ZodObject<{\n start: z.ZodNumber;\n end: z.ZodNumber;\n resource: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional<z.ZodString>;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable<z.ZodString>;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional<z.ZodString>;\n sizeBytes: z.ZodOptional<z.ZodNumber>;\n mimeType: z.ZodOptional<z.ZodString>;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer<typeof promptInputSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional<z.ZodString>;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable<z.ZodString>;\n branch: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"existing\">;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer<typeof createThreadEnvironmentArgsSchema>;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer<typeof createExecutionInputSourcesSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType<ThreadChatProps>;\ndeclare const Markdown: react.ComponentType<MarkdownProps>;\ndeclare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;\ndeclare const useRpc: <Contract extends PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract<StandardSchemaV1<unknown, unknown>, StandardSchemaV1<unknown, unknown>>>>>() => PluginRpcClient<Contract>;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md index c2135a7487..cbe614107c 100644 --- a/plans/issue-1114-edit-sent-message.md +++ b/plans/issue-1114-edit-sent-message.md @@ -176,7 +176,7 @@ POST /api/v1/threads/:id/edit-message ```ts { operationId: string; - expectedRequestSequence: number; + expectedRequestSequence?: number; input: PromptInput[]; model?: string; serviceTier?: ServiceTier; @@ -186,14 +186,11 @@ POST /api/v1/threads/:id/edit-message } ``` -For CLI convenience, a read-only latest-target route remains available: +Omitting `expectedRequestSequence` atomically targets the latest eligible +request with no staleness guard; supplying it selects any eligible earlier +message and doubles as an optimistic-concurrency guard. -```text -GET /api/v1/threads/:id/latest-message-edit -``` - -The SDK exposes `threads.getLatestMessageEdit(...)` and -`threads.editMessage(...)`. The CLI exposes: +The SDK exposes `threads.editMessage(...)`. The CLI exposes: ```text bb thread edit-message [id] [--self] @@ -201,10 +198,6 @@ bb thread edit-message [id] [--self] [--expected-request-sequence <n>] [--json] ``` -Without an explicit sequence the CLI resolves the latest eligible request. -With a sequence it can edit any eligible earlier message and uses the value as -an optimistic-concurrency guard. - ## Atomic Replacement The server holds the per-thread mutation guard and performs: From 2af4d251f4fed61f33be60ad7823e54705a14102 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Tue, 11 Aug 2026 14:07:58 -0700 Subject: [PATCH 7/9] Stage rewinds per lease and cut composer/test duplication - key staged rewind forks by the server-minted per-attempt leaseId: each attempt owns one fork, dissolving the cross-attempt lease refcount, join validation, cleanup-wait loop, and sha256 staging-id hashing, and dropping operationId from both daemon wire commands - replace the runtime's hardcoded rewind provider allowlist with the existing supportsFork capability, share one staged-discard helper, and merge the preparing/prepared maps into a single lease-keyed map - collapse the editable-turn candidate scan to one query - share one inline-draft-composer builder between the queued and sent-message editors and fold the sent editor's bespoke blocked reasons into the queued editor's ready/unavailable precedent - prune render-wiring and duplicate tests across timeline actions, settings, CLI, and the Pi bridge Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --- .../promptbox/FollowUpPromptBox.tsx | 29 +- .../ThreadTimelineRows.actions.test.tsx | 104 ---- .../thread-runtime-mutations.test.tsx | 6 - .../views/SettingsView.experiments.test.tsx | 12 +- .../ThreadDetailPromptArea.test.tsx | 2 +- .../thread-detail/ThreadDetailPromptArea.tsx | 582 ++++++++---------- .../__tests__/command-output/settings.test.ts | 20 - apps/host-daemon/src/command-dispatch.test.ts | 8 +- .../src/command-handlers/thread.ts | 7 +- .../test/command/dispatch-helpers.ts | 2 +- .../services/threads/thread-edit-message.ts | 73 +-- .../test/threads/thread-edit-message.test.ts | 38 +- .../src/pi/bridge/__tests__/bridge.test.ts | 11 - .../src/runtime-thread-rewind.test.ts | 179 ++---- packages/agent-runtime/src/runtime.ts | 251 +++----- packages/agent-runtime/src/types.ts | 3 - packages/host-daemon-contract/src/commands.ts | 3 +- .../bundled-types/bb-plugin-sdk.d.ts | 114 ++-- .../src/generated/plugin-sdk-dts.generated.ts | 2 +- plans/issue-1114-edit-sent-message.md | 8 +- 20 files changed, 522 insertions(+), 932 deletions(-) diff --git a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx index cd45793bec..b26e61b4ea 100644 --- a/apps/app/src/components/promptbox/FollowUpPromptBox.tsx +++ b/apps/app/src/components/promptbox/FollowUpPromptBox.tsx @@ -142,8 +142,6 @@ function isKeyboardFocusTarget(target: EventTarget | null): boolean { * render submit/queue/stop affordances. */ export type FollowUpBlockedReason = - | "empty-message" - | "editing-requires-idle" | "loading-execution-options" | "loading-pending-interactions" | "pending-interaction" @@ -327,11 +325,6 @@ function FollowUpPromptBoxWithComposer({ const canSubmit = submitMode.kind === "ready" || submitMode.kind === "queue"; const isStopping = submitMode.kind === "blocked" && submitMode.reason === "stopping"; - const isEmptyMessage = - submitMode.kind === "blocked" && submitMode.reason === "empty-message"; - const isEditingRequiringIdle = - submitMode.kind === "blocked" && - submitMode.reason === "editing-requires-idle"; const isLoadingExecutionOptions = submitMode.kind === "blocked" && submitMode.reason === "loading-execution-options"; @@ -735,19 +728,15 @@ function FollowUpPromptBoxWithComposer({ : "Queue follow-up (Enter)" : isStopping ? "Stopping run..." - : isEmptyMessage - ? "Enter a message" - : isEditingRequiringIdle - ? "Wait for the thread to become idle" - : isLoadingExecutionOptions - ? "Loading models..." - : isLoadingPendingInteractions - ? "Checking pending interactions..." - : isProvisioning - ? "Provisioning..." - : isUnavailable - ? "Unavailable" - : "Submit (Enter)", + : isLoadingExecutionOptions + ? "Loading models..." + : isLoadingPendingInteractions + ? "Checking pending interactions..." + : isProvisioning + ? "Provisioning..." + : isUnavailable + ? "Unavailable" + : "Submit (Enter)", isRunning: canStopRuntime, }} typeahead={typeahead} diff --git a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx index 46cd7f0c8d..e94d2285b6 100644 --- a/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx +++ b/apps/app/src/components/thread/timeline/ThreadTimelineRows.actions.test.tsx @@ -359,62 +359,6 @@ describe("ThreadTimelineRows actions", () => { ).toContain("max-md:pointer-coarse:size-7"); }); - it("offers edit on every accepted user message, including the first turn", () => { - const onEditMessage = vi.fn(); - renderWithRouter( - <ThreadTimelineRows - timelineRows={[ - conversationRow({ - id: "earlier_user_message", - role: "user", - text: "An earlier request.", - sourceSeqStart: 3, - turnId: null, - }), - conversationRow({ - id: "latest_user_message", - role: "user", - text: "The latest request.", - sourceSeqStart: 7, - attachments: { - webImages: 0, - localImages: 1, - localFiles: 1, - imageUrls: [], - localImagePaths: ["uploads/screenshot.png"], - localFilePaths: ["uploads/spec.md"], - }, - }), - ]} - onEditMessage={onEditMessage} - threadRuntimeDisplayStatus="idle" - workspaceRootPath={undefined} - />, - ); - - const editButtons = screen.getAllByRole("button", { - name: "Edit message", - }); - expect(editButtons).toHaveLength(2); - fireEvent.click(editButtons[0]!); - expect(onEditMessage).toHaveBeenNthCalledWith(1, { - messageId: "earlier_user_message", - expectedRequestSequence: 3, - input: [{ type: "text", text: "An earlier request.", mentions: [] }], - }); - - fireEvent.click(editButtons[1]!); - expect(onEditMessage).toHaveBeenCalledWith({ - messageId: "latest_user_message", - expectedRequestSequence: 7, - input: [ - { type: "text", text: "The latest request.", mentions: [] }, - { type: "localImage", path: "uploads/screenshot.png" }, - { type: "localFile", path: "uploads/spec.md" }, - ], - }); - }); - it("restores edit actions on every cached message after an active turn becomes idle", () => { const onEditMessage = vi.fn(); renderWithRouter( @@ -436,54 +380,6 @@ describe("ThreadTimelineRows actions", () => { ); }); - it("replaces the matching sent message with an inline editor host", () => { - const onHostElementChange = vi.fn(); - const view = renderWithRouter( - <ThreadTimelineRows - timelineRows={[ - conversationRow({ - id: "edited_user_message", - role: "user", - text: "The original request.", - sourceSeqStart: 7, - }), - conversationRow({ - id: "same_request_sibling", - role: "user", - text: "A grouped sibling remains visible.", - sourceSeqStart: 7, - }), - conversationRow({ - id: "assistant_response", - role: "assistant", - text: "The existing response remains visible.", - sourceSeqStart: 8, - }), - ]} - inlineMessageEditor={{ - messageId: "edited_user_message", - onHostElementChange, - }} - threadRuntimeDisplayStatus="idle" - workspaceRootPath={undefined} - />, - ); - - const host = view.container.querySelector<HTMLDivElement>( - "[data-sent-message-inline-editor-host]", - ); - expect(host).not.toBeNull(); - expect(onHostElementChange).toHaveBeenCalledWith(host); - expect(screen.queryByText("The original request.")).toBeNull(); - expect(screen.getByText("A grouped sibling remains visible.")).toBeTruthy(); - expect( - screen.getByText("The existing response remains visible."), - ).toBeTruthy(); - - view.unmount(); - expect(onHostElementChange.mock.calls.at(-1)?.[0]).toBeNull(); - }); - it("does not offer edit for a steer request", () => { const markup = toMarkup( <ThreadTimelineRows diff --git a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx index b0048dca0f..a92f196569 100644 --- a/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx +++ b/apps/app/src/hooks/mutations/thread-runtime-mutations.test.tsx @@ -176,12 +176,6 @@ describe("thread runtime mutations", () => { await act(async () => { await editPromise; }); - expect(sdk.threads.editMessage).toHaveBeenCalledWith({ - threadId: "thread-1", - operationId: "edit-op-1", - expectedRequestSequence: 41, - input: [{ type: "text", text: "Replacement", mentions: [] }], - }); expect(invalidateQueries).not.toHaveBeenCalled(); }); diff --git a/apps/app/src/views/SettingsView.experiments.test.tsx b/apps/app/src/views/SettingsView.experiments.test.tsx index 88099fb196..ff2d895508 100644 --- a/apps/app/src/views/SettingsView.experiments.test.tsx +++ b/apps/app/src/views/SettingsView.experiments.test.tsx @@ -6,7 +6,6 @@ import { ExperimentsSettingsSection } from "./SettingsView"; afterEach(cleanup); function renderSection(overrides?: { - onEditMessagesEnabledChange?: (enabled: boolean) => void; onNewOnboardingEnabledChange?: (enabled: boolean) => void; onToolsHubEnabledChange?: (enabled: boolean) => void; }) { @@ -17,9 +16,7 @@ function renderSection(overrides?: { editMessagesEnabled={false} newOnboardingEnabled={false} onClaudeCodeMockCliTrafficEnabledChange={vi.fn()} - onEditMessagesEnabledChange={ - overrides?.onEditMessagesEnabledChange ?? vi.fn() - } + onEditMessagesEnabledChange={vi.fn()} onNewOnboardingEnabledChange={ overrides?.onNewOnboardingEnabledChange ?? vi.fn() } @@ -30,13 +27,6 @@ function renderSection(overrides?: { } describe("ExperimentsSettingsSection", () => { - it("reports edit-message changes", () => { - const onChange = vi.fn(); - renderSection({ onEditMessagesEnabledChange: onChange }); - fireEvent.click(screen.getByLabelText("Edit messages")); - expect(onChange).toHaveBeenCalledWith(true); - }); - it("reports new onboarding changes", () => { const onChange = vi.fn(); renderSection({ onNewOnboardingEnabledChange: onChange }); diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx index 2ee35e457b..c75f4ca381 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.test.tsx @@ -856,7 +856,7 @@ describe("ThreadDetailPromptArea", () => { const inlineEditor = within(hostElement); expect(inlineEditor.getByTestId("submit-mode").textContent).toBe( - "blocked:editing-requires-idle", + "blocked:unavailable", ); fireEvent.click( inlineEditor.getByRole("button", { name: "Submit composer" }), diff --git a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx index 897293dab5..173ccc3f3d 100644 --- a/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx +++ b/apps/app/src/views/thread-detail/ThreadDetailPromptArea.tsx @@ -12,7 +12,6 @@ import type { EnvironmentStatus, PendingInteraction, PromptInput, - PromptTextMention, ThreadQueuedMessage, ThreadPullRequest, ThreadTimelineActivePromptMode, @@ -99,6 +98,7 @@ import { import { FollowUpPromptBox, type FollowUpComposerProps, + type FollowUpPromptBoxProps, type FollowUpSubmitMode, } from "@/components/promptbox/FollowUpPromptBox"; import type { SendMessageMutationLike } from "./threadDetailMutationTypes"; @@ -217,6 +217,91 @@ interface ThreadDetailPromptAreaProps { thread: ThreadWithRuntime; } +interface InlineDraftComposerOptions { + attachments: FollowUpPromptBoxProps["attachments"]; + canModifierSubmit: boolean; + compactPromptPlaceholder: string; + composerId: string; + /** Live draft under edit; supplies the message text, mentions, and history draft. */ + draft: PromptDraftState; + editFocusNonce: number; + execution: FollowUpPromptBoxProps["execution"]; + /** Combined with editFocusNonce to focus the caret at the end per edit session. */ + focusSessionKey: string | number; + historyResetKey: string; + isSubmitting: boolean; + onChangeMessage: FollowUpComposerProps["onChangeMessage"]; + onSelectHistoryEntry: (draft: PromptDraftState) => void; + permission: FollowUpPromptBoxProps["permission"]; + pluginComposerHost: PluginComposerHost; + promptActions: FollowUpPromptBoxProps["promptActions"]; + promptPlaceholder: string; + submit: () => void; + submitMode: FollowUpSubmitMode; + submitTitle?: string; + suppressPluginComposerCustomizations?: boolean; + textEffects: FollowUpPromptBoxProps["textEffects"]; + threadRuntimeDisplayStatus: FollowUpComposerProps["threadRuntimeDisplayStatus"]; + typeahead: FollowUpPromptBoxProps["typeahead"]; + zenModeResetKey: string; +} + +/** + * The queued-message and sent-message inline editors render the same + * FollowUpPromptBox shape: read-only execution/permission controls, no stack, + * no environment summary, and a plugin-composer host bound to the draft under + * edit. Only the draft accessors, submit wiring, and session keys differ, so + * both call sites pass those in here and share the rest. + */ +function buildInlineDraftComposer(options: InlineDraftComposerOptions) { + return ( + <FollowUpPromptBox + id={options.composerId} + attachments={options.attachments} + stack={null} + composer={{ + history: { + currentDraft: options.draft, + entries: [], + onSelectEntry: options.onSelectHistoryEntry, + resetKey: options.historyResetKey, + }, + isFollowUpSubmitting: options.isSubmitting, + message: options.draft.text, + mentionRanges: options.draft.mentions, + onChangeMessage: options.onChangeMessage, + onModifierSubmit: options.submit, + onSubmit: options.submit, + submitTitle: options.submitTitle, + compactPromptPlaceholder: options.compactPromptPlaceholder, + promptPlaceholder: options.promptPlaceholder, + canModifierSubmit: options.canModifierSubmit, + steerActiveThreadOnEnter: false, + submitMode: options.submitMode, + threadRuntimeDisplayStatus: options.threadRuntimeDisplayStatus, + }} + pluginComposerHost={options.pluginComposerHost} + pluginComposerScope={options.pluginComposerHost.scope} + suppressPluginComposerCustomizations={ + options.suppressPluginComposerCustomizations + } + textEffects={options.textEffects} + environmentSummary={null} + contextWindowUsage={null} + execution={options.execution} + executionReadOnly + permission={options.permission} + permissionReadOnly + typeahead={options.typeahead} + promptActions={options.promptActions} + zenModeResetKey={options.zenModeResetKey} + focusEndKey={`${options.focusSessionKey}:${options.editFocusNonce}`} + isPrimaryComposer={false} + showScrollToBottomButton={false} + /> + ); +} + export function ThreadDetailPromptArea({ activeBackgroundAgentCount, canUseGitUi, @@ -389,17 +474,15 @@ export function ThreadDetailPromptArea({ }); clearInlineAttachmentErrorRef.current = () => setInlineAttachmentError(null); const promptTextEffects = useComposerTextEffects(promptDraft.storageKey); - const queuedComposerTextEffectKey = inlineEditingQueuedMessage - ? `queued-message:${thread.id}:${inlineEditingQueuedMessage.queuedMessageId}:${inlineEditingQueuedMessage.editSessionId}` - : null; const queuedComposerTextEffects = useComposerTextEffects( - queuedComposerTextEffectKey, + inlineEditingQueuedMessage + ? `queued-message:${thread.id}:${inlineEditingQueuedMessage.queuedMessageId}:${inlineEditingQueuedMessage.editSessionId}` + : null, ); - const sentMessageComposerTextEffectKey = sentMessageEdit - ? `sent-message:${thread.id}:${sentMessageEdit.operationId}` - : null; const sentMessageComposerTextEffects = useComposerTextEffects( - sentMessageComposerTextEffectKey, + sentMessageEdit + ? `sent-message:${thread.id}:${sentMessageEdit.operationId}` + : null, ); const [expandedBannerSection, setExpandedBannerSection] = useState<ThreadPromptContextBannerExpandedSection | null>(null); @@ -620,49 +703,6 @@ export function ThreadDetailPromptArea({ thread.id, ], ); - const queuedPluginComposerHostBinding = useMemo<Omit< - PluginComposerHost, - "draft" - > | null>(() => { - if (!inlineEditingQueuedMessage) return null; - - const { - draft: initialDraft, - editSessionId, - queuedMessageId, - } = inlineEditingQueuedMessage; - const isCurrentSession = ( - current: InlineQueuedMessageEditState | null, - ): current is InlineQueuedMessageEditState => - current?.editSessionId === editSessionId && - current.queuedMessageId === queuedMessageId; - - return { - scope: { - kind: "queued-message", - threadId: thread.id, - queuedMessageId, - }, - textEffectKey: `queued-message:${thread.id}:${queuedMessageId}:${editSessionId}`, - getCurrent: () => { - const current = inlineEditingQueuedMessageRef.current; - return isCurrentSession(current) ? current.draft : initialDraft; - }, - setDraft: (draft) => { - const current = inlineEditingQueuedMessageRef.current; - if (isCurrentSession(current)) { - commitInlineQueuedMessage({ ...current, draft }); - } - }, - focus: focusInlinePluginComposer, - }; - }, [ - inlineEditingQueuedMessage, - inlineEditingQueuedMessageRef, - commitInlineQueuedMessage, - focusInlinePluginComposer, - thread.id, - ]); const normalPluginComposerHost = useMemo<PluginComposerHost>( () => ({ ...normalPluginComposerHostBinding, @@ -670,47 +710,6 @@ export function ThreadDetailPromptArea({ }), [currentPromptDraft, normalPluginComposerHostBinding], ); - const queuedPluginComposerHost = useMemo<PluginComposerHost | null>( - () => - queuedPluginComposerHostBinding - ? { - ...queuedPluginComposerHostBinding, - draft: activeComposerDraft, - } - : null, - [activeComposerDraft, queuedPluginComposerHostBinding], - ); - const sentMessagePluginComposerHost = - useMemo<PluginComposerHost | null>(() => { - if (!sentMessageEdit || sentMessageComposerTextEffectKey === null) { - return null; - } - const { draft, operationId } = sentMessageEdit; - return { - scope: { kind: "thread", threadId: thread.id }, - textEffectKey: sentMessageComposerTextEffectKey, - draft, - getCurrent: () => { - const current = sentMessageEditRef.current; - return current?.operationId === operationId ? current.draft : draft; - }, - setDraft: (nextDraft) => { - const current = sentMessageEditRef.current; - if (current?.operationId === operationId) { - current.updateDraft(() => nextDraft); - } - }, - focus: focusInlinePluginComposer, - }; - }, [ - focusInlinePluginComposer, - sentMessageComposerTextEffectKey, - sentMessageEdit, - thread.id, - ]); - usePublishPluginComposerHost( - queuedPluginComposerHost ?? normalPluginComposerHost, - ); const hasPromptDraftInput = currentPromptDraftInput.length > 0; const isPromptEmpty = useCallback( () => !hasPromptDraftInput, @@ -949,52 +948,6 @@ export function ThreadDetailPromptArea({ promptDraft.removeAttachment, ], ); - const sentMessageAttachmentsConfig = useMemo( - () => - sentMessageEdit - ? { - items: sentMessageEdit.draft.attachments, - projectId, - isAttaching: isAttachingSentMessageFiles, - error: sentMessageAttachmentError, - onAttachFiles: handleAttachSentMessageFiles, - onRemove: (path: string) => { - sentMessageEdit.updateDraft((current) => ({ - ...current, - attachments: current.attachments.filter( - (attachment) => attachment.path !== path, - ), - })); - }, - } - : null, - [ - handleAttachSentMessageFiles, - isAttachingSentMessageFiles, - projectId, - sentMessageAttachmentError, - sentMessageEdit, - ], - ); - const inlineAttachmentsConfig = useMemo( - () => ({ - items: activeComposerDraft.attachments, - projectId, - isAttaching: isAttachingInlineFiles, - error: inlineAttachmentError, - onAttachFiles: handleAttachInlineFiles, - onRemove: removeActiveComposerAttachment, - }), - [ - activeComposerDraft.attachments, - inlineAttachmentError, - handleAttachInlineFiles, - isAttachingInlineFiles, - projectId, - removeActiveComposerAttachment, - ], - ); - const handleBottomComposerSubmit = useCallback(() => { void handleSend(); }, [handleSend]); @@ -1061,31 +1014,16 @@ export function ThreadDetailPromptArea({ activeBackgroundAgentCount === 0 && activeWorkflows.length === 0 && activeBackgroundCommands.length === 0; + // Empty input renders as "ready" with a no-op submit, matching the queued + // inline editor; handleSentMessageEditSubmit guards on canSubmitSentMessageEdit. const sentMessageEditSubmitMode = useMemo<FollowUpSubmitMode>( () => - canSubmitSentMessageEdit + canSubmitSentMessageEdit || sentMessageEditInput.length === 0 ? { kind: "ready" } - : sentMessageEditInput.length === 0 - ? { kind: "blocked", reason: "empty-message" } - : submitMode.kind === "blocked" - ? submitMode - : runtimeDisplayStatus !== "idle" || - queuedMessages.length > 0 || - activeBackgroundAgentCount > 0 || - activeWorkflows.length > 0 || - activeBackgroundCommands.length > 0 - ? { kind: "blocked", reason: "editing-requires-idle" } - : { kind: "blocked", reason: "unavailable" }, - [ - activeBackgroundAgentCount, - activeBackgroundCommands.length, - activeWorkflows.length, - canSubmitSentMessageEdit, - queuedMessages.length, - runtimeDisplayStatus, - sentMessageEditInput.length, - submitMode, - ], + : submitMode.kind === "blocked" + ? submitMode + : { kind: "blocked", reason: "unavailable" }, + [canSubmitSentMessageEdit, sentMessageEditInput.length, submitMode], ); const handleSentMessageEditSubmit = useCallback(() => { if (!sentMessageEdit || !canSubmitSentMessageEdit) { @@ -1101,93 +1039,6 @@ export function ThreadDetailPromptArea({ sentMessageEdit, sentMessageEditInput, ]); - const handleSentMessageEditDraftChange = useCallback( - (text: string, mentions: PromptTextMention[]) => { - sentMessageEdit?.updateDraft((current) => ({ - ...current, - text, - mentions, - })); - }, - [sentMessageEdit], - ); - const sentMessageComposerConfig = useMemo<FollowUpComposerProps | null>( - () => - sentMessageEdit - ? { - history: { - currentDraft: sentMessageEdit.draft, - entries: [], - onSelectEntry: (draft) => - sentMessageEdit.updateDraft(() => draft), - resetKey: `${thread.id}:${sentMessageEdit.operationId}`, - }, - isFollowUpSubmitting: sentMessageEdit.isSubmitting, - message: sentMessageEdit.draft.text, - mentionRanges: sentMessageEdit.draft.mentions, - onChangeMessage: handleSentMessageEditDraftChange, - onModifierSubmit: handleSentMessageEditSubmit, - onSubmit: handleSentMessageEditSubmit, - submitTitle: "Submit edit (Enter)", - compactPromptPlaceholder: "Edit message", - promptPlaceholder: "Edit message", - canModifierSubmit: canSubmitSentMessageEdit, - steerActiveThreadOnEnter: false, - submitMode: sentMessageEditSubmitMode, - threadRuntimeDisplayStatus: runtimeDisplayStatus, - } - : null, - [ - canSubmitSentMessageEdit, - handleSentMessageEditDraftChange, - handleSentMessageEditSubmit, - runtimeDisplayStatus, - sentMessageEdit, - sentMessageEditSubmitMode, - thread.id, - ], - ); - const inlineComposerConfig = useMemo<FollowUpComposerProps | null>( - () => - inlineEditingQueuedMessage - ? { - history: { - currentDraft: activeComposerDraft, - entries: [], - onSelectEntry: setActiveComposerDraft, - resetKey: `${thread.id}:${inlineEditingQueuedMessage.editSessionId}`, - }, - isFollowUpSubmitting: isUpdateQueuedMessagePending, - message: activeComposerDraft.text, - mentionRanges: activeComposerDraft.mentions, - onChangeMessage: handleComposerMessageChange, - onModifierSubmit: handleInlineComposerSubmit, - onSubmit: handleInlineComposerSubmit, - compactPromptPlaceholder, - promptPlaceholder, - canModifierSubmit: - activeComposerDraftInput.length > 0 && - !isUpdateQueuedMessagePending, - steerActiveThreadOnEnter: false, - submitMode: { kind: "ready" }, - threadRuntimeDisplayStatus: runtimeDisplayStatus, - } - : null, - [ - activeComposerDraft, - activeComposerDraftInput.length, - compactPromptPlaceholder, - handleComposerMessageChange, - handleInlineComposerSubmit, - inlineEditingQueuedMessage, - isUpdateQueuedMessagePending, - promptPlaceholder, - runtimeDisplayStatus, - setActiveComposerDraft, - thread.id, - ], - ); - const bottomExecutionConfig = useMemo( () => ({ providerRouting: executionOptionsRouting, @@ -1351,67 +1202,118 @@ export function ThreadDetailPromptArea({ ), [clearThreadGoal.isPending, goal, handleClearGoal, isGoalExpanded], ); - const inlineEditor = useMemo<QueuedMessageInlineEditor | undefined>(() => { + const queuedMessageEditor = useMemo(() => { if ( !inlineEditingQueuedMessage || - !inlineComposerConfig || !inlineExecutionConfig || - !inlinePermissionConfig || - !queuedPluginComposerHost + !inlinePermissionConfig ) { - return undefined; + return null; } - return { - queuedMessageId: inlineEditingQueuedMessage.queuedMessageId, + const { + draft: initialDraft, + editSessionId, + queuedMessageId, + } = inlineEditingQueuedMessage; + const isCurrentSession = ( + current: InlineQueuedMessageEditState | null, + ): current is InlineQueuedMessageEditState => + current?.editSessionId === editSessionId && + current.queuedMessageId === queuedMessageId; + const pluginComposerHost: PluginComposerHost = { + scope: { + kind: "queued-message", + threadId: thread.id, + queuedMessageId, + }, + textEffectKey: `queued-message:${thread.id}:${queuedMessageId}:${editSessionId}`, + draft: activeComposerDraft, + getCurrent: () => { + const current = inlineEditingQueuedMessageRef.current; + return isCurrentSession(current) ? current.draft : initialDraft; + }, + setDraft: (draft) => { + const current = inlineEditingQueuedMessageRef.current; + if (isCurrentSession(current)) { + commitInlineQueuedMessage({ ...current, draft }); + } + }, + focus: focusInlinePluginComposer, + }; + const inlineEditor: QueuedMessageInlineEditor = { + queuedMessageId, queuedMessageIndex: inlineEditingQueuedMessage.queuedMessageIndex, onDismiss: dismissInlineQueuedMessageEditor, - content: ( - <FollowUpPromptBox - id={`${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-queued-${inlineEditingQueuedMessage.queuedMessageId}`} - attachments={inlineAttachmentsConfig} - stack={null} - composer={inlineComposerConfig} - pluginComposerHost={queuedPluginComposerHost} - pluginComposerScope={queuedPluginComposerHost.scope} - textEffects={queuedComposerTextEffects} - environmentSummary={null} - contextWindowUsage={null} - execution={inlineExecutionConfig} - executionReadOnly - permission={inlinePermissionConfig} - permissionReadOnly - typeahead={typeaheadConfig} - promptActions={promptActions} - zenModeResetKey={`queued-message:${inlineEditingQueuedMessage.queuedMessageId}`} - focusEndKey={`${inlineEditingQueuedMessage.editSessionId}:${editFocusNonce}`} - isPrimaryComposer={false} - showScrollToBottomButton={false} - /> - ), + content: buildInlineDraftComposer({ + attachments: { + items: activeComposerDraft.attachments, + projectId, + isAttaching: isAttachingInlineFiles, + error: inlineAttachmentError, + onAttachFiles: handleAttachInlineFiles, + onRemove: removeActiveComposerAttachment, + }, + canModifierSubmit: + activeComposerDraftInput.length > 0 && !isUpdateQueuedMessagePending, + compactPromptPlaceholder, + composerId: `${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-queued-${queuedMessageId}`, + draft: activeComposerDraft, + editFocusNonce, + execution: inlineExecutionConfig, + focusSessionKey: editSessionId, + historyResetKey: `${thread.id}:${editSessionId}`, + isSubmitting: isUpdateQueuedMessagePending, + onChangeMessage: handleComposerMessageChange, + onSelectHistoryEntry: setActiveComposerDraft, + permission: inlinePermissionConfig, + pluginComposerHost, + promptActions, + promptPlaceholder, + submit: handleInlineComposerSubmit, + submitMode: { kind: "ready" }, + textEffects: queuedComposerTextEffects, + threadRuntimeDisplayStatus: runtimeDisplayStatus, + typeahead: typeaheadConfig, + zenModeResetKey: `queued-message:${queuedMessageId}`, + }), }; + return { inlineEditor, pluginComposerHost }; }, [ + activeComposerDraft, + activeComposerDraftInput.length, + commitInlineQueuedMessage, + compactPromptPlaceholder, dismissInlineQueuedMessageEditor, editFocusNonce, - inlineAttachmentsConfig, - inlineComposerConfig, + focusInlinePluginComposer, + handleAttachInlineFiles, + handleComposerMessageChange, + handleInlineComposerSubmit, + inlineAttachmentError, inlineEditingQueuedMessage, + inlineEditingQueuedMessageRef, inlineExecutionConfig, inlinePermissionConfig, + isAttachingInlineFiles, + isUpdateQueuedMessagePending, + projectId, promptActions, + promptPlaceholder, queuedComposerTextEffects, - queuedPluginComposerHost, + removeActiveComposerAttachment, + runtimeDisplayStatus, + setActiveComposerDraft, + thread.id, typeaheadConfig, ]); + usePublishPluginComposerHost( + queuedMessageEditor?.pluginComposerHost ?? normalPluginComposerHost, + ); const sentMessageEditorPortal = useMemo(() => { - if ( - !sentMessageEdit || - !sentMessageEdit.hostElement || - !sentMessageAttachmentsConfig || - !sentMessageComposerConfig || - !sentMessagePluginComposerHost - ) { + if (!sentMessageEdit?.hostElement) { return null; } + const { draft, hostElement, operationId } = sentMessageEdit; return createPortal( <InlineMessageEditorFrame cancelLabel="Stop editing sent message" @@ -1419,41 +1321,89 @@ export function ThreadDetailPromptArea({ onCancel={sentMessageEdit.onCancel} variant="cap" > - <FollowUpPromptBox - id={`${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-sent-${sentMessageEdit.operationId}`} - attachments={sentMessageAttachmentsConfig} - stack={null} - composer={sentMessageComposerConfig} - pluginComposerHost={sentMessagePluginComposerHost} - pluginComposerScope={sentMessagePluginComposerHost.scope} - suppressPluginComposerCustomizations - textEffects={sentMessageComposerTextEffects} - environmentSummary={null} - contextWindowUsage={null} - execution={compactExecutionConfig} - executionReadOnly - permission={bottomPermissionConfig} - permissionReadOnly - typeahead={typeaheadConfig} - promptActions={promptActions} - zenModeResetKey={`sent-message:${sentMessageEdit.operationId}`} - focusEndKey={`${sentMessageEdit.operationId}:${editFocusNonce}`} - isPrimaryComposer={false} - showScrollToBottomButton={false} - /> + {buildInlineDraftComposer({ + attachments: { + items: draft.attachments, + projectId, + isAttaching: isAttachingSentMessageFiles, + error: sentMessageAttachmentError, + onAttachFiles: handleAttachSentMessageFiles, + onRemove: (path) => { + sentMessageEdit.updateDraft((current) => ({ + ...current, + attachments: current.attachments.filter( + (attachment) => attachment.path !== path, + ), + })); + }, + }, + canModifierSubmit: canSubmitSentMessageEdit, + compactPromptPlaceholder: "Edit message", + composerId: `${THREAD_DETAIL_COMPOSER_TEXTAREA_ID}-sent-${operationId}`, + draft, + editFocusNonce, + execution: compactExecutionConfig, + focusSessionKey: operationId, + historyResetKey: `${thread.id}:${operationId}`, + isSubmitting: sentMessageEdit.isSubmitting, + onChangeMessage: (text, mentions) => + sentMessageEdit.updateDraft((current) => ({ + ...current, + text, + mentions, + })), + onSelectHistoryEntry: (nextDraft) => + sentMessageEdit.updateDraft(() => nextDraft), + permission: bottomPermissionConfig, + pluginComposerHost: { + scope: { kind: "thread", threadId: thread.id }, + textEffectKey: `sent-message:${thread.id}:${operationId}`, + draft, + getCurrent: () => { + const current = sentMessageEditRef.current; + return current?.operationId === operationId + ? current.draft + : draft; + }, + setDraft: (nextDraft) => { + const current = sentMessageEditRef.current; + if (current?.operationId === operationId) { + current.updateDraft(() => nextDraft); + } + }, + focus: focusInlinePluginComposer, + }, + promptActions, + promptPlaceholder: "Edit message", + submit: handleSentMessageEditSubmit, + submitMode: sentMessageEditSubmitMode, + submitTitle: "Submit edit (Enter)", + suppressPluginComposerCustomizations: true, + textEffects: sentMessageComposerTextEffects, + threadRuntimeDisplayStatus: runtimeDisplayStatus, + typeahead: typeaheadConfig, + zenModeResetKey: `sent-message:${operationId}`, + })} </InlineMessageEditorFrame>, - sentMessageEdit.hostElement, + hostElement, ); }, [ bottomPermissionConfig, + canSubmitSentMessageEdit, compactExecutionConfig, editFocusNonce, + focusInlinePluginComposer, + handleAttachSentMessageFiles, + handleSentMessageEditSubmit, + isAttachingSentMessageFiles, + projectId, promptActions, - sentMessageAttachmentsConfig, - sentMessageComposerConfig, + runtimeDisplayStatus, + sentMessageAttachmentError, sentMessageComposerTextEffects, sentMessageEdit, - sentMessagePluginComposerHost, + sentMessageEditSubmitMode, + thread.id, typeaheadConfig, ]); const promptStack = useMemo( @@ -1527,7 +1477,7 @@ export function ThreadDetailPromptArea({ <QueuedMessagesList queuedMessages={queuedMessages} resolveMentionLink={resolveMentionLink} - inlineEditor={inlineEditor} + inlineEditor={queuedMessageEditor?.inlineEditor} sendDisabled={ !(submitMode.kind === "ready" || submitMode.kind === "queue") || runtimeDisplayStatus === "provisioning" || @@ -1564,7 +1514,7 @@ export function ThreadDetailPromptArea({ isFollowUpSubmitting, isUnarchiveCurrentThreadPending, isQueueMutationPending, - inlineEditor, + queuedMessageEditor, activeGoalCard, activePromptModeCard, isTodoExpanded, diff --git a/apps/cli/src/__tests__/command-output/settings.test.ts b/apps/cli/src/__tests__/command-output/settings.test.ts index 552620a51c..51c322bf56 100644 --- a/apps/cli/src/__tests__/command-output/settings.test.ts +++ b/apps/cli/src/__tests__/command-output/settings.test.ts @@ -88,26 +88,6 @@ describe("bb settings commands", () => { }); }); - it("enables message editing while preserving other experiment flags", async () => { - const put = vi.fn(async ({ json }) => json); - stubServerApi({ - "v1.system.config.$get": vi.fn(async () => ({ - generalSettings: defaultAppSettings, - experiments: defaultExperiments, - })), - "v1.settings.experiments.$put": put, - }); - - await runCommand( - ["settings", "experiment", "editMessages", "true"], - register, - ); - - expect(put).toHaveBeenCalledWith({ - json: { ...defaultExperiments, editMessages: true }, - }); - }); - it("enables new onboarding before replaying the setup guide", async () => { const updateExperiments = vi.fn(async ({ json }) => json); const updateGeneralSettings = vi.fn(async ({ json }) => json); diff --git a/apps/host-daemon/src/command-dispatch.test.ts b/apps/host-daemon/src/command-dispatch.test.ts index 4cd0281fb9..446320a49d 100644 --- a/apps/host-daemon/src/command-dispatch.test.ts +++ b/apps/host-daemon/src/command-dispatch.test.ts @@ -962,7 +962,6 @@ describe("dispatchCommand", () => { projectId: "proj_1", providerId: "codex", leaseId: "lease-1", - operationId: "edit-op-1", sourceProviderThreadId: "provider-source-1", retainThroughProviderCheckpoint: "turn-before-edit", options: { @@ -1013,7 +1012,7 @@ describe("dispatchCommand", () => { ).resolves.toEqual({ providerThreadId: "provider-thread-rewind-1" }); expect(runtime.prepareThreadRewind).toHaveBeenCalledWith( expect.objectContaining({ - operationId: "edit-op-1", + leaseId: "lease-1", sourceProviderThreadId: "provider-source-1", retainThroughProviderCheckpoint: "turn-before-edit", threadId: "thread-1", @@ -1021,7 +1020,7 @@ describe("dispatchCommand", () => { ); await expect( dispatchCommand( - { ...command, operationId: "edit-op-old-codex" }, + { ...command, leaseId: "lease-old-codex" }, { dataDir: "/tmp/bb-data", eventSink: { @@ -1050,7 +1049,6 @@ describe("dispatchCommand", () => { environmentId: "env-1", threadId: "thread-1", leaseId: "lease-1", - operationId: "edit-op-1", }, { dataDir: "/tmp/bb-data", @@ -1068,8 +1066,6 @@ describe("dispatchCommand", () => { ).resolves.toEqual({}); expect(runtime.discardThreadRewind).toHaveBeenCalledWith({ leaseId: "lease-1", - operationId: "edit-op-1", - threadId: "thread-1", }); }); diff --git a/apps/host-daemon/src/command-handlers/thread.ts b/apps/host-daemon/src/command-handlers/thread.ts index 0f80d595f3..9dbb174e48 100644 --- a/apps/host-daemon/src/command-handlers/thread.ts +++ b/apps/host-daemon/src/command-handlers/thread.ts @@ -272,7 +272,6 @@ export async function prepareThreadRewind( environmentId: command.environmentId, threadId: command.threadId, leaseId: command.leaseId, - operationId: command.operationId, projectId: command.projectId, providerId: command.providerId, sourceProviderThreadId: command.sourceProviderThreadId, @@ -293,11 +292,7 @@ export async function discardThreadRewind( if (!entry) { return {}; } - await entry.runtime.discardThreadRewind({ - leaseId: command.leaseId, - operationId: command.operationId, - threadId: command.threadId, - }); + await entry.runtime.discardThreadRewind({ leaseId: command.leaseId }); return {}; } diff --git a/apps/host-daemon/test/command/dispatch-helpers.ts b/apps/host-daemon/test/command/dispatch-helpers.ts index 72ad0fc9b9..fdb2c93d5c 100644 --- a/apps/host-daemon/test/command/dispatch-helpers.ts +++ b/apps/host-daemon/test/command/dispatch-helpers.ts @@ -351,7 +351,7 @@ export function createFakeRuntime() { }, async prepareThreadRewind(args) { return { - providerThreadId: `provider-rewind-${args.threadId}-${args.operationId}`, + providerThreadId: `provider-rewind-${args.threadId}-${args.leaseId}`, }; }, async discardThreadRewind() {}, diff --git a/apps/server/src/services/threads/thread-edit-message.ts b/apps/server/src/services/threads/thread-edit-message.ts index ff1e314443..c797c6e5e8 100644 --- a/apps/server/src/services/threads/thread-edit-message.ts +++ b/apps/server/src/services/threads/thread-edit-message.ts @@ -107,7 +107,6 @@ function findCommittedOperation( } const EDIT_MESSAGE_PROVIDER_IDS = new Set(["claude-code", "codex", "pi"]); -const EDITABLE_TURN_CANDIDATE_PAGE_SIZE = 25; function getTurnCompletion( db: DbQueryConnection, @@ -294,48 +293,37 @@ function resolveEditableTurn( conflict("The thread has no editable user message"); } - let beforeSequence: number | null = null; - while (true) { - const requestRows = db - .select({ - data: events.data, - sequence: events.sequence, - threadId: events.threadId, - type: events.type, - }) - .from(events) - .where( - and( - eq(events.threadId, thread.id), - eq(events.type, "client/turn/requested"), - sql`json_extract(${events.data}, '$.initiator') = 'user'`, - sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, - sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, - beforeSequence === null - ? undefined - : lt(events.sequence, beforeSequence), - ), - ) - .orderBy(desc(events.sequence)) - .limit(EDITABLE_TURN_CANDIDATE_PAGE_SIZE) - .all(); - for (const requestRow of requestRows) { - try { - return resolveEditableTurnCandidate(db, thread, requestRow); - } catch (error) { - if ( - !(error instanceof ApiError) || - error.status !== 409 || - error.body.code !== "invalid_request" - ) { - throw error; - } + const requestRows = db + .select({ + data: events.data, + sequence: events.sequence, + threadId: events.threadId, + type: events.type, + }) + .from(events) + .where( + and( + eq(events.threadId, thread.id), + eq(events.type, "client/turn/requested"), + sql`json_extract(${events.data}, '$.initiator') = 'user'`, + sql`json_extract(${events.data}, '$.senderThreadId') IS NULL`, + sql`json_extract(${events.data}, '$.target.kind') IN ('new-turn', 'thread-start')`, + ), + ) + .orderBy(desc(events.sequence)) + .all(); + for (const requestRow of requestRows) { + try { + return resolveEditableTurnCandidate(db, thread, requestRow); + } catch (error) { + if ( + !(error instanceof ApiError) || + error.status !== 409 || + error.body.code !== "invalid_request" + ) { + throw error; } } - if (requestRows.length < EDITABLE_TURN_CANDIDATE_PAGE_SIZE) { - break; - } - beforeSequence = requestRows.at(-1)?.sequence ?? null; } conflict("The thread has no editable user message"); } @@ -343,7 +331,6 @@ function resolveEditableTurn( function rewindPrepareCommandFromStart( start: Extract<HostDaemonCommand, { type: "thread.start" }>, args: { - operationId: string; leaseId: string; retainThroughProviderCheckpoint: string; sourceProviderThreadId: string; @@ -443,7 +430,6 @@ export async function editThreadMessage( await runLiveHostCommand(deps, { command: rewindPrepareCommandFromStart(startCommand, { leaseId: rewindLeaseId, - operationId: args.payload.operationId, retainThroughProviderCheckpoint: target.precedingProviderCheckpoint, sourceProviderThreadId: target.sourceProviderThreadId, }), @@ -465,7 +451,6 @@ export async function editThreadMessage( environmentId: readyEnvironment.id, threadId: args.thread.id, leaseId: rewindLeaseId, - operationId: args.payload.operationId, }, hostId: readyEnvironment.hostId, timeoutMs: LIVE_DAEMON_COMMAND_TIMEOUT_MS, diff --git a/apps/server/test/threads/thread-edit-message.test.ts b/apps/server/test/threads/thread-edit-message.test.ts index 8a2a7b5c0e..a5b7ef117b 100644 --- a/apps/server/test/threads/thread-edit-message.test.ts +++ b/apps/server/test/threads/thread-edit-message.test.ts @@ -528,7 +528,10 @@ describe("editThreadMessage", () => { (queued) => queued.command.type === "thread.rewind.discard", ); expect(discard.command).toMatchObject({ - operationId: payload.operationId, + leaseId: + rewind.command.type === "thread.rewind.prepare" + ? rewind.command.leaseId + : undefined, threadId: thread.id, }); await reportQueuedCommandSuccess(harness, discard, {}); @@ -735,24 +738,21 @@ describe("editThreadMessage", () => { }); }); - it("finds an eligible message beyond one bounded candidate page", async () => { + it("resolves the latest edit past ineligible candidates", async () => { await withTestHarness(async (harness) => { const { environment, thread } = seedEditableThread(harness); - for (let index = 0; index < 26; index += 1) { - const requestSequence = 12 + index * 5; - seedCompletedTurn(harness, { - inputGroups: [ - [{ type: "text", text: `Grouped ${index}a`, mentions: [] }], - [{ type: "text", text: `Grouped ${index}b`, mentions: [] }], - ], - providerCheckpointId: `checkpoint-grouped-${index}`, - providerThreadId: "provider-original", - requestSequence, - text: `Grouped request ${index}`, - threadId: thread.id, - turnId: `turn-grouped-${index}`, - }); - } + seedCompletedTurn(harness, { + inputGroups: [ + [{ type: "text", text: "Grouped a", mentions: [] }], + [{ type: "text", text: "Grouped b", mentions: [] }], + ], + providerCheckpointId: "checkpoint-grouped", + providerThreadId: "provider-original", + requestSequence: 12, + text: "Grouped request", + threadId: thread.id, + turnId: "turn-grouped", + }); const editPromise = editThreadMessage(harness.deps, { environment, @@ -768,8 +768,8 @@ describe("editThreadMessage", () => { harness, (queued) => queued.command.type === "thread.rewind.prepare", ); - // Resolving past 26 ineligible grouped candidates lands on sequence 7, - // whose preceding root turn is turn-first. + // Resolving skips the ineligible grouped candidate and lands on + // sequence 7, whose preceding root turn is turn-first. expect(rewind.command).toMatchObject({ retainThroughProviderCheckpoint: "turn-first", }); diff --git a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts index 3c5d4ec476..b9351530c2 100644 --- a/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts +++ b/packages/agent-runtime/src/pi/bridge/__tests__/bridge.test.ts @@ -841,17 +841,6 @@ describe("pi bridge", () => { await bridge.flushWork(); await bridge.flushWork(); - expect(bridge.messages).toContainEqual( - expect.objectContaining({ - method: "sdk/message", - params: expect.objectContaining({ - message: expect.objectContaining({ - providerCheckpointId: "pi-entry-checkpoint", - type: "agent_end", - }), - }), - }), - ); expect(bridge.messages).toContainEqual( expect.objectContaining({ method: "error", diff --git a/packages/agent-runtime/src/runtime-thread-rewind.test.ts b/packages/agent-runtime/src/runtime-thread-rewind.test.ts index c9c5bbd9a2..161b43d6fc 100644 --- a/packages/agent-runtime/src/runtime-thread-rewind.test.ts +++ b/packages/agent-runtime/src/runtime-thread-rewind.test.ts @@ -20,7 +20,7 @@ afterEach(() => { }); describe("prepareThreadRewind", () => { - it("deduplicates concurrent operation retries and suppresses staging events", async () => { + it("stages one independently discardable fork per lease and suppresses staging events", async () => { const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); temporaryDirectories.push(workspacePath); const commands: AdapterCommand[] = []; @@ -42,7 +42,6 @@ describe("prepareThreadRewind", () => { environmentId: "env-1", threadId: "thread-1", leaseId: "lease-1", - operationId: "edit-op-1", projectId: "project-1", providerId: "codex", sourceProviderThreadId: "provider-source-1", @@ -52,56 +51,47 @@ describe("prepareThreadRewind", () => { }; try { - const results = await Promise.all([ - runtime.prepareThreadRewind(request), - runtime.prepareThreadRewind({ ...request, leaseId: "lease-2" }), - ]); + const first = await runtime.prepareThreadRewind(request); + // A replay of the same lease returns the staged fork without forking + // again; a different lease stages its own independent fork. + const replay = await runtime.prepareThreadRewind(request); + expect(replay).toEqual(first); + await runtime.prepareThreadRewind({ ...request, leaseId: "lease-2" }); - expect(results[0]).toEqual(results[1]); - expect( - commands.filter((command) => command.type === "thread/fork"), - ).toEqual([ + const forkCommands = commands.filter( + (command) => command.type === "thread/fork", + ); + expect(forkCommands).toEqual([ expect.objectContaining({ sourceProviderCheckpointId: "turn-before-edit", sourceProviderThreadId: "provider-source-1", + threadId: "thread-1:rewind:lease-1", + }), + expect.objectContaining({ + sourceProviderCheckpointId: "turn-before-edit", + sourceProviderThreadId: "provider-source-1", + threadId: "thread-1:rewind:lease-2", }), ]); - const stagingThreadId = commands.find( - (command) => command.type === "thread/fork", - )?.threadId; - expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); expect(events).toEqual([]); - expect(runtime.hasThread(stagingThreadId!)).toBe(true); - await expect( - runtime.prepareThreadRewind({ - ...request, - leaseId: "lease-3", - retainThroughProviderCheckpoint: "different-turn", - }), - ).rejects.toThrow("reused with different input"); - await runtime.discardThreadRewind({ - leaseId: "lease-1", - operationId: "edit-op-1", - threadId: "thread-1", - }); - expect( - commands.filter((command) => command.type === "thread/discard"), - ).toEqual([]); - expect(runtime.hasThread(stagingThreadId!)).toBe(true); - await runtime.discardThreadRewind({ - leaseId: "lease-2", - operationId: "edit-op-1", - threadId: "thread-1", - }); + expect(runtime.hasThread("thread-1:rewind:lease-1")).toBe(true); + expect(runtime.hasThread("thread-1:rewind:lease-2")).toBe(true); + + // Discarding one lease leaves the other attempt's fork untouched. + await runtime.discardThreadRewind({ leaseId: "lease-1" }); expect( commands.filter((command) => command.type === "thread/discard"), ).toEqual([ expect.objectContaining({ - providerThreadId: results[0]?.providerThreadId, - threadId: stagingThreadId, + providerThreadId: first.providerThreadId, + threadId: "thread-1:rewind:lease-1", }), ]); - expect(runtime.hasThread(stagingThreadId!)).toBe(false); + expect(runtime.hasThread("thread-1:rewind:lease-1")).toBe(false); + expect(runtime.hasThread("thread-1:rewind:lease-2")).toBe(true); + + await runtime.discardThreadRewind({ leaseId: "lease-2" }); + expect(runtime.hasThread("thread-1:rewind:lease-2")).toBe(false); } finally { await runtime.shutdown(); } @@ -137,8 +127,7 @@ describe("prepareThreadRewind", () => { const request = { environmentId: "env-1", threadId: "thread-1", - leaseId: "lease-1", - operationId: "edit-op-retry-cleanup", + leaseId: "lease-retry-cleanup", projectId: "project-1", providerId: "codex", sourceProviderThreadId: "provider-source-1", @@ -149,26 +138,15 @@ describe("prepareThreadRewind", () => { try { await runtime.prepareThreadRewind(request); - const stagingThreadId = commands.find( - (command) => command.type === "thread/fork", - )?.threadId; - expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); - await runtime.discardThreadRewind({ - leaseId: request.leaseId, - operationId: request.operationId, - threadId: request.threadId, - }); - expect(runtime.hasThread(stagingThreadId!)).toBe(true); + const stagingThreadId = "thread-1:rewind:lease-retry-cleanup"; + await runtime.discardThreadRewind({ leaseId: request.leaseId }); + expect(runtime.hasThread(stagingThreadId)).toBe(true); expect(stderr).toEqual([ expect.stringContaining("discard is temporarily unavailable"), ]); - await runtime.discardThreadRewind({ - leaseId: request.leaseId, - operationId: request.operationId, - threadId: request.threadId, - }); - expect(runtime.hasThread(stagingThreadId!)).toBe(false); + await runtime.discardThreadRewind({ leaseId: request.leaseId }); + expect(runtime.hasThread(stagingThreadId)).toBe(false); } finally { await runtime.shutdown(); } @@ -202,8 +180,7 @@ describe("prepareThreadRewind", () => { const request = { environmentId: "env-1", threadId: "thread-1", - leaseId: "lease-1", - operationId: "edit-op-ambiguous-identity", + leaseId: "lease-ambiguous-identity", projectId: "project-1", providerId: "pi", sourceProviderThreadId: "provider-source-1", @@ -213,12 +190,15 @@ describe("prepareThreadRewind", () => { }; try { await expect(runtime.prepareThreadRewind(request)).rejects.toThrow( - "pi did not return a provider thread for rewind operation edit-op-ambiguous-identity", + "pi did not return a provider thread for rewind lease lease-ambiguous-identity", + ); + const stagingThreadId = "thread-1:rewind:lease-ambiguous-identity"; + expect(commands).toContainEqual( + expect.objectContaining({ + type: "thread/fork", + threadId: stagingThreadId, + }), ); - const stagingThreadId = commands.find( - (command) => command.type === "thread/fork", - )?.threadId; - expect(stagingThreadId).toMatch(/^thread-1:rewind:[a-f0-9]{64}$/); expect(commands).toContainEqual( expect.objectContaining({ type: "thread/discard", @@ -226,76 +206,7 @@ describe("prepareThreadRewind", () => { threadId: stagingThreadId, }), ); - expect(runtime.hasThread(stagingThreadId!)).toBe(false); - } finally { - await runtime.shutdown(); - } - }); - - it("keeps Pi staging sessions distinct when external operation ids sanitize alike", async () => { - const workspacePath = mkdtempSync(join(tmpdir(), "bb-runtime-rewind-")); - temporaryDirectories.push(workspacePath); - const commands: AdapterCommand[] = []; - const runtime = createAgentRuntimeWithAdapters({ - workspacePath, - onEvent: () => undefined, - onToolCall: async () => ({ - contentItems: [{ type: "inputText", text: "ok" }], - success: true, - }), - adapterFactory: () => - createRecordingAdapter({ - recordedCommands: commands, - scriptPath: fakeProviderScriptPath, - }), - }); - const baseRequest = { - environmentId: "env-1", - threadId: "thread-1", - projectId: "project-1", - providerId: "pi", - sourceProviderThreadId: "provider-source-1", - options: fullRuntimeOptions, - instructionMode: "append" as const, - }; - - try { - await runtime.prepareThreadRewind({ - ...baseRequest, - leaseId: "lease-slash", - operationId: "a/b", - retainThroughProviderCheckpoint: "checkpoint-slash", - }); - await runtime.prepareThreadRewind({ - ...baseRequest, - leaseId: "lease-question", - operationId: "a?b", - retainThroughProviderCheckpoint: "checkpoint-question", - }); - - const stagingThreadIds = commands - .filter((command) => command.type === "thread/fork") - .map((command) => command.threadId); - expect(stagingThreadIds).toHaveLength(2); - expect(new Set(stagingThreadIds).size).toBe(2); - expect( - new Set( - stagingThreadIds.map((threadId) => - threadId.replace(/[^A-Za-z0-9._-]/g, "_"), - ), - ).size, - ).toBe(2); - - await runtime.discardThreadRewind({ - leaseId: "lease-slash", - operationId: "a/b", - threadId: "thread-1", - }); - await runtime.discardThreadRewind({ - leaseId: "lease-question", - operationId: "a?b", - threadId: "thread-1", - }); + expect(runtime.hasThread(stagingThreadId)).toBe(false); } finally { await runtime.shutdown(); } diff --git a/packages/agent-runtime/src/runtime.ts b/packages/agent-runtime/src/runtime.ts index 379302a230..7a54454b98 100644 --- a/packages/agent-runtime/src/runtime.ts +++ b/packages/agent-runtime/src/runtime.ts @@ -1,4 +1,3 @@ -import { createHash } from "node:crypto"; import path from "node:path"; import { z } from "zod"; import { @@ -92,27 +91,29 @@ function normalizeExecutionOptions(args: { } interface PreparedThreadRewind { + state: "prepared"; cleanupPromise: Promise<void> | null; cleanupTimer: ReturnType<typeof setTimeout> | null; - leaseIds: Set<string>; - operationId: string; processKey: string; providerId: string; providerState: RuntimeProviderProcess["identity"]; - sourceProviderCheckpointId: string; providerThreadId: string; - sourceProviderThreadId: string; stagingThreadId: string; threadId: string; } interface PreparingThreadRewind { - leaseIds: Set<string>; - sourceProviderCheckpointId: string; + state: "preparing"; promise: Promise<{ providerThreadId: string }>; - sourceProviderThreadId: string; } +/** + * A staged rewind fork, keyed by the server-minted per-attempt lease id. + * Each attempt owns exactly one staged fork; there is no cross-attempt + * sharing, so discarding a lease can never affect another attempt. + */ +type StagedThreadRewind = PreparingThreadRewind | PreparedThreadRewind; + interface ReapIdleProviderSessionCandidate { idleSinceMs: number; providerThreadId: string; @@ -181,16 +182,6 @@ const THREAD_GOAL_CLEAR_EVENT_TIMEOUT_MS = 5_000; const PREPARED_THREAD_REWIND_TTL_MS = 5 * 60_000; const PREPARED_THREAD_REWIND_RETRY_MS = 30_000; -function preparedThreadRewindStagingThreadId( - threadId: string, - operationId: string, -): string { - const operationDigest = createHash("sha256") - .update(operationId) - .digest("hex"); - return `${threadId}:rewind:${operationDigest}`; -} - interface ThreadRuntimeConfig { dynamicTools?: DynamicTool[]; disallowedTools?: readonly string[]; @@ -287,8 +278,7 @@ function createAgentRuntimeInternal( const idleProviderSessionSinceMsByThreadId = new Map<string, number>(); const pendingTurnStartThreadIds = new Set<string>(); const threadOperationCounts = new Map<string, number>(); - const preparedThreadRewinds = new Map<string, PreparedThreadRewind>(); - const preparingThreadRewinds = new Map<string, PreparingThreadRewind>(); + const stagedThreadRewinds = new Map<string, StagedThreadRewind>(); const suppressedThreadEventIds = new Set<string>(); const threadGoalState = new RuntimeThreadGoalState(); const turnState = new RuntimeTurnState(); @@ -1126,6 +1116,7 @@ function createAgentRuntimeInternal( // ------------------------------------------------------------------------- function schedulePreparedThreadRewindCleanup( + leaseId: string, prepared: PreparedThreadRewind, delayMs: number, ): void { @@ -1133,65 +1124,57 @@ function createAgentRuntimeInternal( clearTimeout(prepared.cleanupTimer); } prepared.cleanupTimer = setTimeout(() => { - void discardPreparedThreadRewind({ - force: true, - operationId: prepared.operationId, - threadId: prepared.threadId, - }); + void discardStagedThreadRewind(leaseId); }, delayMs); prepared.cleanupTimer.unref?.(); } function finishPreparedThreadRewindCleanup( - rewindKey: string, + leaseId: string, prepared: PreparedThreadRewind, ): void { if (prepared.cleanupTimer !== null) { clearTimeout(prepared.cleanupTimer); prepared.cleanupTimer = null; } - if (preparedThreadRewinds.get(rewindKey) === prepared) { - preparedThreadRewinds.delete(rewindKey); + if (stagedThreadRewinds.get(leaseId) === prepared) { + stagedThreadRewinds.delete(leaseId); } suppressedThreadEventIds.delete(prepared.stagingThreadId); } - async function discardPreparedThreadRewind( - args: - | { - force: true; - operationId: string; - threadId: string; - } - | { - force?: false; - leaseId: string; - operationId: string; - threadId: string; - }, + async function sendStagedThreadDiscard( + proc: ProviderProcess, + stagingThreadId: string, + providerThreadId: string, ): Promise<void> { - const rewindKey = `${args.threadId}\0${args.operationId}`; - const pending = preparingThreadRewinds.get(rewindKey); - if (pending !== undefined) { - if (!args.force) { - pending.leaseIds.delete(args.leaseId); - } + const command = proc.adapter.buildCommandPlan({ + type: "thread/discard", + threadId: stagingThreadId, + providerThreadId, + }); + if (command.kind === "request") { + await sendCommand({ + proc, + message: command, + resultSchema: ignoredJsonRpcResultSchema, + }); + } + } + + async function discardStagedThreadRewind(leaseId: string): Promise<void> { + const staged = stagedThreadRewinds.get(leaseId); + if (staged?.state === "preparing") { try { - await pending.promise; + await staged.promise; } catch { return; } } - const prepared = preparedThreadRewinds.get(rewindKey); - if (prepared === undefined) { + const prepared = stagedThreadRewinds.get(leaseId); + if (prepared === undefined || prepared.state !== "prepared") { return; } - if (!args.force) { - prepared.leaseIds.delete(args.leaseId); - if (prepared.leaseIds.size > 0) { - return; - } - } if (prepared.cleanupPromise !== null) { await prepared.cleanupPromise; return; @@ -1209,42 +1192,35 @@ function createAgentRuntimeInternal( prepared.providerState, prepared.stagingThreadId, ); - finishPreparedThreadRewindCleanup(rewindKey, prepared); + finishPreparedThreadRewindCleanup(leaseId, prepared); return; } try { - const adapterCommand: AdapterCommand = { - type: "thread/discard", - threadId: prepared.stagingThreadId, - providerThreadId: prepared.providerThreadId, - }; - const command = proc.adapter.buildCommandPlan(adapterCommand); - if (command.kind === "request") { - await sendCommand({ - proc, - message: command, - resultSchema: ignoredJsonRpcResultSchema, - }); - } + await sendStagedThreadDiscard( + proc, + prepared.stagingThreadId, + prepared.providerThreadId, + ); } catch (error) { schedulePreparedThreadRewindCleanup( + leaseId, prepared, PREPARED_THREAD_REWIND_RETRY_MS, ); options.onStderr?.( - `Failed to discard staged rewind ${args.operationId}; retrying: ${error instanceof Error ? error.message : String(error)}`, + `Failed to discard staged rewind ${leaseId}; retrying: ${error instanceof Error ? error.message : String(error)}`, ); return; } forgetThreadRuntimeState(proc, prepared.stagingThreadId); - finishPreparedThreadRewindCleanup(rewindKey, prepared); + finishPreparedThreadRewindCleanup(leaseId, prepared); try { await shutdownThreadScopedCodexProcessIfIdle(proc); } catch (error) { options.onStderr?.( - `Failed to stop the idle provider after discarding staged rewind ${args.operationId}: ${error instanceof Error ? error.message : String(error)}`, + `Failed to stop the idle provider after discarding staged rewind ${leaseId}: ${error instanceof Error ? error.message : String(error)}`, ); } })(); @@ -1253,7 +1229,7 @@ function createAgentRuntimeInternal( await cleanup; } finally { if ( - preparedThreadRewinds.get(rewindKey) === prepared && + stagedThreadRewinds.get(leaseId) === prepared && prepared.cleanupPromise === cleanup ) { prepared.cleanupPromise = null; @@ -1448,7 +1424,6 @@ function createAgentRuntimeInternal( environmentId, threadId, leaseId, - operationId, projectId, providerId, sourceProviderThreadId, @@ -1460,54 +1435,15 @@ function createAgentRuntimeInternal( disallowedTools, instructionMode = "append", }) { - if ( - providerId !== CODEX_PROVIDER_ID && - providerId !== "claude-code" && - providerId !== "pi" - ) { - throw new Error( - `Preparing a thread rewind is not supported by ${providerId}`, - ); - } - const rewindKey = `${threadId}\0${operationId}`; - let existing = preparedThreadRewinds.get(rewindKey); - while (existing?.cleanupPromise) { - await existing.cleanupPromise; - existing = preparedThreadRewinds.get(rewindKey); - } + const existing = stagedThreadRewinds.get(leaseId); if (existing !== undefined) { - if ( - existing.sourceProviderThreadId !== sourceProviderThreadId || - existing.sourceProviderCheckpointId !== - retainThroughProviderCheckpoint - ) { - throw new Error( - `Prepared rewind operation ${operationId} was reused with different input`, - ); - } - existing.leaseIds.add(leaseId); - schedulePreparedThreadRewindCleanup( - existing, - PREPARED_THREAD_REWIND_TTL_MS, - ); - return { providerThreadId: existing.providerThreadId }; - } - - const pending = preparingThreadRewinds.get(rewindKey); - if (pending !== undefined) { - if ( - pending.sourceProviderThreadId !== sourceProviderThreadId || - pending.sourceProviderCheckpointId !== retainThroughProviderCheckpoint - ) { - throw new Error( - `Prepared rewind operation ${operationId} was reused with different input`, - ); - } - pending.leaseIds.add(leaseId); - return pending.promise; + // The server mints a fresh lease per attempt, so a duplicate can only + // be a replay of this exact request; return the same staged fork. + return existing.state === "preparing" + ? existing.promise + : { providerThreadId: existing.providerThreadId }; } - const leaseIds = new Set([leaseId]); const preparation = runThreadOperation({ threadId, work: async () => { @@ -1522,6 +1458,11 @@ function createAgentRuntimeInternal( ...(acpLaunchSpec !== undefined ? { acpLaunchSpec } : {}), }); const proc = requireProviderProcess({ processKey, providerId }); + if (!proc.adapter.capabilities.supportsFork) { + throw new Error( + `Preparing a thread rewind is not supported by ${providerId}`, + ); + } const providerSkillRoots = skillRootsForProvider(providerId); assertProviderSupportsExecutionOptions({ adapter: proc.adapter, @@ -1529,14 +1470,9 @@ function createAgentRuntimeInternal( providerId, }); - // Provider adapters may turn this identity into a filesystem key. - // Hash the external idempotency key so distinct unsafe characters - // cannot collapse onto the same provider session path (Pi replaces - // each unsafe character with an underscore). - const stagingThreadId = preparedThreadRewindStagingThreadId( - threadId, - operationId, - ); + // The lease id is a server-minted UUID, so it is safe inside + // identities that provider adapters may turn into filesystem keys. + const stagingThreadId = `${threadId}:rewind:${leaseId}`; suppressedThreadEventIds.add(stagingThreadId); threadIdentityRegistry.registerThreadProvider({ providerId, @@ -1598,7 +1534,7 @@ function createAgentRuntimeInternal( }); if (!providerThreadId) { throw new Error( - `${providerId} did not return a provider thread for rewind operation ${operationId}`, + `${providerId} did not return a provider thread for rewind lease ${leaseId}`, ); } recordProviderThreadIdentity( @@ -1607,21 +1543,19 @@ function createAgentRuntimeInternal( providerThreadId, ); const prepared: PreparedThreadRewind = { + state: "prepared", cleanupPromise: null, cleanupTimer: null, - leaseIds, - operationId, processKey, providerId, providerState: proc.identity, - sourceProviderCheckpointId: retainThroughProviderCheckpoint, providerThreadId, - sourceProviderThreadId, stagingThreadId, threadId, }; - preparedThreadRewinds.set(rewindKey, prepared); + stagedThreadRewinds.set(leaseId, prepared); schedulePreparedThreadRewindCleanup( + leaseId, prepared, PREPARED_THREAD_REWIND_TTL_MS, ); @@ -1631,21 +1565,14 @@ function createAgentRuntimeInternal( if (!retainedForDiscard) { if (providerThreadIdForCleanup !== undefined) { try { - const cleanupCommand = proc.adapter.buildCommandPlan({ - type: "thread/discard", - threadId: stagingThreadId, - providerThreadId: providerThreadIdForCleanup, - }); - if (cleanupCommand.kind === "request") { - await sendCommand({ - proc, - message: cleanupCommand, - resultSchema: ignoredJsonRpcResultSchema, - }); - } + await sendStagedThreadDiscard( + proc, + stagingThreadId, + providerThreadIdForCleanup, + ); } catch (error) { options.onStderr?.( - `Failed to discard unretained staged rewind ${operationId}: ${error instanceof Error ? error.message : String(error)}`, + `Failed to discard unretained staged rewind ${leaseId}: ${error instanceof Error ? error.message : String(error)}`, ); } } @@ -1658,24 +1585,23 @@ function createAgentRuntimeInternal( } }, }); - preparingThreadRewinds.set(rewindKey, { - leaseIds, - sourceProviderCheckpointId: retainThroughProviderCheckpoint, + stagedThreadRewinds.set(leaseId, { + state: "preparing", promise: preparation, - sourceProviderThreadId, }); try { return await preparation; - } finally { - const current = preparingThreadRewinds.get(rewindKey); - if (current?.promise === preparation) { - preparingThreadRewinds.delete(rewindKey); + } catch (error) { + const current = stagedThreadRewinds.get(leaseId); + if (current?.state === "preparing" && current.promise === preparation) { + stagedThreadRewinds.delete(leaseId); } + throw error; } }, - async discardThreadRewind({ threadId, leaseId, operationId }) { - await discardPreparedThreadRewind({ threadId, leaseId, operationId }); + async discardThreadRewind({ leaseId }) { + await discardStagedThreadRewind(leaseId); }, async resumeThread({ @@ -2234,14 +2160,9 @@ function createAgentRuntimeInternal( async shutdown() { await Promise.all( - [...preparedThreadRewinds.keys()].map((rewindKey) => { - const separatorIndex = rewindKey.indexOf("\0"); - return discardPreparedThreadRewind({ - force: true, - threadId: rewindKey.slice(0, separatorIndex), - operationId: rewindKey.slice(separatorIndex + 1), - }); - }), + [...stagedThreadRewinds.keys()].map((leaseId) => + discardStagedThreadRewind(leaseId), + ), ); idleProviderSessionSinceMsByThreadId.clear(); pendingTurnStartThreadIds.clear(); diff --git a/packages/agent-runtime/src/types.ts b/packages/agent-runtime/src/types.ts index 97c1622288..738a309c47 100644 --- a/packages/agent-runtime/src/types.ts +++ b/packages/agent-runtime/src/types.ts @@ -177,7 +177,6 @@ export interface PrepareThreadRewindArgs { environmentId: string; threadId: string; leaseId: string; - operationId: string; projectId: string; providerId: string; sourceProviderThreadId: string; @@ -195,8 +194,6 @@ export interface PrepareThreadRewindResult { export interface DiscardThreadRewindArgs { leaseId: string; - operationId: string; - threadId: string; } export interface ResumeThreadArgs { diff --git a/packages/host-daemon-contract/src/commands.ts b/packages/host-daemon-contract/src/commands.ts index 815390e75d..b150b3a5c6 100644 --- a/packages/host-daemon-contract/src/commands.ts +++ b/packages/host-daemon-contract/src/commands.ts @@ -329,8 +329,8 @@ export const threadRewindPrepareCommandSchema = hostDaemonThreadTargetSchema .merge(hostDaemonThreadRuntimeContextSchema) .extend({ type: z.literal("thread.rewind.prepare"), + /** Server-minted per-attempt staging id; each lease owns one staged fork. */ leaseId: z.string().min(1), - operationId: z.string().min(1), sourceProviderThreadId: z.string().min(1), retainThroughProviderCheckpoint: z.string().min(1), }) @@ -340,7 +340,6 @@ export const threadRewindDiscardCommandSchema = hostDaemonThreadTargetSchema .extend({ type: z.literal("thread.rewind.discard"), leaseId: z.string().min(1), - operationId: z.string().min(1), }) .strict(); diff --git a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts index 81098434f2..355b1eb822 100644 --- a/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts +++ b/packages/plugin-sdk/bundled-types/bb-plugin-sdk.d.ts @@ -310,8 +310,8 @@ declare const providerPendingInteractionSchema: z$1.ZodObject<{ id: z$1.ZodString; threadId: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; interrupted: "interrupted"; + pending: "pending"; resolving: "resolving"; resolved: "resolved"; }>; @@ -453,8 +453,8 @@ declare const pluginPendingInteractionSchema: z$1.ZodObject<{ id: z$1.ZodString; threadId: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; interrupted: "interrupted"; + pending: "pending"; resolving: "resolving"; resolved: "resolved"; }>; @@ -702,8 +702,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon providerThreadId: z$1.ZodString; objective: z$1.ZodString; status: z$1.ZodEnum<{ - paused: "paused"; active: "active"; + paused: "paused"; budgetLimited: "budgetLimited"; complete: "complete"; }>; @@ -747,10 +747,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon command: z$1.ZodString; cwd: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{ waiting_for_approval: "waiting_for_approval"; @@ -794,10 +794,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon diff: z$1.ZodOptional<z$1.ZodString>; }, z$1.core.$strip>>; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{ waiting_for_approval: "waiting_for_approval"; @@ -834,10 +834,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon completed: z$1.ZodString; }, z$1.core.$strip>>; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; result: z$1.ZodOptional<z$1.ZodUnknown>; error: z$1.ZodOptional<z$1.ZodString>; @@ -884,17 +884,17 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon taskType: z$1.ZodString; description: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; taskStatus: z$1.ZodEnum<{ - pending: "pending"; - running: "running"; - paused: "paused"; completed: "completed"; failed: "failed"; + paused: "paused"; + pending: "pending"; + running: "running"; killed: "killed"; stopped: "stopped"; }>; @@ -910,8 +910,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon index: z$1.ZodNumber; label: z$1.ZodString; state: z$1.ZodEnum<{ - running: "running"; failed: "failed"; + running: "running"; queued: "queued"; done: "done"; skipped: "skipped"; @@ -979,10 +979,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon command: z$1.ZodString; cwd: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{ waiting_for_approval: "waiting_for_approval"; @@ -1026,10 +1026,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon diff: z$1.ZodOptional<z$1.ZodString>; }, z$1.core.$strip>>; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{ waiting_for_approval: "waiting_for_approval"; @@ -1066,10 +1066,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon completed: z$1.ZodString; }, z$1.core.$strip>>; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; result: z$1.ZodOptional<z$1.ZodUnknown>; error: z$1.ZodOptional<z$1.ZodString>; @@ -1116,17 +1116,17 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon taskType: z$1.ZodString; description: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; taskStatus: z$1.ZodEnum<{ - pending: "pending"; - running: "running"; - paused: "paused"; completed: "completed"; failed: "failed"; + paused: "paused"; + pending: "pending"; + running: "running"; killed: "killed"; stopped: "stopped"; }>; @@ -1142,8 +1142,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon index: z$1.ZodNumber; label: z$1.ZodString; state: z$1.ZodEnum<{ - running: "running"; failed: "failed"; + running: "running"; queued: "queued"; done: "done"; skipped: "skipped"; @@ -1245,17 +1245,17 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon taskType: z$1.ZodString; description: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; taskStatus: z$1.ZodEnum<{ - pending: "pending"; - running: "running"; - paused: "paused"; completed: "completed"; failed: "failed"; + paused: "paused"; + pending: "pending"; + running: "running"; killed: "killed"; stopped: "stopped"; }>; @@ -1271,8 +1271,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon index: z$1.ZodNumber; label: z$1.ZodString; state: z$1.ZodEnum<{ - running: "running"; failed: "failed"; + running: "running"; queued: "queued"; done: "done"; skipped: "skipped"; @@ -1317,17 +1317,17 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon taskType: z$1.ZodString; description: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; interrupted: "interrupted"; + pending: "pending"; }>; taskStatus: z$1.ZodEnum<{ - pending: "pending"; - running: "running"; - paused: "paused"; completed: "completed"; failed: "failed"; + paused: "paused"; + pending: "pending"; + running: "running"; killed: "killed"; stopped: "stopped"; }>; @@ -1343,8 +1343,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon index: z$1.ZodNumber; label: z$1.ZodString; state: z$1.ZodEnum<{ - running: "running"; failed: "failed"; + running: "running"; queued: "queued"; done: "done"; skipped: "skipped"; @@ -1416,10 +1416,10 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon plan: z$1.ZodArray<z$1.ZodObject<{ step: z$1.ZodString; status: z$1.ZodOptional<z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; failed: "failed"; active: "active"; + pending: "pending"; }>>; }, z$1.core.$strip>>; explanation: z$1.ZodOptional<z$1.ZodString>; @@ -1861,8 +1861,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon providerId: z$1.ZodString; providerRequestId: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; interrupted: "interrupted"; + pending: "pending"; resolving: "resolving"; resolved: "resolved"; }>; @@ -1913,8 +1913,8 @@ declare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readon providerId: z$1.ZodString; providerRequestId: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; interrupted: "interrupted"; + pending: "pending"; resolving: "resolving"; resolved: "resolved"; }>; @@ -2083,8 +2083,8 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{ id: z$1.ZodString; text: z$1.ZodString; status: z$1.ZodEnum<{ - pending: "pending"; completed: "completed"; + pending: "pending"; in_progress: "in_progress"; }>; }, z$1.core.$strip>>; @@ -2576,8 +2576,8 @@ type SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>; @@ -2598,8 +2598,8 @@ type ProjectResponse = z$1.infer<typeof projectResponseSchema>; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>; @@ -2699,8 +2699,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -2889,8 +2889,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - base64: "base64"; utf8: "utf8"; + base64: "base64"; }>; mimeType: z$1.ZodOptional<z$1.ZodString>; sizeBytes: z$1.ZodNumber; @@ -3119,8 +3119,8 @@ declare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z }>>; }, z$1.core.$strict>; attention: z$1.ZodEnum<{ - none: "none"; blocked: "blocked"; + none: "none"; merged: "merged"; draft: "draft"; closed: "closed"; @@ -3391,7 +3391,6 @@ declare const hostDaemonCommandRegistry: { threadId: z$1.ZodString; type: z$1.ZodLiteral<"thread.rewind.discard">; leaseId: z$1.ZodString; - operationId: z$1.ZodString; }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; "thread.rewind.prepare": HostDaemonCommandDescriptor<"thread.rewind.prepare", z$1.ZodObject<{ environmentId: z$1.ZodString; @@ -3589,7 +3588,6 @@ declare const hostDaemonCommandRegistry: { }>; type: z$1.ZodLiteral<"thread.rewind.prepare">; leaseId: z$1.ZodString; - operationId: z$1.ZodString; sourceProviderThreadId: z$1.ZodString; retainThroughProviderCheckpoint: z$1.ZodString; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -6681,8 +6679,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>>; }, z$1.core.$strip>; @@ -6713,8 +6711,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ available: z$1.ZodBoolean; }, z$1.core.$strip>>; permissionCeiling: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; models: z$1.ZodArray<z$1.ZodObject<{ @@ -8165,10 +8163,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ providerId: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8409,10 +8407,10 @@ declare const forkThreadRequestSchema: z$1.ZodObject<{ }, z$1.core.$strip>>>>; title: z$1.ZodOptional<z$1.ZodString>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault<z$1.ZodEnum<{ visible: "visible"; hidden: "hidden"; @@ -8528,10 +8526,10 @@ declare const sendMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8756,10 +8754,10 @@ declare const editMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -8886,10 +8884,10 @@ declare const createQueuedMessageRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; - }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional<z$1.ZodObject<{ model: z$1.ZodOptional<z$1.ZodEnum<{ explicit: "explicit"; @@ -9111,8 +9109,8 @@ declare const sendQueuedMessageResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9483,9 +9481,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable<z$1.ZodString>; baseBranch: z$1.ZodNullable<z$1.ZodString>; @@ -9513,8 +9511,8 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ connected: "connected"; }>; maxPermissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>; @@ -9789,8 +9787,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject< ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -10158,8 +10156,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; diff --git a/packages/templates/src/generated/plugin-sdk-dts.generated.ts b/packages/templates/src/generated/plugin-sdk-dts.generated.ts index 7b03e8a985..d1198fd876 100644 --- a/packages/templates/src/generated/plugin-sdk-dts.generated.ts +++ b/packages/templates/src/generated/plugin-sdk-dts.generated.ts @@ -2,6 +2,6 @@ // Generated by packages/templates/scripts/generate-templates.mjs from // @bb/plugin-sdk/bundled-types. Do not edit directly. -export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n paused: \"paused\";\n active: \"active\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n running: \"running\";\n paused: \"paused\";\n completed: \"completed\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n standard: \"standard\";\n personal: \"personal\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n standard: \"standard\";\n personal: \"personal\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n none: \"none\";\n blocked: \"blocked\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n operationId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"accept-edits\" | \"auto\" | \"full\", \"accept-edits\" | \"auto\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n personal: \"personal\";\n \"managed-worktree\": \"managed-worktree\";\n unmanaged: \"unmanaged\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n \"accept-edits\": \"accept-edits\";\n auto: \"auto\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n provider: \"provider\";\n refusal: \"refusal\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; +export const PLUGIN_SDK_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport * as z from 'zod';\nimport { z as z$1 } from 'zod';\nimport Database from 'better-sqlite3';\nimport { Context } from 'hono';\n\n/**\n * App-wide server-backed preferences.\n * Client-local settings stay in the frontend localStorage helpers instead.\n */\ndeclare const appSettingsSchema: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype AppSettings = z$1.infer<typeof appSettingsSchema>;\n\ndeclare const appKeybindingOverridesSchema: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n}, z$1.core.$strict>>;\ntype AppKeybindingOverrides = z$1.infer<typeof appKeybindingOverridesSchema>;\n\ndeclare const appThemeSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppTheme = z$1.infer<typeof appThemeSchema>;\n/**\n * The complete appearance selection a client sends when changing the palette\n * and/or favicon tint. The server validates `themeId` (built-in id or an\n * existing custom theme) and resolves the CSS from disk for custom themes.\n * Callers changing only one facet must carry the other facet forward explicitly.\n */\ndeclare const appThemeSelectionSchema: z$1.ZodObject<{\n themeId: z$1.ZodString;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n}, z$1.core.$strip>;\ntype AppThemeSelection = z$1.infer<typeof appThemeSelectionSchema>;\n\ndeclare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"thread\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n metadata: z$1.ZodOptional<z$1.ZodObject<{\n backgroundActivityChanged: z$1.ZodOptional<z$1.ZodBoolean>;\n eventTypes: z$1.ZodOptional<z$1.ZodReadonly<z$1.ZodArray<z$1.ZodString & z$1.ZodType<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string, z$1.core.$ZodTypeInternals<\"thread/started\" | \"thread/identity\" | \"turn/started\" | \"turn/completed\" | \"turn/input/accepted\" | \"thread/name/updated\" | \"thread/compacted\" | \"thread/goal/updated\" | \"thread/goal/cleared\" | \"item/started\" | \"item/completed\" | \"item/agentMessage/delta\" | \"item/commandExecution/outputDelta\" | \"item/fileChange/outputDelta\" | \"item/reasoning/summaryTextDelta\" | \"item/reasoning/textDelta\" | \"item/plan/delta\" | \"item/mcpToolCall/progress\" | \"item/toolCall/progress\" | \"item/backgroundTask/progress\" | \"item/backgroundTask/completed\" | \"thread/tokenUsage/updated\" | \"thread/contextWindowUsage/updated\" | \"turn/plan/updated\" | \"turn/diff/updated\" | \"provider/error\" | \"provider/rateLimits/updated\" | \"provider/warning\" | \"provider/modelFallback\" | \"provider/unhandled\" | \"client/thread/start\" | \"client/turn/requested\" | \"client/turn/start\" | \"system/error\" | \"system/manager/user_message\" | \"system/thread/interrupted\" | \"system/operation\" | \"system/permissionGrant/lifecycle\" | \"system/userQuestion/lifecycle\" | \"system/thread-provisioning\" | \"system/provider-turn-watchdog\", string>>>>>;\n hasPendingInteraction: z$1.ZodOptional<z$1.ZodBoolean>;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"thread-created\": \"thread-created\";\n \"thread-deleted\": \"thread-deleted\";\n \"events-appended\": \"events-appended\";\n \"history-rewritten\": \"history-rewritten\";\n \"interactions-changed\": \"interactions-changed\";\n \"status-changed\": \"status-changed\";\n \"title-changed\": \"title-changed\";\n \"queue-changed\": \"queue-changed\";\n \"archived-changed\": \"archived-changed\";\n \"pin-state-changed\": \"pin-state-changed\";\n \"parent-changed\": \"parent-changed\";\n \"environment-changed\": \"environment-changed\";\n \"read-state-changed\": \"read-state-changed\";\n \"order-changed\": \"order-changed\";\n \"tabs-changed\": \"tabs-changed\";\n \"terminals-changed\": \"terminals-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"project\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"project-created\": \"project-created\";\n \"project-updated\": \"project-updated\";\n \"project-deleted\": \"project-deleted\";\n \"project-sources-changed\": \"project-sources-changed\";\n \"threads-changed\": \"threads-changed\";\n \"project-order-changed\": \"project-order-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"environment\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"status-changed\": \"status-changed\";\n \"environment-created\": \"environment-created\";\n \"environment-deleted\": \"environment-deleted\";\n \"metadata-changed\": \"metadata-changed\";\n \"work-status-changed\": \"work-status-changed\";\n \"git-refs-changed\": \"git-refs-changed\";\n \"thread-storage-changed\": \"thread-storage-changed\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"host\">;\n id: z$1.ZodOptional<z$1.ZodString>;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"host-connected\": \"host-connected\";\n \"host-disconnected\": \"host-disconnected\";\n }>>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"changed\">;\n entity: z$1.ZodLiteral<\"system\">;\n changes: z$1.ZodReadonly<z$1.ZodArray<z$1.ZodEnum<{\n \"config-changed\": \"config-changed\";\n \"plugins-changed\": \"plugins-changed\";\n }>>>;\n}, z$1.core.$strict>], \"entity\">;\ntype ChangedMessage = z$1.infer<typeof changedMessageSchema>;\n\ndeclare const environmentSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Environment = z$1.infer<typeof environmentSchema>;\n\ndeclare const experimentsSchema: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n}>, z$1.ZodBoolean>;\ntype Experiments = z$1.infer<typeof experimentsSchema>;\n\ndeclare const hostSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n disconnected: \"disconnected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype Host = z$1.infer<typeof hostSchema>;\n\ninterface JsonObject {\n [key: string]: JsonValue$1;\n}\ntype JsonValue$1 = string | number | boolean | null | JsonValue$1[] | JsonObject;\n\ndeclare const pendingInteractionResolutionSchema: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n}, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n}, z$1.core.$strip>]>;\ntype PendingInteractionResolution = z$1.infer<typeof pendingInteractionResolutionSchema>;\ndeclare const providerPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n interrupted: \"interrupted\";\n pending: \"pending\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>;\ntype ProviderPendingInteraction = z$1.infer<typeof providerPendingInteractionSchema>;\ndeclare const pluginPendingInteractionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n interrupted: \"interrupted\";\n pending: \"pending\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginPendingInteraction = z$1.infer<typeof pluginPendingInteractionSchema>;\ntype PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction;\n\ndeclare const projectSourceSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ProjectSource = z$1.infer<typeof projectSourceSchema>;\n\ndeclare const reasoningLevelSchema: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z$1.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z$1.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z$1.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">;\ntype PromptInput = z$1.infer<typeof promptInputSchema>;\ndeclare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n}, z$1.core.$strip>;\ntype ResolvedThreadExecutionOptions = z$1.infer<typeof resolvedThreadExecutionOptionsSchema>;\ndeclare const projectExecutionDefaultsSchema: z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n}, z$1.core.$strip>;\ntype ProjectExecutionDefaults = z$1.infer<typeof projectExecutionDefaultsSchema>;\n\n/** All thread events — provider-originated or system-originated. */\ndeclare const threadEventSchema: z$1.ZodPipe<z$1.ZodUnknown, z$1.ZodUnion<readonly [z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/started\">;\n threadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/identity\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n }>;\n error: z$1.ZodOptional<z$1.ZodObject<{\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n providerCheckpointId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/input/accepted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n clientRequestId: z$1.ZodString;\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/name/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n threadName: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/compacted\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/goal/cleared\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/started\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n taskStatus: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n paused: \"paused\";\n pending: \"pending\";\n running: \"running\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n failed: \"failed\";\n running: \"running\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"userMessage\">;\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n clientRequestId: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"agentMessage\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commandExecution\">;\n id: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n aggregatedOutput: z$1.ZodOptional<z$1.ZodString>;\n exitCode: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"fileChange\">;\n id: z$1.ZodString;\n changes: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodEnum<{\n add: \"add\";\n delete: \"delete\";\n update: \"update\";\n }>;\n movePath: z$1.ZodOptional<z$1.ZodString>;\n diff: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webSearch\">;\n id: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"webFetch\">;\n id: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n resultText: z$1.ZodNullable<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"imageView\">;\n id: z$1.ZodString;\n path: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"toolCall\">;\n id: z$1.ZodString;\n server: z$1.ZodOptional<z$1.ZodString>;\n tool: z$1.ZodString;\n arguments: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n result: z$1.ZodOptional<z$1.ZodUnknown>;\n error: z$1.ZodOptional<z$1.ZodString>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n truncation: z$1.ZodOptional<z$1.ZodObject<{\n aggregatedOutput: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n result: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n resultText: z$1.ZodOptional<z$1.ZodObject<{\n originalLength: z$1.ZodNumber;\n retainedHeadLength: z$1.ZodNumber;\n retainedTailLength: z$1.ZodNumber;\n truncatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reasoning\">;\n id: z$1.ZodString;\n summary: z$1.ZodArray<z$1.ZodString>;\n content: z$1.ZodArray<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"plan\">;\n id: z$1.ZodString;\n text: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"contextCompaction\">;\n id: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n taskStatus: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n paused: \"paused\";\n pending: \"pending\";\n running: \"running\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n failed: \"failed\";\n running: \"running\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/agentMessage/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/commandExecution/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n reset: z$1.ZodOptional<z$1.ZodBoolean>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/fileChange/outputDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/summaryTextDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/reasoning/textDelta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/plan/delta\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n delta: z$1.ZodString;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/mcpToolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/toolCall/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n itemId: z$1.ZodString;\n message: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/progress\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n taskStatus: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n paused: \"paused\";\n pending: \"pending\";\n running: \"running\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n failed: \"failed\";\n running: \"running\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"item/backgroundTask/completed\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n item: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"backgroundTask\">;\n id: z$1.ZodString;\n taskType: z$1.ZodString;\n description: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n interrupted: \"interrupted\";\n pending: \"pending\";\n }>;\n taskStatus: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n paused: \"paused\";\n pending: \"pending\";\n running: \"running\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n skipTranscript: z$1.ZodBoolean;\n workflowName: z$1.ZodOptional<z$1.ZodString>;\n workflow: z$1.ZodOptional<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n failed: \"failed\";\n running: \"running\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodOptional<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n outputFile: z$1.ZodOptional<z$1.ZodString>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/tokenUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n tokenUsage: z$1.ZodObject<{\n total: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n last: z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n inputTokens: z$1.ZodNumber;\n cachedInputTokens: z$1.ZodNumber;\n outputTokens: z$1.ZodNumber;\n reasoningOutputTokens: z$1.ZodNumber;\n }, z$1.core.$strip>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"thread/contextWindowUsage/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n contextWindowUsage: z$1.ZodObject<{\n usedTokens: z$1.ZodNullable<z$1.ZodNumber>;\n modelContextWindow: z$1.ZodNullable<z$1.ZodNumber>;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/plan/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n plan: z$1.ZodArray<z$1.ZodObject<{\n step: z$1.ZodString;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n pending: \"pending\";\n }>>;\n }, z$1.core.$strip>>;\n explanation: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"turn/diff/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n diff: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/error\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n willRetry: z$1.ZodOptional<z$1.ZodBoolean>;\n errorInfo: z$1.ZodOptional<z$1.ZodObject<{\n category: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"active-turn-not-steerable\": \"active-turn-not-steerable\";\n \"bad-request\": \"bad-request\";\n \"connection-failed\": \"connection-failed\";\n \"context-window-exceeded\": \"context-window-exceeded\";\n billing: \"billing\";\n \"budget-exceeded\": \"budget-exceeded\";\n internal: \"internal\";\n \"max-output-tokens\": \"max-output-tokens\";\n \"max-turns\": \"max-turns\";\n overloaded: \"overloaded\";\n policy: \"policy\";\n \"rate-limit\": \"rate-limit\";\n sandbox: \"sandbox\";\n \"stream-disconnected\": \"stream-disconnected\";\n \"structured-output-retries\": \"structured-output-retries\";\n \"thread-rollback-failed\": \"thread-rollback-failed\";\n \"too-many-failed-attempts\": \"too-many-failed-attempts\";\n unauthorized: \"unauthorized\";\n }>;\n providerCode: z$1.ZodNullable<z$1.ZodString>;\n httpStatusCode: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/rateLimits/updated\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n allowed: \"allowed\";\n warning: \"warning\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n allowed: \"allowed\";\n warning: \"warning\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/warning\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n category: z$1.ZodEnum<{\n deprecation: \"deprecation\";\n config: \"config\";\n general: \"general\";\n }>;\n summary: z$1.ZodOptional<z$1.ZodString>;\n details: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/modelFallback\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider/unhandled\">;\n threadId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerId: z$1.ZodString;\n rawType: z$1.ZodString;\n rawEvent: z$1.ZodObject<{\n jsonrpc: z$1.ZodLiteral<\"2.0\">;\n id: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodString, z$1.ZodNumber]>>;\n method: z$1.ZodString;\n params: z$1.ZodOptional<z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n }, z$1.core.$strip>;\n parentToolCallId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>, z$1.ZodIntersection<z$1.ZodUnion<readonly [z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/thread/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/requested\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n requestId: z$1.ZodString;\n continuationOfRequestId: z$1.ZodOptional<z$1.ZodString>;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodOptional<z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>>;\n systemMessageSubject: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new-turn\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n execution: z$1.ZodObject<{\n seq: z$1.ZodOptional<z$1.ZodNumber>;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n source: z$1.ZodEnum<{\n \"client/thread/start\": \"client/thread/start\";\n \"client/turn/requested\": \"client/turn/requested\";\n \"client/turn/start\": \"client/turn/start\";\n }>;\n permissionMode: z$1.ZodEnum<{\n readonly: \"readonly\";\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n \"workspace-write\": \"workspace-write\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"client/turn/start\">;\n threadId: z$1.ZodString;\n direction: z$1.ZodLiteral<\"outbound\">;\n source: z$1.ZodEnum<{\n spawn: \"spawn\";\n tell: \"tell\";\n }>;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n system: \"system\";\n agent: \"agent\";\n }>;\n request: z$1.ZodObject<{\n method: z$1.ZodEnum<{\n \"thread/start\": \"thread/start\";\n \"turn/start\": \"turn/start\";\n }>;\n params: z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/error\">;\n threadId: z$1.ZodString;\n code: z$1.ZodOptional<z$1.ZodString>;\n message: z$1.ZodString;\n detail: z$1.ZodOptional<z$1.ZodString>;\n reconnectAttempt: z$1.ZodOptional<z$1.ZodNumber>;\n reconnectTotal: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/manager/user_message\">;\n threadId: z$1.ZodString;\n text: z$1.ZodString;\n toolCallId: z$1.ZodOptional<z$1.ZodString>;\n turnId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread/interrupted\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodEnum<{\n \"manual-stop\": \"manual-stop\";\n \"host-daemon-restarted\": \"host-daemon-restarted\";\n \"provider-turn-idle\": \"provider-turn-idle\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/operation\">;\n threadId: z$1.ZodString;\n operation: z$1.ZodString;\n status: z$1.ZodString;\n message: z$1.ZodString;\n operationId: z$1.ZodString;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/permissionGrant/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n interrupted: \"interrupted\";\n pending: \"pending\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n subject: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/userQuestion/lifecycle\">;\n threadId: z$1.ZodString;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n status: z$1.ZodEnum<{\n interrupted: \"interrupted\";\n pending: \"pending\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n resolution: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/thread-provisioning\">;\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n active: \"active\";\n cancelled: \"cancelled\";\n }>;\n environmentId: z$1.ZodString;\n entries: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n completed: \"completed\";\n failed: \"failed\";\n started: \"started\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"system/provider-turn-watchdog\">;\n threadId: z$1.ZodString;\n reason: z$1.ZodLiteral<\"provider-turn-idle\">;\n thresholdMs: z$1.ZodNumber;\n elapsedMs: z$1.ZodNumber;\n activeTurnId: z$1.ZodString;\n activeTurnStartedAt: z$1.ZodNumber;\n lastActivityEventSequence: z$1.ZodNumber;\n lastActivityEventType: z$1.ZodString;\n lastActivityEventAt: z$1.ZodNumber;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodNullable<z$1.ZodString>;\n firedAt: z$1.ZodNumber;\n}, z$1.core.$strip>]>, z$1.ZodObject<{\n scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n}, z$1.core.$strip>>]>>;\ntype ThreadEvent = z$1.infer<typeof threadEventSchema>;\ntype ThreadEventType = ThreadEvent[\"type\"];\n\ndeclare const providerInfoSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ProviderInfo = z$1.infer<typeof providerInfoSchema>;\n\ndeclare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"turn\">;\n turnId: z$1.ZodString;\n}, z$1.core.$strip>], \"kind\">;\ntype ThreadEventScope = z$1.infer<typeof threadEventScopeSchema>;\n\ntype ThreadEventByType = {\n [TType in ThreadEventType]: Extract<ThreadEvent, {\n type: TType;\n }>;\n};\ntype ThreadEventForType<TType extends ThreadEventType> = ThreadEventByType[TType];\ntype StoredThreadEventDataFromEvent<TEvent extends ThreadEvent> = Omit<TEvent, \"threadId\" | \"type\" | \"scope\">;\ninterface ThreadEventRowBase {\n id: string;\n scope: ThreadEventScope;\n threadId: string;\n seq: number;\n createdAt: number;\n}\ntype ThreadEventRowFromEvent<TEvent extends ThreadEvent> = ThreadEventRowBase & {\n type: TEvent[\"type\"];\n data: StoredThreadEventDataFromEvent<TEvent>;\n};\ntype ThreadEventRowOfType<TType extends ThreadEventType> = ThreadEventRowFromEvent<ThreadEventForType<TType>>;\ntype ThreadEventRow = {\n [TType in ThreadEventType]: ThreadEventRowOfType<TType>;\n}[ThreadEventType];\n\ndeclare const threadStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n active: \"active\";\n starting: \"starting\";\n idle: \"idle\";\n stopping: \"stopping\";\n}>;\ntype ThreadStatus = z$1.infer<typeof threadStatusSchema>;\n\ndeclare const threadTimelinePendingTodosSchema: z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n completed: \"completed\";\n pending: \"pending\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelinePendingTodos = z$1.infer<typeof threadTimelinePendingTodosSchema>;\n\ndeclare const threadQueuedMessageSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadQueuedMessage = z$1.infer<typeof threadQueuedMessageSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n}, z$1.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z$1.infer<typeof createThreadEnvironmentArgsSchema>;\ndeclare const workspaceFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspaceFileListResponse = z$1.infer<typeof workspaceFileListResponseSchema>;\ndeclare const workspacePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype WorkspacePathListResponse = z$1.infer<typeof workspacePathListResponseSchema>;\n\ndeclare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"clone\">;\n targetPath: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n remoteUrl: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>], \"type\">;\ntype CreateProjectSourceRequest = z$1.infer<typeof createProjectSourceRequestSchema>;\ndeclare const createProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodObject<{\n hostId: z$1.ZodString;\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strip>;\ntype CreateProjectRequest = z$1.infer<typeof createProjectRequestSchema>;\ndeclare const threadSectionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionResponse = z$1.infer<typeof threadSectionSchema>;\ndeclare const createThreadSectionRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype CreateThreadSectionRequest = z$1.infer<typeof createThreadSectionRequestSchema>;\ndeclare const updateThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateThreadSectionRequest = z$1.infer<typeof updateThreadSectionRequestSchema>;\ndeclare const deleteThreadSectionRequestSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n}, z$1.core.$strict>;\ntype DeleteThreadSectionRequest = z$1.infer<typeof deleteThreadSectionRequestSchema>;\ndeclare const threadSectionMutationResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n updatedThreadCount: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadSectionMutationResponse = z$1.infer<typeof threadSectionMutationResponseSchema>;\ndeclare const reorderProjectRequestSchema: z$1.ZodObject<{\n previousProjectId: z$1.ZodNullable<z$1.ZodString>;\n nextProjectId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderProjectRequest = z$1.infer<typeof reorderProjectRequestSchema>;\ndeclare const projectListQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n includePersonal: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n}, z$1.core.$strip>;\ntype ProjectListQuery = z$1.infer<typeof projectListQuerySchema>;\ndeclare const projectFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFilesQuery = z$1.infer<typeof projectFilesQuerySchema>;\ndeclare const projectPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n limit: z$1.ZodOptional<z$1.ZodOptional<z$1.ZodString>>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectPathsQuery = z$1.infer<typeof projectPathsQuerySchema>;\ndeclare const projectFileContentQuerySchema: z$1.ZodObject<{\n path: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strip>;\ntype ProjectFileContentQuery = z$1.infer<typeof projectFileContentQuerySchema>;\ndeclare const projectBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodString;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesQuery = z$1.infer<typeof projectBranchesQuerySchema>;\ndeclare const projectBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n defaultWorktreeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ProjectBranchesResponse = z$1.infer<typeof projectBranchesResponseSchema>;\ndeclare const promptHistoryQuerySchema: z$1.ZodObject<{\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PromptHistoryQuery = z$1.infer<typeof promptHistoryQuerySchema>;\ndeclare const promptHistoryResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n createdAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>>;\ntype PromptHistoryResponse = z$1.infer<typeof promptHistoryResponseSchema>;\ndeclare const updateProjectRequestSchema: z$1.ZodObject<{\n name: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype UpdateProjectRequest = z$1.infer<typeof updateProjectRequestSchema>;\ndeclare const updateProjectSourceRequestSchema: z$1.ZodObject<{\n type: z$1.ZodLiteral<\"local_path\">;\n path: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodTransform<string, string>>>;\n isDefault: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n}, z$1.core.$strict>;\ntype UpdateProjectSourceRequest = z$1.infer<typeof updateProjectSourceRequestSchema>;\ndeclare const commandListResponseSchema: z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype CommandListResponse = z$1.infer<typeof commandListResponseSchema>;\n/** Query for the complete command catalog available to a project and provider. */\ndeclare const projectCommandsQuerySchema: z$1.ZodObject<{\n provider: z$1.ZodString;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodOptional<z$1.ZodString>>>;\n}, z$1.core.$strict>;\ntype ProjectCommandsQuery = z$1.infer<typeof projectCommandsQuerySchema>;\ndeclare const skillListResponseSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n provider: z$1.ZodNullable<z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n \"acp-cursor\": \"acp-cursor\";\n }>>;\n scope: z$1.ZodEnum<{\n plugin: \"plugin\";\n \"bb-builtin\": \"bb-builtin\";\n \"bb-user\": \"bb-user\";\n \"bb-project\": \"bb-project\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n pluginId: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n manageable: z$1.ZodBoolean;\n registrySkillId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SkillListResponse = z$1.infer<typeof skillListResponseSchema>;\ndeclare const skillContentResponseSchema: z$1.ZodObject<{\n content: z$1.ZodString;\n revision: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SkillContentResponse = z$1.infer<typeof skillContentResponseSchema>;\ndeclare const skillFilesResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodString>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SkillFilesResponse = z$1.infer<typeof skillFilesResponseSchema>;\ndeclare const projectResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectResponse = z$1.infer<typeof projectResponseSchema>;\ndeclare const projectWithThreadsResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodEnum<{\n personal: \"personal\";\n standard: \"standard\";\n }>;\n name: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n sources: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n isDefault: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n type: z$1.ZodLiteral<\"local_path\">;\n hostId: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n threads: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>>;\n defaultExecutionOptions: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProjectWithThreadsResponse = z$1.infer<typeof projectWithThreadsResponseSchema>;\ndeclare const uploadedPromptAttachmentSchema: z$1.ZodObject<{\n type: z$1.ZodEnum<{\n localImage: \"localImage\";\n localFile: \"localFile\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype UploadedPromptAttachment = z$1.infer<typeof uploadedPromptAttachmentSchema>;\ndeclare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{\n sourceProjectId: z$1.ZodString;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CopyProjectAttachmentsRequest = z$1.infer<typeof copyProjectAttachmentsRequestSchema>;\n\ndeclare const registrySkillSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype RegistrySkill = z$1.infer<typeof registrySkillSchema>;\ndeclare const registrySkillsPageSchema: z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n name: z$1.ZodString;\n installs: z$1.ZodNumber;\n stars: z$1.ZodNullable<z$1.ZodNumber>;\n installUrl: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n topic: z$1.ZodNullable<z$1.ZodString>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n pagination: z$1.ZodObject<{\n page: z$1.ZodNumber;\n perPage: z$1.ZodNumber;\n total: z$1.ZodNumber;\n hasMore: z$1.ZodBoolean;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype RegistrySkillsPage = z$1.infer<typeof registrySkillsPageSchema>;\ndeclare const registryRepositoryStarsSchema: z$1.ZodObject<{\n stars: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype RegistryRepositoryStars = z$1.infer<typeof registryRepositoryStarsSchema>;\ndeclare const registrySkillDetailSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n skillId: z$1.ZodString;\n hash: z$1.ZodNullable<z$1.ZodString>;\n files: z$1.ZodNullable<z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n contents: z$1.ZodString;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype RegistrySkillDetail = z$1.infer<typeof registrySkillDetailSchema>;\ndeclare const registrySkillInstallResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n filePath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype RegistrySkillInstallResponse = z$1.infer<typeof registrySkillInstallResponseSchema>;\n\ndeclare const updateEnvironmentRequestSchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n name: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype UpdateEnvironmentRequest = z$1.infer<typeof updateEnvironmentRequestSchema>;\n/**\n * Query for searching paths in an environment's workspace. Unlike the\n * project-scoped variant this needs no `environmentId` — the environment is\n * the route param — and is project-agnostic, so it works for projectless\n * (personal) environments too.\n */\ndeclare const environmentPathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype EnvironmentPathsQuery = z$1.infer<typeof environmentPathsQuerySchema>;\ndeclare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesQuery = z$1.infer<typeof environmentDiffBranchesQuerySchema>;\ndeclare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype EnvironmentDiffBranchesResponse = z$1.infer<typeof environmentDiffBranchesResponseSchema>;\ndeclare const environmentStatusQuerySchema: z$1.ZodObject<{\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodString, z$1.ZodString>>;\n}, z$1.core.$strip>;\ntype EnvironmentStatusQuery = z$1.infer<typeof environmentStatusQuerySchema>;\ndeclare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodPipe<z$1.ZodString, z$1.ZodString>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffQuery = z$1.infer<typeof environmentDiffQuerySchema>;\n/**\n * Query for fetching a single file's contents at one side of a diff target.\n * Used by the diff card to reparse the card's patch with full old/new contents\n * so `@pierre/diffs` can render expand-context buttons between hunks.\n *\n * For `branch_committed` / `all`, callers pass the resolved merge-base SHA\n * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name\n * — the diff itself was computed against that SHA, so reading the old side\n * from the same SHA keeps the file content aligned with the hunk line\n * numbers. Reading from the branch tip is wrong whenever the branch has\n * moved past the merge-base since the file existed there.\n */\ndeclare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n target: z$1.ZodLiteral<\"uncommitted\">;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"all\">;\n mergeBaseRef: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n target: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n path: z$1.ZodString;\n side: z$1.ZodEnum<{\n new: \"new\";\n old: \"old\";\n }>;\n}, z$1.core.$strip>], \"target\">;\ntype EnvironmentDiffFileQuery = z$1.infer<typeof environmentDiffFileQuerySchema>;\ndeclare const environmentDiffFileResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n utf8: \"utf8\";\n base64: \"base64\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype EnvironmentDiffFileResponse = z$1.infer<typeof environmentDiffFileResponseSchema>;\ndeclare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype EnvironmentArchiveThreadsResponse = z$1.infer<typeof environmentArchiveThreadsResponseSchema>;\ndeclare const pullRequestMergeMethodSchema: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n}>;\ntype PullRequestMergeMethod = z$1.infer<typeof pullRequestMergeMethodSchema>;\ndeclare const commitActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"commit\">;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype CommitActionResponse = z$1.infer<typeof commitActionResponseSchema>;\ndeclare const squashMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"squash_merge\">;\n merged: z$1.ZodBoolean;\n message: z$1.ZodString;\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SquashMergeActionResponse = z$1.infer<typeof squashMergeActionResponseSchema>;\ndeclare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_ready\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestReadyActionResponse = z$1.infer<typeof pullRequestReadyActionResponseSchema>;\ndeclare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n rebase: \"rebase\";\n squash: \"squash\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestMergeActionResponse = z$1.infer<typeof pullRequestMergeActionResponseSchema>;\ndeclare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n action: z$1.ZodLiteral<\"pull_request_draft\">;\n message: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PullRequestDraftActionResponse = z$1.infer<typeof pullRequestDraftActionResponseSchema>;\ndeclare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspace: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\n/**\n * Structured pull-request lookup outcome. \"absent\" is a real answer — the\n * host checked and the branch has no PR (non-git environments resolve to\n * \"absent\" without a daemon call). \"unavailable\" means the lookup itself\n * failed (gh missing, not authenticated, timeout, unreachable workspace), so\n * callers must not render it as \"no PR exists\".\n */\ndeclare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n merged: \"merged\";\n draft: \"draft\";\n open: \"open\";\n closed: \"closed\";\n }>;\n url: z$1.ZodString;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n pending: \"pending\";\n passing: \"passing\";\n failing: \"failing\";\n no_checks: \"no_checks\";\n }>;\n totalCount: z$1.ZodNumber;\n passedCount: z$1.ZodNumber;\n failedCount: z$1.ZodNumber;\n pendingCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n review: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n none: \"none\";\n approved: \"approved\";\n changes_requested: \"changes_requested\";\n review_required: \"review_required\";\n review_requested: \"review_requested\";\n }>;\n reviewRequestCount: z$1.ZodNumber;\n }, z$1.core.$strict>;\n mergeability: z$1.ZodObject<{\n state: z$1.ZodEnum<{\n unknown: \"unknown\";\n blocked: \"blocked\";\n draft: \"draft\";\n mergeable: \"mergeable\";\n conflicts: \"conflicts\";\n }>;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n attention: z$1.ZodEnum<{\n blocked: \"blocked\";\n none: \"none\";\n merged: \"merged\";\n draft: \"draft\";\n closed: \"closed\";\n changes_requested: \"changes_requested\";\n review_requested: \"review_requested\";\n conflicts: \"conflicts\";\n checks_failed: \"checks_failed\";\n checks_pending: \"checks_pending\";\n ready_to_merge: \"ready_to_merge\";\n }>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentPullRequestResponse = z$1.infer<typeof environmentPullRequestResponseSchema>;\ndeclare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffResponse = z$1.infer<typeof environmentDiffResponseSchema>;\ndeclare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n changeKind: z$1.ZodEnum<{\n deleted: \"deleted\";\n added: \"added\";\n modified: \"modified\";\n renamed: \"renamed\";\n copied: \"copied\";\n type_changed: \"type_changed\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n loadMode: z$1.ZodEnum<{\n auto: \"auto\";\n on_demand: \"on_demand\";\n too_large: \"too_large\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n initialPatches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n too_many_files: \"too_many_files\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffFilesResponse = z$1.infer<typeof environmentDiffFilesResponseSchema>;\ndeclare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"not_applicable\">;\n reason: z$1.ZodEnum<{\n non_git_environment: \"non_git_environment\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n unknown: \"unknown\";\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>], \"outcome\">;\ntype EnvironmentDiffPatchResponse = z$1.infer<typeof environmentDiffPatchResponseSchema>;\n/**\n * Body for `POST /diff/patch`: the diff target plus the list of new paths whose\n * patches the client wants. A POST (not GET) because the repeated `paths` array\n * cannot survive flat query parsing. The client supplies only new paths; the\n * server re-derives each file's rename/copy pairing (`previousPath`) from its\n * own TOC.\n */\ndeclare const environmentDiffPatchRequestSchema: z$1.ZodObject<{\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype EnvironmentDiffPatchRequest = z$1.infer<typeof environmentDiffPatchRequestSchema>;\ntype EnvironmentStatusResponse = z$1.infer<typeof environmentStatusResponseSchema>;\n\ndeclare const providerUsageResponseSchema: z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n}, z$1.core.$strip>;\ntype ProviderUsageResponse = z$1.infer<typeof providerUsageResponseSchema>;\ndeclare const discoverReposResultSchema: z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype DiscoverReposResult = z$1.infer<typeof discoverReposResultSchema>;\ntype HostDaemonCommandTransport = \"settled\" | \"onlineRpc\";\ntype HostDaemonCommandEnvironmentLane = \"read\" | \"write\";\ntype HostDaemonFlushEventsBeforeResult = boolean | \"when-initiated\";\ninterface HostDaemonCommandDescriptor<Type extends string, Schema extends z$1.ZodTypeAny, ResultSchema extends z$1.ZodTypeAny, Transport extends HostDaemonCommandTransport, Retryable extends boolean> {\n type: Type;\n schema: Schema;\n resultSchema: ResultSchema;\n transport: Transport;\n retryable: Retryable;\n flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult;\n envLane: HostDaemonCommandEnvironmentLane | null;\n}\ndeclare const hostDaemonCommandRegistry: {\n \"thread.rewind.discard\": HostDaemonCommandDescriptor<\"thread.rewind.discard\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rewind.discard\">;\n leaseId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.rewind.prepare\": HostDaemonCommandDescriptor<\"thread.rewind.prepare\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.rewind.prepare\">;\n leaseId: z$1.ZodString;\n sourceProviderThreadId: z$1.ZodString;\n retainThroughProviderCheckpoint: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.start\": HostDaemonCommandDescriptor<\"thread.start\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n type: z$1.ZodLiteral<\"thread.start\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n threadStoragePath: z$1.ZodOptional<z$1.ZodString>;\n fork: z$1.ZodOptional<z$1.ZodObject<{\n sourceProviderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"turn.submit\": HostDaemonCommandDescriptor<\"turn.submit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"turn.submit\">;\n requestId: z$1.ZodString;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n inputGroups: z$1.ZodOptional<z$1.ZodArray<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n builtin: \"builtin\";\n project: \"project\";\n user: \"user\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>>;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"start\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"auto\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"steer\">;\n expectedTurnId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"mode\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n appliedAs: z$1.ZodEnum<{\n steer: \"steer\";\n \"new-turn\": \"new-turn\";\n }>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"thread.stop\": HostDaemonCommandDescriptor<\"thread.stop\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.stop\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.goal.clear\": HostDaemonCommandDescriptor<\"thread.goal.clear\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.goal.clear\">;\n options: z$1.ZodIntersection<z$1.ZodObject<{\n model: z$1.ZodString;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n claudeCodePermissionMode: z$1.ZodOptional<z$1.ZodLiteral<\"plan\">>;\n claudeCodeMockCliTraffic: z$1.ZodOptional<z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n endpoint: z$1.ZodString;\n }, z$1.core.$strict>>;\n workflowsEnabled: z$1.ZodBoolean;\n memoryEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n providerSubagentsEnabled: z$1.ZodOptional<z$1.ZodBoolean>;\n }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"accept-edits\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"user\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"auto\">;\n permissionScope: z$1.ZodLiteral<\"workspace\">;\n approvalReviewer: z$1.ZodLiteral<\"automatic\">;\n permissionEscalation: z$1.ZodEnum<{\n ask: \"ask\";\n deny: \"deny\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n permissionMode: z$1.ZodLiteral<\"full\">;\n permissionScope: z$1.ZodLiteral<\"full\">;\n approvalReviewer: z$1.ZodNull;\n permissionEscalation: z$1.ZodNull;\n }, z$1.core.$strip>], \"permissionMode\">>;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n resumeContext: z$1.ZodObject<{\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n instructionMode: z$1.ZodEnum<{\n append: \"append\";\n replace: \"replace\";\n }>;\n projectId: z$1.ZodString;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n instructions: z$1.ZodString;\n dynamicTools: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n inputSchema: z$1.ZodUnknown;\n }, z$1.core.$strip>>;\n injectedSkillSources: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"tree\">;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n sourceType: z$1.ZodEnum<{\n builtin: \"builtin\";\n \"data-dir\": \"data-dir\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-path\">;\n sourceType: z$1.ZodLiteral<\"project\">;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n name: z$1.ZodString;\n description: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-path\">;\n sourceType: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n }>;\n sourceRootPath: z$1.ZodString;\n skillFilePath: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n disallowedTools: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cleared: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.plan.cancel\": HostDaemonCommandDescriptor<\"thread.plan.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.plan.cancel\">;\n expectedTurnId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n cancelled: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"settled\", false>;\n \"thread.rename\": HostDaemonCommandDescriptor<\"thread.rename\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.rename\">;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.archive\": HostDaemonCommandDescriptor<\"thread.archive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"thread.archive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"thread.unarchive\": HostDaemonCommandDescriptor<\"thread.unarchive\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"thread.unarchive\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"interactive.resolve\": HostDaemonCommandDescriptor<\"interactive.resolve\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n threadId: z$1.ZodString;\n type: z$1.ZodLiteral<\"interactive.resolve\">;\n interactionId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n resolution: z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>]>;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"codex.inference.complete\": HostDaemonCommandDescriptor<\"codex.inference.complete\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.inference.complete\">;\n model: z$1.ZodString;\n reasoningEffort: z$1.ZodLiteral<\"none\">;\n prompt: z$1.ZodString;\n outputSchema: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n value: z$1.ZodType<JsonObject, unknown, z$1.core.$ZodTypeInternals<JsonObject, unknown>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"codex.voice.transcribe\": HostDaemonCommandDescriptor<\"codex.voice.transcribe\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"codex.voice.transcribe\">;\n model: z$1.ZodString;\n audioBase64: z$1.ZodString;\n mimeType: z$1.ZodString;\n filename: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n timeoutMs: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n model: z$1.ZodString;\n text: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.provision\": HostDaemonCommandDescriptor<\"environment.provision\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodString;\n checkout: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n name: z$1.ZodString;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n sourcePath: z$1.ZodString;\n targetPath: z$1.ZodString;\n branchName: z$1.ZodString;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n setupTimeoutMs: z$1.ZodNumber;\n workspaceProvisionType: z$1.ZodLiteral<\"managed-worktree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision\">;\n initiator: z$1.ZodNullable<z$1.ZodObject<{\n threadId: z$1.ZodString;\n provisioningId: z$1.ZodString;\n }, z$1.core.$strict>>;\n workspaceProvisionType: z$1.ZodLiteral<\"personal\">;\n targetPath: z$1.ZodString;\n }, z$1.core.$strict>], \"workspaceProvisionType\">, z$1.ZodObject<{\n path: z$1.ZodString;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n transcript: z$1.ZodArray<z$1.ZodObject<{\n type: z$1.ZodEnum<{\n output: \"output\";\n step: \"step\";\n }>;\n key: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n status: z$1.ZodOptional<z$1.ZodEnum<{\n started: \"started\";\n completed: \"completed\";\n failed: \"failed\";\n }>>;\n metadata: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodUnknown>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"settled\", false>;\n \"project.clone\": HostDaemonCommandDescriptor<\"project.clone\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone\">;\n remoteUrl: z$1.ZodString;\n projectSlug: z$1.ZodString;\n targetPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"settled\", false>;\n \"environment.provision.cancel\": HostDaemonCommandDescriptor<\"environment.provision.cancel\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n type: z$1.ZodLiteral<\"environment.provision.cancel\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n aborted: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"environment.destroy\": HostDaemonCommandDescriptor<\"environment.destroy\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"environment.destroy\">;\n }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, \"settled\", false>;\n \"workspace.commit\": HostDaemonCommandDescriptor<\"workspace.commit\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.commit\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.squash_merge\": HostDaemonCommandDescriptor<\"workspace.squash_merge\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.squash_merge\">;\n targetBranch: z$1.ZodString;\n commitMessage: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commitSha: z$1.ZodString;\n commitSubject: z$1.ZodString;\n merged: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"settled\", false>;\n \"workspace.pull_request_action\": HostDaemonCommandDescriptor<\"workspace.pull_request_action\", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"ready\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"draft\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request_action\">;\n operation: z$1.ZodLiteral<\"merge\">;\n method: z$1.ZodEnum<{\n merge: \"merge\";\n squash: \"squash\";\n rebase: \"rebase\";\n }>;\n }, z$1.core.$strict>], \"operation\">, z$1.ZodObject<{}, z$1.core.$strict>, \"settled\", false>;\n \"host.list_files\": HostDaemonCommandDescriptor<\"host.list_files\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_files\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_paths\": HostDaemonCommandDescriptor<\"host.list_paths\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_paths\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n includeFiles: z$1.ZodBoolean;\n includeDirectories: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.mkdir\": HostDaemonCommandDescriptor<\"host.mkdir\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.mkdir\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.move_path\": HostDaemonCommandDescriptor<\"host.move_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.move_path\">;\n sourcePath: z$1.ZodString;\n destinationPath: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.remove_path\": HostDaemonCommandDescriptor<\"host.remove_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.remove_path\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n recursive: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.browse_directory\": HostDaemonCommandDescriptor<\"host.browse_directory\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.browse_directory\">;\n path: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.paths_exist\": HostDaemonCommandDescriptor<\"host.paths_exist\", z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n type: z$1.ZodLiteral<\"host.paths_exist\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"project.inspect\": HostDaemonCommandDescriptor<\"project.inspect\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.inspect\">;\n path: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n gitRemoteUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"project.clone_default_path\": HostDaemonCommandDescriptor<\"project.clone_default_path\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project.clone_default_path\">;\n projectSlug: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.pick_folder\": HostDaemonCommandDescriptor<\"host.pick_folder\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.pick_folder\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.caffeinate\": HostDaemonCommandDescriptor<\"host.caffeinate\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.caffeinate\">;\n enabled: z$1.ZodBoolean;\n }, z$1.core.$strict>, z$1.ZodObject<{\n enabled: z$1.ZodBoolean;\n supported: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"connect-tunnel.ensure-identity\": HostDaemonCommandDescriptor<\"connect-tunnel.ensure-identity\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"connect-tunnel.ensure-identity\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n label: z$1.ZodString;\n baseDomain: z$1.ZodString;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_commands\": HostDaemonCommandDescriptor<\"host.list_commands\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_commands\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n commands: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n project: \"project\";\n user: \"user\";\n }>;\n description: z$1.ZodNullable<z$1.ZodString>;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.list_skills\": HostDaemonCommandDescriptor<\"host.list_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_skills\">;\n providerId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n skills: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n filePath: z$1.ZodString;\n rootKind: z$1.ZodEnum<{\n \"shared-user\": \"shared-user\";\n \"shared-project\": \"shared-project\";\n plugin: \"plugin\";\n \"bb-project\": \"bb-project\";\n \"bb-data-dir\": \"bb-data-dir\";\n \"bb-builtin\": \"bb-builtin\";\n \"provider-project\": \"provider-project\";\n \"provider-user\": \"provider-user\";\n }>;\n linked: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.delete_skill\": HostDaemonCommandDescriptor<\"host.delete_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.delete_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n \"claude-user\": \"claude-user\";\n \"claude-project\": \"claude-project\";\n \"codex-user\": \"codex-user\";\n \"codex-project\": \"codex-project\";\n \"cursor-user\": \"cursor-user\";\n \"cursor-project\": \"cursor-project\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n rootPath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n deletedPath: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", false>;\n \"host.write_skill\": HostDaemonCommandDescriptor<\"host.write_skill\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_skill\">;\n scope: z$1.ZodEnum<{\n \"bb-project\": \"bb-project\";\n \"bb-user\": \"bb-user\";\n }>;\n name: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n content: z$1.ZodString;\n expectedSha256: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n filePath: z$1.ZodString;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"outcome\">, \"onlineRpc\", false>;\n \"host.install_global_skills\": HostDaemonCommandDescriptor<\"host.install_global_skills\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.install_global_skills\">;\n skills: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n treeHash: z$1.ZodString;\n entryPath: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"host.global_skills_status\": HostDaemonCommandDescriptor<\"host.global_skills_status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.global_skills_status\">;\n names: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n entries: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n treeHash: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"host.list_branches\": HostDaemonCommandDescriptor<\"host.list_branches\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.list_branches\">;\n path: z$1.ZodString;\n query: z$1.ZodOptional<z$1.ZodString>;\n selectedBranch: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodNumber;\n }, z$1.core.$strip>, z$1.ZodObject<{\n branches: z$1.ZodArray<z$1.ZodString>;\n branchesTruncated: z$1.ZodBoolean;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranchRelation: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n equal: \"equal\";\n \"local-behind\": \"local-behind\";\n \"local-ahead\": \"local-ahead\";\n diverged: \"diverged\";\n }>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"none\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"rebase\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"cherry-pick\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"revert\">;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n hasConflicts: z$1.ZodBoolean;\n }, z$1.core.$strip>], \"kind\">;\n originDefaultBranch: z$1.ZodNullable<z$1.ZodString>;\n remoteBranches: z$1.ZodArray<z$1.ZodString>;\n remoteBranchesTruncated: z$1.ZodBoolean;\n selectedBranch: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n kind: z$1.ZodEnum<{\n local: \"local\";\n remote: \"remote\";\n missing: \"missing\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.file_metadata\": HostDaemonCommandDescriptor<\"host.file_metadata\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.file_metadata\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n modifiedAtMs: z$1.ZodNumber;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file\": HostDaemonCommandDescriptor<\"host.read_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n ref: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.read_file_relative\": HostDaemonCommandDescriptor<\"host.read_file_relative\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.read_file_relative\">;\n rootPath: z$1.ZodString;\n path: z$1.ZodString;\n dotfiles: z$1.ZodEnum<{\n deny: \"deny\";\n allow: \"allow\";\n }>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n path: z$1.ZodString;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodNumber;\n modifiedAtMs: z$1.ZodOptional<z$1.ZodNumber>;\n sha256: z$1.ZodString;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"host.write_file\": HostDaemonCommandDescriptor<\"host.write_file\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host.write_file\">;\n path: z$1.ZodString;\n rootPath: z$1.ZodOptional<z$1.ZodString>;\n content: z$1.ZodString;\n contentEncoding: z$1.ZodEnum<{\n base64: \"base64\";\n utf8: \"utf8\";\n }>;\n createParents: z$1.ZodBoolean;\n expectedSha256: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n mode: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"written\">;\n sha256: z$1.ZodString;\n sizeBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"conflict\">;\n currentSha256: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", false>;\n \"provider.list_models\": HostDaemonCommandDescriptor<\"provider.list_models\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.list_models\">;\n providerId: z$1.ZodString;\n acpLaunchSpec: z$1.ZodOptional<z$1.ZodObject<{\n displayName: z$1.ZodString;\n command: z$1.ZodString;\n args: z$1.ZodArray<z$1.ZodString>;\n env: z$1.ZodRecord<z$1.ZodString, z$1.ZodString>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n modelCli: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodObject<{\n listArgs: z$1.ZodArray<z$1.ZodString>;\n selectFlag: z$1.ZodOptional<z$1.ZodString>;\n primaryModels: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodTransform<{\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n } | undefined, {\n listArgs: string[];\n primaryModels: string[];\n selectFlag?: string | undefined;\n }>>>;\n reasoningCli: z$1.ZodOptional<z$1.ZodObject<{\n flag: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeReasoning: z$1.ZodOptional<z$1.ZodObject<{\n configId: z$1.ZodString;\n supportedLevels: z$1.ZodArray<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n levelValues: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }> & z$1.core.$partial, z$1.ZodString>>;\n defaultLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n }, z$1.core.$strict>>;\n nativeSkillRoots: z$1.ZodOptional<z$1.ZodObject<{\n user: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n project: z$1.ZodDefault<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strict>>;\n permissionCli: z$1.ZodOptional<z$1.ZodObject<{\n full: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n workspaceWrite: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n readonly: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n insertAfterArgs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n cwd: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"known_acp_agents.status\": HostDaemonCommandDescriptor<\"known_acp_agents.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"known_acp_agents.status\">;\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n executableName: z$1.ZodString;\n installed: z$1.ZodBoolean;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider.usage\": HostDaemonCommandDescriptor<\"provider.usage\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider.usage\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n status: z$1.ZodLiteral<\"ok\">;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n label: z$1.ZodString;\n usedPercent: z$1.ZodNumber;\n resetsAt: z$1.ZodNullable<z$1.ZodString>;\n cost: z$1.ZodOptional<z$1.ZodObject<{\n usedUsdCents: z$1.ZodNumber;\n limitUsdCents: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"not_installed\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"unauthenticated\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"expired\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n status: z$1.ZodLiteral<\"error\">;\n message: z$1.ZodString;\n planLabel: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n accountEmail: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodString>>;\n }, z$1.core.$strip>], \"status\">;\n }, z$1.core.$strip>, \"onlineRpc\", true>;\n \"workspace.discover_repos\": HostDaemonCommandDescriptor<\"workspace.discover_repos\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"workspace.discover_repos\">;\n maxDepth: z$1.ZodNumber;\n sinceDays: z$1.ZodNumber;\n limit: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodObject<{\n repos: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n lastActivityAt: z$1.ZodString;\n originUrl: z$1.ZodNullable<z$1.ZodString>;\n agentSeen: z$1.ZodBoolean;\n agentSeenAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>, \"onlineRpc\", true>;\n \"provider_cli.status\": HostDaemonCommandDescriptor<\"provider_cli.status\", z$1.ZodObject<{\n type: z$1.ZodLiteral<\"provider_cli.status\">;\n }, z$1.core.$strict>, z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n }, z$1.core.$strip>>, \"onlineRpc\", true>;\n \"provider_cli.install\": HostDaemonCommandDescriptor<\"provider_cli.install\", z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n type: z$1.ZodLiteral<\"provider_cli.install\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n events: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n }, z$1.core.$strict>, \"onlineRpc\", false>;\n \"workspace.status\": HostDaemonCommandDescriptor<\"workspace.status\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.status\">;\n mergeBaseBranch: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n workspaceStatus: z$1.ZodObject<{\n workingTree: z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n hasUncommittedChanges: z$1.ZodBoolean;\n state: z$1.ZodEnum<{\n clean: \"clean\";\n untracked: \"untracked\";\n dirty_uncommitted: \"dirty_uncommitted\";\n committed_unmerged: \"committed_unmerged\";\n dirty_and_committed_unmerged: \"dirty_and_committed_unmerged\";\n }>;\n }, z$1.core.$strip>;\n checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"branch\">;\n branchName: z$1.ZodString;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"detached\">;\n headSha: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unborn\">;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"unknown\">;\n reason: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">;\n branch: z$1.ZodObject<{\n currentBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodString;\n }, z$1.core.$strip>;\n mergeBase: z$1.ZodNullable<z$1.ZodObject<{\n insertions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n status: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n U: \"U\";\n \"??\": \"??\";\n \"?\": \"?\";\n }>;\n insertions: z$1.ZodNullable<z$1.ZodNumber>;\n deletions: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n mergeBaseBranch: z$1.ZodString;\n baseRef: z$1.ZodNullable<z$1.ZodString>;\n aheadCount: z$1.ZodNumber;\n behindCount: z$1.ZodNumber;\n hasCommittedUnmergedChanges: z$1.ZodBoolean;\n commits: z$1.ZodArray<z$1.ZodObject<{\n sha: z$1.ZodString;\n shortSha: z$1.ZodString;\n subject: z$1.ZodString;\n authorName: z$1.ZodString;\n authoredAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diff\": HostDaemonCommandDescriptor<\"workspace.diff\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diff\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n maxDiffBytes: z$1.ZodNumber;\n maxFileListBytes: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n diff: z$1.ZodObject<{\n diff: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n shortstat: z$1.ZodString;\n files: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffFiles\": HostDaemonCommandDescriptor<\"workspace.diffFiles\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffFiles\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n previousPath: z$1.ZodNullable<z$1.ZodString>;\n statusLetter: z$1.ZodEnum<{\n M: \"M\";\n A: \"A\";\n D: \"D\";\n R: \"R\";\n C: \"C\";\n T: \"T\";\n }>;\n additions: z$1.ZodNumber;\n deletions: z$1.ZodNumber;\n binary: z$1.ZodBoolean;\n origin: z$1.ZodEnum<{\n untracked: \"untracked\";\n tracked: \"tracked\";\n }>;\n }, z$1.core.$strip>>;\n shortstat: z$1.ZodString;\n mergeBaseRef: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.diffPatch\": HostDaemonCommandDescriptor<\"workspace.diffPatch\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.diffPatch\">;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"uncommitted\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"branch_committed\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"all\">;\n mergeBaseBranch: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"commit\">;\n sha: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">;\n paths: z$1.ZodArray<z$1.ZodString>;\n maxBytesPerFile: z$1.ZodNumber;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n patches: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n patch: z$1.ZodString;\n truncated: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n failure: z$1.ZodObject<{\n code: z$1.ZodEnum<{\n path_not_found: \"path_not_found\";\n not_git_repo: \"not_git_repo\";\n not_worktree: \"not_worktree\";\n workspace_type_mismatch: \"workspace_type_mismatch\";\n permission_denied: \"permission_denied\";\n unknown_environment: \"unknown_environment\";\n unknown: \"unknown\";\n }>;\n workspacePath: z$1.ZodString;\n message: z$1.ZodString;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n \"workspace.pull_request\": HostDaemonCommandDescriptor<\"workspace.pull_request\", z$1.ZodObject<{\n environmentId: z$1.ZodString;\n workspaceContext: z$1.ZodObject<{\n workspacePath: z$1.ZodString;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n }, z$1.core.$strip>;\n type: z$1.ZodLiteral<\"workspace.pull_request\">;\n }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"available\">;\n pullRequest: z$1.ZodObject<{\n number: z$1.ZodNumber;\n title: z$1.ZodString;\n state: z$1.ZodEnum<{\n OPEN: \"OPEN\";\n CLOSED: \"CLOSED\";\n MERGED: \"MERGED\";\n }>;\n url: z$1.ZodString;\n isDraft: z$1.ZodBoolean;\n baseRefName: z$1.ZodString;\n headRefName: z$1.ZodString;\n updatedAt: z$1.ZodString;\n checks: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n completed: \"completed\";\n queued: \"queued\";\n in_progress: \"in_progress\";\n }>;\n conclusion: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n success: \"success\";\n cancelled: \"cancelled\";\n failure: \"failure\";\n skipped: \"skipped\";\n neutral: \"neutral\";\n timed_out: \"timed_out\";\n action_required: \"action_required\";\n startup_failure: \"startup_failure\";\n stale: \"stale\";\n }>>;\n url: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>>;\n reviewDecision: z$1.ZodNullable<z$1.ZodEnum<{\n APPROVED: \"APPROVED\";\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\";\n REVIEW_REQUIRED: \"REVIEW_REQUIRED\";\n }>>;\n reviewRequestCount: z$1.ZodNumber;\n mergeStateStatus: z$1.ZodNullable<z$1.ZodEnum<{\n BEHIND: \"BEHIND\";\n BLOCKED: \"BLOCKED\";\n CLEAN: \"CLEAN\";\n DIRTY: \"DIRTY\";\n DRAFT: \"DRAFT\";\n HAS_HOOKS: \"HAS_HOOKS\";\n UNKNOWN: \"UNKNOWN\";\n UNSTABLE: \"UNSTABLE\";\n }>>;\n mergeable: z$1.ZodNullable<z$1.ZodEnum<{\n UNKNOWN: \"UNKNOWN\";\n CONFLICTING: \"CONFLICTING\";\n MERGEABLE: \"MERGEABLE\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"absent\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n outcome: z$1.ZodLiteral<\"unavailable\">;\n message: z$1.ZodString;\n }, z$1.core.$strict>], \"outcome\">, \"onlineRpc\", true>;\n};\ntype HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry;\ntype AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry];\ntype HostDaemonCommandDescriptorForTransport<Transport extends HostDaemonCommandTransport> = Extract<AnyHostDaemonCommandDescriptor, {\n transport: Transport;\n}>;\ntype HostDaemonResultSchemaMapForTransport<Transport extends HostDaemonCommandTransport> = {\n [Descriptor in HostDaemonCommandDescriptorForTransport<Transport> as Descriptor[\"type\"]]: Descriptor[\"resultSchema\"];\n};\ntype HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<\"onlineRpc\">;\ntype HostDaemonOnlineRpcResultByType = {\n [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer<HostDaemonOnlineRpcResultSchemaMap[K]>;\n};\n\ndeclare const pickFolderResponseSchema: z$1.ZodObject<{\n path: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PickFolderResponse = z$1.infer<typeof pickFolderResponseSchema>;\ndeclare const pathsExistRequestSchema: z$1.ZodObject<{\n paths: z$1.ZodPipe<z$1.ZodArray<z$1.ZodString>, z$1.ZodTransform<string[], string[]>>;\n}, z$1.core.$strip>;\ntype PathsExistRequest = z$1.infer<typeof pathsExistRequestSchema>;\ndeclare const pathsExistResponseSchema: z$1.ZodObject<{\n existence: z$1.ZodRecord<z$1.ZodString, z$1.ZodBoolean>;\n}, z$1.core.$strip>;\ntype PathsExistResponse = z$1.infer<typeof pathsExistResponseSchema>;\ndeclare const providerCliStatusResponseSchema: z$1.ZodRecord<z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n}>, z$1.ZodObject<{\n displayName: z$1.ZodString;\n executableName: z$1.ZodString;\n executablePath: z$1.ZodNullable<z$1.ZodString>;\n installed: z$1.ZodBoolean;\n installSource: z$1.ZodEnum<{\n external: \"external\";\n notInstalled: \"notInstalled\";\n npmGlobal: \"npmGlobal\";\n }>;\n currentVersion: z$1.ZodNullable<z$1.ZodString>;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n minimumSupportedVersion: z$1.ZodNullable<z$1.ZodString>;\n npmPackageName: z$1.ZodNullable<z$1.ZodString>;\n npmGlobalPackageVersion: z$1.ZodNullable<z$1.ZodString>;\n installAction: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n label: z$1.ZodEnum<{\n Install: \"Install\";\n Update: \"Update\";\n }>;\n commandKind: z$1.ZodEnum<{\n exec: \"exec\";\n shell: \"shell\";\n }>;\n command: z$1.ZodString;\n }, z$1.core.$strip>>;\n needsUpdate: z$1.ZodBoolean;\n versionUnsupported: z$1.ZodBoolean;\n}, z$1.core.$strip>>;\ntype ProviderCliStatusResponse = z$1.infer<typeof providerCliStatusResponseSchema>;\ndeclare const providerCliInstallRequestSchema: z$1.ZodObject<{\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n actionKind: z$1.ZodEnum<{\n install: \"install\";\n update: \"update\";\n }>;\n}, z$1.core.$strip>;\ntype ProviderCliInstallRequest = z$1.infer<typeof providerCliInstallRequestSchema>;\ndeclare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"started\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n command: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"output\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n stream: z$1.ZodEnum<{\n stdout: \"stdout\";\n stderr: \"stderr\";\n }>;\n text: z$1.ZodString;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"completed\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n signal: z$1.ZodNullable<z$1.ZodString>;\n success: z$1.ZodBoolean;\n}, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"error\">;\n provider: z$1.ZodEnum<{\n codex: \"codex\";\n claudeCode: \"claudeCode\";\n cursor: \"cursor\";\n }>;\n message: z$1.ZodString;\n}, z$1.core.$strip>], \"type\">;\ntype ProviderCliInstallEvent = z$1.infer<typeof providerCliInstallEventSchema>;\n\ninterface CreateFilePreviewResponse {\n baseUrl: string;\n expiresAtMs: number;\n}\ntype HostFileReadResponse = HostDaemonOnlineRpcResultByType[\"host.read_file\"];\ntype HostFileWriteResponse = HostDaemonOnlineRpcResultByType[\"host.write_file\"];\ntype HostFileListResponse = HostDaemonOnlineRpcResultByType[\"host.list_files\"];\ntype HostPathListResponse = HostDaemonOnlineRpcResultByType[\"host.list_paths\"];\ntype HostMkdirResponse = HostDaemonOnlineRpcResultByType[\"host.mkdir\"];\ntype HostMovePathResponse = HostDaemonOnlineRpcResultByType[\"host.move_path\"];\ntype HostRemovePathResponse = HostDaemonOnlineRpcResultByType[\"host.remove_path\"];\n\n/**\n * Query for `GET /hosts/:id/directory`, the interactive path browser's\n * single-level directory read. `path` is an absolute directory on the host;\n * omitting it lists the host's home directory (the daemon resolves it, since a\n * remote caller cannot know the host's home).\n */\ndeclare const hostDirectoryQuerySchema: z$1.ZodObject<{\n path: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype HostDirectoryQuery = z$1.infer<typeof hostDirectoryQuerySchema>;\ndeclare const hostDirectoryListingSchema: z$1.ZodObject<{\n directory: z$1.ZodString;\n parent: z$1.ZodNullable<z$1.ZodString>;\n entries: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype HostDirectoryListing = z$1.infer<typeof hostDirectoryListingSchema>;\n/** Project name is sent so the daemon can derive its host-local checkout path. */\ndeclare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype HostCloneDefaultPathQuery = z$1.infer<typeof hostCloneDefaultPathQuerySchema>;\ndeclare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{\n path: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostCloneDefaultPathResponse = z$1.infer<typeof hostCloneDefaultPathResponseSchema>;\ndeclare const createHostJoinCodeResponseSchema: z$1.ZodObject<{\n joinCode: z$1.ZodString;\n hostId: z$1.ZodString;\n expiresAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype CreateHostJoinCodeResponse = z$1.infer<typeof createHostJoinCodeResponseSchema>;\ndeclare const updateHostRequestSchema: z$1.ZodObject<{\n name: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateHostRequest = z$1.infer<typeof updateHostRequestSchema>;\ndeclare const hostRetryUpdateResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strict>;\ntype HostRetryUpdateResponse = z$1.infer<typeof hostRetryUpdateResponseSchema>;\ntype HostPathsExistRequest = PathsExistRequest;\ntype HostPathsExistResponse = PathsExistResponse;\ndeclare const hostPickFolderRequestSchema: z$1.ZodObject<{\n clientHostId: z$1.ZodString;\n}, z$1.core.$strict>;\ntype HostPickFolderRequest = z$1.infer<typeof hostPickFolderRequestSchema>;\ntype HostPickFolderResponse = PickFolderResponse;\ntype HostProviderCliStatusResponse = ProviderCliStatusResponse;\ntype HostProviderCliInstallRequest = ProviderCliInstallRequest;\ntype HostProviderCliInstallEvent = ProviderCliInstallEvent;\n\ndeclare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{\n id: z$1.ZodString;\n outcome: z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>;\n devMode: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n installed: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n candidate: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n blocked: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n reasons: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginUpdateCheckEntry = z$1.infer<typeof pluginUpdateCheckEntrySchema>;\ndeclare const pluginApplyUpdateResultSchema: z$1.ZodObject<{\n applied: z$1.ZodBoolean;\n from: z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>;\n to: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n display: z$1.ZodString;\n }, z$1.core.$strip>>;\n outcome: z$1.ZodEnum<{\n current: \"current\";\n updated: \"updated\";\n \"rolled-back\": \"rolled-back\";\n }>;\n detail: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginApplyUpdateResult$1 = z$1.infer<typeof pluginApplyUpdateResultSchema>;\ndeclare const pluginSourceDetailSchema: z$1.ZodObject<{\n requested: z$1.ZodString;\n resolved: z$1.ZodString;\n integrity: z$1.ZodOptional<z$1.ZodString>;\n registry: z$1.ZodOptional<z$1.ZodString>;\n engines: z$1.ZodObject<{\n bb: z$1.ZodOptional<z$1.ZodString>;\n bbPluginSdk: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>;\n installedAt: z$1.ZodOptional<z$1.ZodNumber>;\n history: z$1.ZodArray<z$1.ZodObject<{\n version: z$1.ZodString;\n activatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginSourceDetail = z$1.infer<typeof pluginSourceDetailSchema>;\ndeclare const installedPluginSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype InstalledPlugin = z$1.infer<typeof installedPluginSchema>;\ndeclare const pluginListResponseSchema: z$1.ZodObject<{\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginListResponse = z$1.infer<typeof pluginListResponseSchema>;\ndeclare const pluginReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n source: z$1.ZodString;\n rootDir: z$1.ZodString;\n version: z$1.ZodString;\n provenance: z$1.ZodEnum<{\n builtin: \"builtin\";\n direct: \"direct\";\n catalog: \"catalog\";\n }>;\n isOrphanedBuiltin: z$1.ZodBoolean;\n catalogEntryId: z$1.ZodOptional<z$1.ZodString>;\n sourceDisplay: z$1.ZodString;\n updateState: z$1.ZodObject<{\n outcome: z$1.ZodOptional<z$1.ZodEnum<{\n unavailable: \"unavailable\";\n incompatible: \"incompatible\";\n current: \"current\";\n \"update-available\": \"update-available\";\n pinned: \"pinned\";\n }>>;\n availableVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedVersion: z$1.ZodOptional<z$1.ZodString>;\n blockedReasons: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n lastCheckAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastFailure: z$1.ZodOptional<z$1.ZodObject<{\n version: z$1.ZodString;\n at: z$1.ZodNumber;\n detail: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n enabled: z$1.ZodBoolean;\n description: z$1.ZodNullable<z$1.ZodString>;\n name: z$1.ZodNullable<z$1.ZodString>;\n icon: z$1.ZodNullable<z$1.ZodString>;\n iconUrl: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n missing: \"missing\";\n incompatible: \"incompatible\";\n disabled: \"disabled\";\n degraded: \"degraded\";\n \"needs-configuration\": \"needs-configuration\";\n }>;\n statusDetail: z$1.ZodNullable<z$1.ZodString>;\n handlerStats: z$1.ZodObject<{\n count: z$1.ZodNumber;\n totalMs: z$1.ZodNumber;\n maxMs: z$1.ZodNumber;\n errorCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n services: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n stopped: \"stopped\";\n backoff: \"backoff\";\n }>;\n }, z$1.core.$strip>>;\n schedules: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n cron: z$1.ZodString;\n nextRunAt: z$1.ZodNumber;\n lastRunAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastStatus: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n running: \"running\";\n ok: \"ok\";\n }>>;\n lastError: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n cliCommand: z$1.ZodNullable<z$1.ZodObject<{\n name: z$1.ZodString;\n summary: z$1.ZodString;\n }, z$1.core.$strip>>;\n capabilities: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n skill: \"skill\";\n theme: \"theme\";\n \"agent-tool\": \"agent-tool\";\n \"thread-integration\": \"thread-integration\";\n }>;\n id: z$1.ZodString;\n label: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n hasSettings: z$1.ZodBoolean;\n app: z$1.ZodObject<{\n hasApp: z$1.ZodBoolean;\n bundle: z$1.ZodNullable<z$1.ZodObject<{\n jsUrl: z$1.ZodString;\n cssUrl: z$1.ZodNullable<z$1.ZodString>;\n hash: z$1.ZodString;\n sdkMajor: z$1.ZodNumber;\n sdkVersion: z$1.ZodString;\n compatible: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n logoDarkUrl: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype PluginReloadResponse = z$1.infer<typeof pluginReloadResponseSchema>;\ndeclare const pluginRemoveResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ntype PluginRemoveResponse = z$1.infer<typeof pluginRemoveResponseSchema>;\ndeclare const pluginSettingsResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n schema: z$1.ZodRecord<z$1.ZodString, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"string\">;\n secret: z$1.ZodOptional<z$1.ZodLiteral<true>>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"boolean\">;\n default: z$1.ZodOptional<z$1.ZodBoolean>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"select\">;\n options: z$1.ZodArray<z$1.ZodString>;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project\">;\n default: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strict>], \"type\">>;\n values: z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>;\n}, z$1.core.$strip>;\ntype PluginSettingsResponse = z$1.infer<typeof pluginSettingsResponseSchema>;\ndeclare const pluginTokenResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n token: z$1.ZodString;\n}, z$1.core.$strip>;\ntype PluginTokenResponse = z$1.infer<typeof pluginTokenResponseSchema>;\ndeclare const pluginCatalogStatusSchema: z$1.ZodObject<{\n pluginCount: z$1.ZodNumber;\n includedPluginCount: z$1.ZodNumber;\n optionalPluginCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype PluginCatalogStatus = z$1.infer<typeof pluginCatalogStatusSchema>;\ndeclare const pluginCatalogSearchResultSchema: z$1.ZodObject<{\n entryId: z$1.ZodString;\n pluginId: z$1.ZodString;\n displayName: z$1.ZodString;\n description: z$1.ZodString;\n icon: z$1.ZodNullable<z$1.ZodString>;\n category: z$1.ZodString;\n source: z$1.ZodString;\n installed: z$1.ZodBoolean;\n compatible: z$1.ZodBoolean;\n incompatibleReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype PluginCatalogSearchResult$1 = z$1.infer<typeof pluginCatalogSearchResultSchema>;\n\ndeclare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{\n providers: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n displayName: z$1.ZodString;\n logoUrl: z$1.ZodNullable<z$1.ZodString>;\n capabilities: z$1.ZodObject<{\n supportsArchive: z$1.ZodBoolean;\n supportsRename: z$1.ZodBoolean;\n supportsServiceTier: z$1.ZodBoolean;\n supportsUserQuestion: z$1.ZodBoolean;\n supportsFork: z$1.ZodBoolean;\n supportedPermissionModes: z$1.ZodArray<z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>>;\n }, z$1.core.$strip>;\n composerActions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"skills\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"goal\">;\n command: z$1.ZodObject<{\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n trailingText: z$1.ZodString;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>], \"kind\">>;\n available: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n permissionCeiling: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n models: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n selectedOnlyModels: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n model: z$1.ZodString;\n displayName: z$1.ZodString;\n routeProviderId: z$1.ZodOptional<z$1.ZodString>;\n description: z$1.ZodString;\n supportedReasoningEfforts: z$1.ZodArray<z$1.ZodObject<{\n reasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n description: z$1.ZodString;\n }, z$1.core.$strip>>;\n defaultReasoningEffort: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n isDefault: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n modelLoadError: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n code: z$1.ZodEnum<{\n failed: \"failed\";\n missing_executable: \"missing_executable\";\n auth_required: \"auth_required\";\n timeout: \"timeout\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsResponse = z$1.infer<typeof systemExecutionOptionsResponseSchema>;\n/**\n * Routes provider discovery through an environment's host or an explicit\n * host. Omitting both preserves the primary-host fallback.\n */\ndeclare const systemProvidersQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemProvidersQuery = z$1.infer<typeof systemProvidersQuerySchema>;\ndeclare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodString>;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n environmentId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemExecutionOptionsQuery = z$1.infer<typeof systemExecutionOptionsQuerySchema>;\n/** Omission preserves the existing behavior of reading the primary machine. */\ndeclare const systemUsageLimitsQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemUsageLimitsQuery = z$1.infer<typeof systemUsageLimitsQuerySchema>;\ndeclare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{\n text: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVoiceTranscriptionResponse = z$1.infer<typeof systemVoiceTranscriptionResponseSchema>;\ndeclare const onboardingAgentOverviewSchema: z$1.ZodObject<{\n agents: z$1.ZodArray<z$1.ZodObject<{\n providerId: z$1.ZodString;\n displayName: z$1.ZodString;\n status: z$1.ZodEnum<{\n connected: \"connected\";\n unauthenticated: \"unauthenticated\";\n expired: \"expired\";\n not_installed: \"not_installed\";\n }>;\n planLabel: z$1.ZodNullable<z$1.ZodString>;\n accountEmail: z$1.ZodNullable<z$1.ZodString>;\n canInstall: z$1.ZodBoolean;\n loginCommand: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype OnboardingAgentOverview = z$1.infer<typeof onboardingAgentOverviewSchema>;\n/** Omission reads the primary machine, matching the usage-limits route. */\ndeclare const systemOnboardingReposQuerySchema: z$1.ZodObject<{\n hostId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemOnboardingReposQuery = z$1.infer<typeof systemOnboardingReposQuerySchema>;\n/**\n * Onboarding funnel events, reported by the app and forwarded to the server's\n * anonymous telemetry. Categorical or counts only — never paths, project names,\n * or account emails.\n */\ndeclare const onboardingTelemetryEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_started\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n detectedAgentCount: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_completed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_step_skipped\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_completed\">;\n agentState: z$1.ZodEnum<{\n connected: \"connected\";\n none: \"none\";\n signed_out: \"signed_out\";\n }>;\n projectsAdded: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n}, z$1.core.$strip>, z$1.ZodObject<{\n name: z$1.ZodLiteral<\"onboarding_dismissed\">;\n step: z$1.ZodEnum<{\n agents: \"agents\";\n projects: \"projects\";\n }>;\n}, z$1.core.$strip>], \"name\">;\ntype OnboardingTelemetryEvent = z$1.infer<typeof onboardingTelemetryEventSchema>;\ndeclare const systemConfigResponseSchema: z$1.ZodObject<{\n generalSettings: z$1.ZodObject<{\n caffeinate: z$1.ZodBoolean;\n showKeyboardHints: z$1.ZodBoolean;\n steerActiveThreadOnEnter: z$1.ZodBoolean;\n showUnhandledProviderEvents: z$1.ZodBoolean;\n codexMemoryEnabled: z$1.ZodBoolean;\n claudeCodeMemoryEnabled: z$1.ZodBoolean;\n codexSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeSubagentsDisabled: z$1.ZodBoolean;\n claudeCodeWorkflowsDisabled: z$1.ZodBoolean;\n onboardingCompletedAt: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>;\n keybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n shortcut: z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strict>>;\n defaultKeybindings: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n desktopOnly: z$1.ZodBoolean;\n when: z$1.ZodObject<{\n all: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n none: z$1.ZodArray<z$1.ZodEnum<{\n mainSurface: \"mainSurface\";\n modalOpen: \"modalOpen\";\n editableFocus: \"editableFocus\";\n terminalFocus: \"terminalFocus\";\n browserFocus: \"browserFocus\";\n modelPickerOpen: \"modelPickerOpen\";\n questionOpen: \"questionOpen\";\n promptAvailable: \"promptAvailable\";\n splitActive: \"splitActive\";\n webSurface: \"webSurface\";\n macPlatform: \"macPlatform\";\n }>>;\n }, z$1.core.$strict>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n keybindingOverrides: z$1.ZodArray<z$1.ZodObject<{\n command: z$1.ZodEnum<{\n \"thread.new\": \"thread.new\";\n \"thread.search\": \"thread.search\";\n \"thread.rename\": \"thread.rename\";\n \"thread.archive\": \"thread.archive\";\n \"thread.previous\": \"thread.previous\";\n \"thread.next\": \"thread.next\";\n \"thread.jump.1\": \"thread.jump.1\";\n \"thread.jump.2\": \"thread.jump.2\";\n \"thread.jump.3\": \"thread.jump.3\";\n \"thread.jump.4\": \"thread.jump.4\";\n \"thread.jump.5\": \"thread.jump.5\";\n \"thread.jump.6\": \"thread.jump.6\";\n \"thread.jump.7\": \"thread.jump.7\";\n \"thread.jump.8\": \"thread.jump.8\";\n \"thread.jump.9\": \"thread.jump.9\";\n \"pane.focus.previous\": \"pane.focus.previous\";\n \"pane.focus.next\": \"pane.focus.next\";\n \"pane.focus.1\": \"pane.focus.1\";\n \"pane.focus.2\": \"pane.focus.2\";\n \"pane.focus.3\": \"pane.focus.3\";\n \"pane.focus.4\": \"pane.focus.4\";\n \"pane.focus.5\": \"pane.focus.5\";\n \"pane.focus.6\": \"pane.focus.6\";\n \"pane.focus.7\": \"pane.focus.7\";\n \"pane.focus.8\": \"pane.focus.8\";\n \"pane.maximize.toggle\": \"pane.maximize.toggle\";\n \"pane.close\": \"pane.close\";\n \"window.new\": \"window.new\";\n \"settings.open\": \"settings.open\";\n \"settings.openServers\": \"settings.openServers\";\n \"sidebar.toggle\": \"sidebar.toggle\";\n \"panel.newTab\": \"panel.newTab\";\n \"panel.close\": \"panel.close\";\n \"panel.toggle\": \"panel.toggle\";\n \"file.quickOpen\": \"file.quickOpen\";\n \"diff.toggle\": \"diff.toggle\";\n \"terminal.open\": \"terminal.open\";\n \"composer.focus\": \"composer.focus\";\n \"modelPicker.toggle\": \"modelPicker.toggle\";\n \"modelPicker.cycleModel\": \"modelPicker.cycleModel\";\n \"modelPicker.cycleReasoning\": \"modelPicker.cycleReasoning\";\n \"browser.focusLocation\": \"browser.focusLocation\";\n \"browser.reload\": \"browser.reload\";\n \"workspace.openPreferred\": \"workspace.openPreferred\";\n \"question.select.1\": \"question.select.1\";\n \"question.select.2\": \"question.select.2\";\n \"question.select.3\": \"question.select.3\";\n \"question.select.4\": \"question.select.4\";\n \"question.select.5\": \"question.select.5\";\n \"question.select.6\": \"question.select.6\";\n \"question.select.7\": \"question.select.7\";\n \"question.select.8\": \"question.select.8\";\n \"question.select.9\": \"question.select.9\";\n }>;\n shortcut: z$1.ZodNullable<z$1.ZodObject<{\n key: z$1.ZodString;\n mod: z$1.ZodBoolean;\n meta: z$1.ZodBoolean;\n control: z$1.ZodBoolean;\n alt: z$1.ZodBoolean;\n shift: z$1.ZodBoolean;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n experiments: z$1.ZodRecord<z$1.ZodEnum<{\n claudeCodeMockCliTraffic: \"claudeCodeMockCliTraffic\";\n editMessages: \"editMessages\";\n newOnboarding: \"newOnboarding\";\n toolsHub: \"toolsHub\";\n }>, z$1.ZodBoolean>;\n appearance: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n customThemes: z$1.ZodArray<z$1.ZodString>;\n pluginThemes: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n featureFlags: z$1.ZodObject<{\n placeholder: z$1.ZodBoolean;\n timelineWindowEventBudget: z$1.ZodNumber;\n }, z$1.core.$strip>;\n hostDaemonPort: z$1.ZodNullable<z$1.ZodNumber>;\n serverUrl: z$1.ZodString;\n primaryHostId: z$1.ZodNullable<z$1.ZodString>;\n primaryHostPlatform: z$1.ZodNullable<z$1.ZodEnum<{\n unknown: \"unknown\";\n darwin: \"darwin\";\n linux: \"linux\";\n wsl: \"wsl\";\n }>>;\n voiceTranscriptionEnabled: z$1.ZodBoolean;\n dataDir: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemConfigResponse = z$1.infer<typeof systemConfigResponseSchema>;\ndeclare const systemAttentionResponseSchema: z$1.ZodObject<{\n hasAttention: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype SystemAttentionResponse = z$1.infer<typeof systemAttentionResponseSchema>;\n/**\n * Theme catalog: the on-disk custom-theme directory plus the discovered custom\n * themes and the active palette. Drives `bb theme list` / `bb theme dir`.\n */\ndeclare const themeCatalogResponseSchema: z$1.ZodObject<{\n dir: z$1.ZodString;\n custom: z$1.ZodArray<z$1.ZodString>;\n plugins: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n pluginId: z$1.ZodString;\n name: z$1.ZodString;\n description: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n active: z$1.ZodObject<{\n themeId: z$1.ZodString;\n customCss: z$1.ZodNullable<z$1.ZodString>;\n faviconColor: z$1.ZodEnum<{\n default: \"default\";\n red: \"red\";\n orange: \"orange\";\n yellow: \"yellow\";\n green: \"green\";\n teal: \"teal\";\n blue: \"blue\";\n purple: \"purple\";\n pink: \"pink\";\n }>;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype ThemeCatalogResponse = z$1.infer<typeof themeCatalogResponseSchema>;\ndeclare const systemVersionResponseSchema: z$1.ZodObject<{\n currentVersion: z$1.ZodString;\n latestVersion: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodLiteral<\"npm\">;\n updateAvailable: z$1.ZodBoolean;\n isDevelopment: z$1.ZodBoolean;\n upgradeCommand: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SystemVersionResponse = z$1.infer<typeof systemVersionResponseSchema>;\ndeclare const systemConfigReloadResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n}, z$1.core.$strip>;\ndeclare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{\n machines: z$1.ZodArray<z$1.ZodObject<{\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n missing: \"missing\";\n installed: \"installed\";\n outdated: \"outdated\";\n }>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype SystemCliSkillsStatusResponse = z$1.infer<typeof systemCliSkillsStatusResponseSchema>;\n/** The machines to copy the built-in bb CLI skills onto. */\ndeclare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{\n hostIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsRequest = z$1.infer<typeof systemInstallCliSkillsRequestSchema>;\n/**\n * One entry per requested machine. A machine that is offline or otherwise\n * refuses the install fails on its own without taking the others down, so the\n * caller can report exactly which machines got the skills.\n */\ndeclare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{\n results: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n installations: z$1.ZodArray<z$1.ZodObject<{\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n ok: z$1.ZodLiteral<false>;\n hostId: z$1.ZodString;\n hostName: z$1.ZodString;\n errorMessage: z$1.ZodString;\n }, z$1.core.$strip>], \"ok\">>;\n}, z$1.core.$strip>;\ntype SystemInstallCliSkillsResponse = z$1.infer<typeof systemInstallCliSkillsResponseSchema>;\ntype SystemConfigReloadResponse = z$1.infer<typeof systemConfigReloadResponseSchema>;\n\ndeclare const terminalSessionSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TerminalSession = z$1.infer<typeof terminalSessionSchema>;\ndeclare const terminalListResponseSchema: z$1.ZodObject<{\n sessions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n hostId: z$1.ZodString;\n title: z$1.ZodString;\n initialCwd: z$1.ZodString;\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n status: z$1.ZodEnum<{\n starting: \"starting\";\n disconnected: \"disconnected\";\n running: \"running\";\n exited: \"exited\";\n }>;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n closeReason: z$1.ZodNullable<z$1.ZodEnum<{\n user: \"user\";\n \"thread-deleted\": \"thread-deleted\";\n \"process-exit\": \"process-exit\";\n \"daemon-disconnect\": \"daemon-disconnect\";\n \"environment-destroyed\": \"environment-destroyed\";\n \"thread-archived\": \"thread-archived\";\n \"open-timeout\": \"open-timeout\";\n }>>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n lastUserInputAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype TerminalListResponse = z$1.infer<typeof terminalListResponseSchema>;\ndeclare const createTerminalRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n start: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"shell\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"command\">;\n command: z$1.ZodString;\n }, z$1.core.$strict>], \"mode\">>;\n target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"environment\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"host_path\">;\n hostId: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>], \"kind\">;\n title: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strict>;\ntype CreateTerminalRequest = z$1.infer<typeof createTerminalRequestSchema>;\ndeclare const updateTerminalRequestSchema: z$1.ZodObject<{\n title: z$1.ZodString;\n}, z$1.core.$strict>;\ntype UpdateTerminalRequest = z$1.infer<typeof updateTerminalRequestSchema>;\ndeclare const terminalInputRequestSchema: z$1.ZodObject<{\n dataBase64: z$1.ZodString;\n}, z$1.core.$strict>;\ntype TerminalInputRequest = z$1.infer<typeof terminalInputRequestSchema>;\ndeclare const terminalResizeRequestSchema: z$1.ZodObject<{\n cols: z$1.ZodNumber;\n rows: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype TerminalResizeRequest = z$1.infer<typeof terminalResizeRequestSchema>;\ndeclare const terminalOutputQuerySchema: z$1.ZodObject<{\n sinceSeq: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n tailBytes: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n limitChunks: z$1.ZodOptional<z$1.ZodCoercedNumber<unknown>>;\n}, z$1.core.$strict>;\ntype TerminalOutputQuery = z$1.infer<typeof terminalOutputQuerySchema>;\ndeclare const terminalOutputResponseSchema: z$1.ZodObject<{\n chunks: z$1.ZodArray<z$1.ZodObject<{\n seq: z$1.ZodNumber;\n dataBase64: z$1.ZodString;\n }, z$1.core.$strict>>;\n nextSeq: z$1.ZodNumber;\n truncated: z$1.ZodBoolean;\n}, z$1.core.$strict>;\ntype TerminalOutputResponse = z$1.infer<typeof terminalOutputResponseSchema>;\n\ndeclare const timelineRowStatusSchema: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n}>;\ntype TimelineRowStatus = z$1.infer<typeof timelineRowStatusSchema>;\ndeclare const timelineRowBaseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype TimelineRowBase = z$1.infer<typeof timelineRowBaseSchema>;\ndeclare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"user\">;\n initiator: z$1.ZodEnum<{\n user: \"user\";\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodNullable<z$1.ZodString>;\n systemMessageKind: z$1.ZodEnum<{\n \"ownership-assigned\": \"ownership-assigned\";\n \"ownership-removed\": \"ownership-removed\";\n \"child-needs-attention\": \"child-needs-attention\";\n \"child-completed\": \"child-completed\";\n \"child-failed\": \"child-failed\";\n \"child-interrupted\": \"child-interrupted\";\n \"child-outcome-batch\": \"child-outcome-batch\";\n unlabeled: \"unlabeled\";\n }>;\n systemMessageSubject: z$1.ZodNullable<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n threadName: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread-batch\">;\n count: z$1.ZodNumber;\n }, z$1.core.$strip>], \"kind\">>;\n turnRequest: z$1.ZodObject<{\n isGrouped: z$1.ZodBoolean;\n kind: z$1.ZodEnum<{\n message: \"message\";\n steer: \"steer\";\n }>;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n accepted: \"accepted\";\n }>;\n }, z$1.core.$strip>;\n mentions: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"conversation\">;\n text: z$1.ZodString;\n attachments: z$1.ZodNullable<z$1.ZodObject<{\n webImages: z$1.ZodNumber;\n localImages: z$1.ZodNumber;\n localFiles: z$1.ZodNumber;\n imageUrls: z$1.ZodArray<z$1.ZodString>;\n localImagePaths: z$1.ZodArray<z$1.ZodString>;\n localFilePaths: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n role: z$1.ZodLiteral<\"assistant\">;\n turnRequest: z$1.ZodNull;\n}, z$1.core.$strip>], \"role\">;\ntype TimelineConversationRow = z$1.infer<typeof timelineConversationRowSchema>;\ndeclare const timelineSystemRowSchema: z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodEnum<{\n error: \"error\";\n debug: \"debug\";\n reconnect: \"reconnect\";\n }>;\n}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodNullable<z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodEnum<{\n generic: \"generic\";\n compaction: \"compaction\";\n \"thread-provisioning\": \"thread-provisioning\";\n \"thread-interrupted\": \"thread-interrupted\";\n \"provider-unhandled\": \"provider-unhandled\";\n warning: \"warning\";\n deprecation: \"deprecation\";\n }>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"system\">;\n title: z$1.ZodString;\n detail: z$1.ZodNullable<z$1.ZodString>;\n systemKind: z$1.ZodLiteral<\"operation\">;\n operationKind: z$1.ZodLiteral<\"parent-change\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n parentChange: z$1.ZodObject<{\n action: z$1.ZodEnum<{\n assign: \"assign\";\n release: \"release\";\n transfer: \"transfer\";\n }>;\n previousParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n previousParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextParentThreadTitle: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>], \"operationKind\">]>;\ntype TimelineSystemRow = z$1.infer<typeof timelineSystemRowSchema>;\ninterface TimelineWorkRowBase extends TimelineRowBase {\n kind: \"work\";\n status: TimelineRowStatus;\n}\ndeclare const timelineCommandWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"command\">;\n callId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodNullable<z$1.ZodString>;\n output: z$1.ZodString;\n exitCode: z$1.ZodNullable<z$1.ZodNumber>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineCommandWorkRow = z$1.infer<typeof timelineCommandWorkRowSchema>;\ndeclare const timelineToolWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"tool\">;\n callId: z$1.ZodString;\n toolName: z$1.ZodString;\n toolArgs: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>>>;\n statusLabels: z$1.ZodOptional<z$1.ZodObject<{\n pending: z$1.ZodString;\n completed: z$1.ZodString;\n }, z$1.core.$strip>>;\n output: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n activityIntents: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"list_files\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype TimelineToolWorkRow = z$1.infer<typeof timelineToolWorkRowSchema>;\ndeclare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"file-change\">;\n callId: z$1.ZodString;\n change: z$1.ZodObject<{\n path: z$1.ZodString;\n kind: z$1.ZodNullable<z$1.ZodString>;\n movePath: z$1.ZodNullable<z$1.ZodString>;\n diff: z$1.ZodNullable<z$1.ZodString>;\n diffStats: z$1.ZodObject<{\n added: z$1.ZodNumber;\n removed: z$1.ZodNumber;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>;\n stdout: z$1.ZodNullable<z$1.ZodString>;\n stderr: z$1.ZodNullable<z$1.ZodString>;\n approvalStatus: z$1.ZodNullable<z$1.ZodEnum<{\n waiting_for_approval: \"waiting_for_approval\";\n denied: \"denied\";\n }>>;\n}, z$1.core.$strip>;\ntype TimelineFileChangeWorkRow = z$1.infer<typeof timelineFileChangeWorkRowSchema>;\ndeclare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-search\">;\n callId: z$1.ZodString;\n queries: z$1.ZodArray<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebSearchWorkRow = z$1.infer<typeof timelineWebSearchWorkRowSchema>;\ndeclare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"web-fetch\">;\n callId: z$1.ZodString;\n url: z$1.ZodString;\n prompt: z$1.ZodNullable<z$1.ZodString>;\n pattern: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWebFetchWorkRow = z$1.infer<typeof timelineWebFetchWorkRowSchema>;\ndeclare const timelineImageViewWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"image-view\">;\n callId: z$1.ZodString;\n path: z$1.ZodString;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineImageViewWorkRow = z$1.infer<typeof timelineImageViewWorkRowSchema>;\ndeclare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"file-edit\">;\n lifecycle: z$1.ZodEnum<{\n denied: \"denied\";\n waiting: \"waiting\";\n }>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"approval\">;\n interactionId: z$1.ZodString;\n target: z$1.ZodObject<{\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n approvalKind: z$1.ZodLiteral<\"permission-grant\">;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n denied: \"denied\";\n resolving: \"resolving\";\n granted: \"granted\";\n }>;\n grantScope: z$1.ZodNullable<z$1.ZodEnum<{\n turn: \"turn\";\n session: \"session\";\n }>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>], \"approvalKind\">;\ntype TimelineApprovalWorkRow = z$1.infer<typeof timelineApprovalWorkRowSchema>;\ndeclare const timelineQuestionWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"question\">;\n interactionId: z$1.ZodString;\n lifecycle: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n answered: \"answered\";\n }>;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n answers: z$1.ZodNullable<z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype TimelineQuestionWorkRow = z$1.infer<typeof timelineQuestionWorkRowSchema>;\ninterface TimelineDelegationWorkRow extends TimelineWorkRowBase {\n workKind: \"delegation\";\n callId: string;\n toolName: string;\n subagentType: string | null;\n description: string | null;\n output: string;\n completedAt: number | null;\n childRows: TimelineRow[];\n}\n/**\n * A provider background task — a dynamic workflow (Claude Code Workflow tool)\n * or a backgrounded shell command (Bash run_in_background), discriminated by\n * `taskType`. The row outlives its spawning turn: progress and terminal state\n * arrive via thread-scoped events folded into this single row. `workflow` is\n * the merged phase/agent tree, present only for workflows; null for shell\n * commands and for workflows the provider reported no progress records for\n * (degraded rendering falls back to description + summary).\n */\ndeclare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strip>;\ntype TimelineWorkflowWorkRow = z$1.infer<typeof timelineWorkflowWorkRowSchema>;\ntype TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow;\ninterface TimelineTurnRow extends TimelineRowBase {\n kind: \"turn\";\n turnId: string;\n status: TimelineRowStatus;\n summaryCount: number;\n completedAt: number | null;\n children: TimelineRow[] | null;\n}\ntype TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow;\ntype TimelineRow = TimelineSourceRow | TimelineTurnRow;\n\ndeclare const createExecutionInputSourcesSchema: z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z$1.core.$strict>;\ntype CreateExecutionInputSources = z$1.infer<typeof createExecutionInputSourcesSchema>;\ndeclare const createThreadRequestSchema: z$1.ZodObject<{\n projectId: z$1.ZodString;\n providerId: z$1.ZodOptional<z$1.ZodString>;\n origin: z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n providerId: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"reuse\">;\n environmentId: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"host\">;\n hostId: z$1.ZodOptional<z$1.ZodString>;\n workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unmanaged\">;\n path: z$1.ZodNullable<z$1.ZodString>;\n branch: z$1.ZodOptional<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"existing\">;\n name: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"new\">;\n baseBranch: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"managed-worktree\">;\n baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"named\">;\n name: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"default\">;\n }, z$1.core.$strip>], \"kind\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"personal\">;\n }, z$1.core.$strip>], \"type\">;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"project-default\">;\n }, z$1.core.$strip>], \"type\">;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n startedOnBehalfOf: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodObject<{\n initiator: z$1.ZodEnum<{\n agent: \"agent\";\n system: \"system\";\n }>;\n senderThreadId: z$1.ZodString;\n }, z$1.core.$strip>>>;\n originKind: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n childOrigin: z$1.ZodDefault<z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>>;\n}, z$1.core.$strip>;\ntype CreateThreadRequest = z$1.infer<typeof createThreadRequestSchema>;\ndeclare const forkThreadRequestSchema: z$1.ZodObject<{\n sourceThreadId: z$1.ZodString;\n sourceSeqEnd: z$1.ZodOptional<z$1.ZodNumber>;\n input: z$1.ZodOptional<z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>>;\n agentContextSeed: z$1.ZodOptional<z$1.ZodArray<z$1.ZodIntersection<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">, z$1.ZodObject<{\n visibility: z$1.ZodLiteral<\"agent-only\">;\n }, z$1.core.$strip>>>>;\n title: z$1.ZodOptional<z$1.ZodString>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n visibility: z$1.ZodDefault<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n workspace: z$1.ZodDefault<z$1.ZodEnum<{\n reuse: \"reuse\";\n isolated: \"isolated\";\n }>>;\n origin: z$1.ZodDefault<z$1.ZodEnum<{\n plugin: \"plugin\";\n app: \"app\";\n cli: \"cli\";\n sdk: \"sdk\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ForkThreadRequest = z$1.infer<typeof forkThreadRequestSchema>;\ndeclare const sendMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n start: \"start\";\n auto: \"auto\";\n \"queue-if-active\": \"queue-if-active\";\n \"steer-if-active\": \"steer-if-active\";\n }>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype SendMessageRequest = z$1.infer<typeof sendMessageRequestSchema>;\ndeclare const providerRateLimitRecoveryStatusSchema: z$1.ZodObject<{\n reason: z$1.ZodEnum<{\n eligible: \"eligible\";\n \"thread-not-failed\": \"thread-not-failed\";\n \"no-failed-turn\": \"no-failed-turn\";\n \"input-not-accepted\": \"input-not-accepted\";\n \"no-rate-limit-state\": \"no-rate-limit-state\";\n \"no-terminal-rate-limit-error\": \"no-terminal-rate-limit-error\";\n \"provider-will-retry\": \"provider-will-retry\";\n \"manual-only\": \"manual-only\";\n \"output-or-side-effect-observed\": \"output-or-side-effect-observed\";\n superseded: \"superseded\";\n \"execution-unavailable\": \"execution-unavailable\";\n }>;\n scopeKey: z$1.ZodString;\n hostId: z$1.ZodString;\n rateLimits: z$1.ZodNullable<z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>>;\n candidate: z$1.ZodNullable<z$1.ZodObject<{\n failedRequestId: z$1.ZodString;\n turnId: z$1.ZodString;\n automatic: z$1.ZodBoolean;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n rateLimits: z$1.ZodObject<{\n providerId: z$1.ZodString;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n kind: z$1.ZodEnum<{\n unknown: \"unknown\";\n \"subscription-window\": \"subscription-window\";\n credits: \"credits\";\n \"spend-control\": \"spend-control\";\n }>;\n windows: z$1.ZodArray<z$1.ZodObject<{\n providerKey: z$1.ZodNullable<z$1.ZodString>;\n label: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n unknown: \"unknown\";\n warning: \"warning\";\n allowed: \"allowed\";\n blocked: \"blocked\";\n }>;\n resetsAtMs: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n reachedReason: z$1.ZodNullable<z$1.ZodString>;\n overageStatus: z$1.ZodNullable<z$1.ZodEnum<{\n warning: \"warning\";\n allowed: \"allowed\";\n rejected: \"rejected\";\n unavailable: \"unavailable\";\n }>>;\n overageReason: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ProviderRateLimitRecoveryStatus = z$1.infer<typeof providerRateLimitRecoveryStatusSchema>;\ndeclare const continueAfterProviderRateLimitResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n requestId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ContinueAfterProviderRateLimitResponse = z$1.infer<typeof continueAfterProviderRateLimitResponseSchema>;\ndeclare const editMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n operationId: z$1.ZodString;\n expectedRequestSequence: z$1.ZodOptional<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype EditMessageRequest = z$1.infer<typeof editMessageRequestSchema>;\ndeclare const editMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n operationId: z$1.ZodString;\n requestSequence: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype EditMessageResponse = z$1.infer<typeof editMessageResponseSchema>;\ndeclare const createQueuedMessageRequestSchema: z$1.ZodObject<{\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodOptional<z$1.ZodString>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodPipe<z$1.ZodUnion<readonly [z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>, z$1.ZodLiteral<\"workspace-write\">]>, z$1.ZodTransform<\"auto\" | \"accept-edits\" | \"full\", \"auto\" | \"accept-edits\" | \"full\" | \"workspace-write\">>>;\n executionInputSources: z$1.ZodOptional<z$1.ZodObject<{\n model: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z$1.ZodOptional<z$1.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n }, z$1.core.$strict>>;\n senderThreadId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype CreateQueuedMessageRequest = z$1.infer<typeof createQueuedMessageRequestSchema>;\ndeclare const updateQueuedMessageRequestSchema: z$1.ZodObject<{\n expectedUpdatedAt: z$1.ZodNumber;\n input: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n}, z$1.core.$strip>;\ntype UpdateQueuedMessageRequest = z$1.infer<typeof updateQueuedMessageRequestSchema>;\ndeclare const sendQueuedMessageRequestSchema: z$1.ZodObject<{\n mode: z$1.ZodEnum<{\n steer: \"steer\";\n auto: \"auto\";\n }>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageRequest = z$1.infer<typeof sendQueuedMessageRequestSchema>;\ndeclare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{\n previousQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n nextQueuedMessageId: z$1.ZodNullable<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderQueuedMessageRequest = z$1.infer<typeof reorderQueuedMessageRequestSchema>;\ndeclare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{\n expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray<z$1.ZodString>;\n groupBoundaryQueuedMessageId: z$1.ZodString;\n}, z$1.core.$strip>;\ntype SetQueuedMessageGroupBoundaryRequest = z$1.infer<typeof setQueuedMessageGroupBoundaryRequestSchema>;\ndeclare const sendQueuedMessageResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n queuedMessage: z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>;\n}, z$1.core.$strip>;\ntype SendQueuedMessageResponse = z$1.infer<typeof sendQueuedMessageResponseSchema>;\ndeclare const threadListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n}, z$1.core.$strip>>;\ntype ThreadListResponse = z$1.infer<typeof threadListResponseSchema>;\ndeclare const threadSearchResponseSchema: z$1.ZodObject<{\n active: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n archived: z$1.ZodObject<{\n total: z$1.ZodNumber;\n results: z$1.ZodArray<z$1.ZodObject<{\n thread: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activity: z$1.ZodObject<{\n activeWorkflowCount: z$1.ZodNumber;\n activeBackgroundAgentCount: z$1.ZodNumber;\n activeBackgroundCommandCount: z$1.ZodNumber;\n activePlanModeCount: z$1.ZodNumber;\n activeGoalCount: z$1.ZodNumber;\n }, z$1.core.$strip>;\n pinSortKey: z$1.ZodNullable<z$1.ZodString>;\n hasPendingInteraction: z$1.ZodBoolean;\n environmentHostId: z$1.ZodNullable<z$1.ZodString>;\n environmentName: z$1.ZodNullable<z$1.ZodString>;\n environmentBranchName: z$1.ZodNullable<z$1.ZodString>;\n environmentWorkspaceDisplayKind: z$1.ZodEnum<{\n \"managed-worktree\": \"managed-worktree\";\n \"unmanaged-worktree\": \"unmanaged-worktree\";\n other: \"other\";\n }>;\n }, z$1.core.$strip>;\n matches: z$1.ZodArray<z$1.ZodObject<{\n sourceKind: z$1.ZodEnum<{\n title: \"title\";\n title_fallback: \"title_fallback\";\n user_message: \"user_message\";\n assistant_message: \"assistant_message\";\n system_message: \"system_message\";\n }>;\n text: z$1.ZodString;\n highlightRanges: z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n sourceSeq: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n}, z$1.core.$strict>;\ntype ThreadSearchResponse = z$1.infer<typeof threadSearchResponseSchema>;\ndeclare const threadResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype ThreadResponse = z$1.infer<typeof threadResponseSchema>;\ndeclare const threadGetQuerySchema: z$1.ZodObject<{\n include: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadGetQuery = z$1.infer<typeof threadGetQuerySchema>;\ndeclare const threadWithIncludesResponseSchema: z$1.ZodObject<{\n id: z$1.ZodString;\n projectId: z$1.ZodString;\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n providerId: z$1.ZodString;\n title: z$1.ZodNullable<z$1.ZodString>;\n titleFallback: z$1.ZodNullable<z$1.ZodString>;\n sectionId: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n }>;\n parentThreadId: z$1.ZodNullable<z$1.ZodString>;\n sourceThreadId: z$1.ZodNullable<z$1.ZodString>;\n originKind: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n childOrigin: z$1.ZodNullable<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodNullable<z$1.ZodString>;\n visibility: z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>;\n archivedAt: z$1.ZodNullable<z$1.ZodNumber>;\n pinnedAt: z$1.ZodNullable<z$1.ZodNumber>;\n deletedAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastReadAt: z$1.ZodNullable<z$1.ZodNumber>;\n latestAttentionAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n runtime: z$1.ZodObject<{\n displayStatus: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n stopping: \"stopping\";\n idle: \"idle\";\n starting: \"starting\";\n active: \"active\";\n \"host-reconnecting\": \"host-reconnecting\";\n \"waiting-for-host\": \"waiting-for-host\";\n }>;\n hostReconnectGraceExpiresAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>;\n activeBackgroundAgentCount: z$1.ZodNumber;\n canSpawnChild: z$1.ZodBoolean;\n environment: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodNullable<z$1.ZodString>;\n projectId: z$1.ZodString;\n hostId: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n managed: z$1.ZodBoolean;\n isGitRepo: z$1.ZodBoolean;\n isWorktree: z$1.ZodBoolean;\n workspaceProvisionType: z$1.ZodEnum<{\n unmanaged: \"unmanaged\";\n \"managed-worktree\": \"managed-worktree\";\n personal: \"personal\";\n }>;\n branchName: z$1.ZodNullable<z$1.ZodString>;\n baseBranch: z$1.ZodNullable<z$1.ZodString>;\n defaultBranch: z$1.ZodNullable<z$1.ZodString>;\n mergeBaseBranch: z$1.ZodNullable<z$1.ZodString>;\n status: z$1.ZodEnum<{\n error: \"error\";\n provisioning: \"provisioning\";\n ready: \"ready\";\n retiring: \"retiring\";\n destroying: \"destroying\";\n destroyed: \"destroyed\";\n }>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n host: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n name: z$1.ZodString;\n type: z$1.ZodEnum<{\n persistent: \"persistent\";\n }>;\n status: z$1.ZodEnum<{\n disconnected: \"disconnected\";\n connected: \"connected\";\n }>;\n maxPermissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n lastSeenAt: z$1.ZodNullable<z$1.ZodNumber>;\n lastRejectedProtocolVersion: z$1.ZodNullable<z$1.ZodNumber>;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>>;\n}, z$1.core.$strip>;\ntype ThreadWithIncludesResponse = z$1.infer<typeof threadWithIncludesResponseSchema>;\ndeclare const threadPendingInteractionsResponseSchema: z$1.ZodArray<z$1.ZodUnion<readonly [z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodString;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n origin: z$1.ZodOptional<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"provider\">;\n providerId: z$1.ZodString;\n providerThreadId: z$1.ZodString;\n providerRequestId: z$1.ZodString;\n }, z$1.core.$strip>>;\n payload: z$1.ZodUnion<readonly [z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"approval\">;\n subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n itemId: z$1.ZodString;\n command: z$1.ZodString;\n cwd: z$1.ZodNullable<z$1.ZodString>;\n actions: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n type: z$1.ZodLiteral<\"read\">;\n command: z$1.ZodString;\n name: z$1.ZodString;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"listFiles\">;\n command: z$1.ZodString;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"search\">;\n command: z$1.ZodString;\n query: z$1.ZodNullable<z$1.ZodString>;\n path: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n type: z$1.ZodLiteral<\"unknown\">;\n command: z$1.ZodString;\n }, z$1.core.$strip>], \"type\">>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"file_change\">;\n itemId: z$1.ZodString;\n writeScope: z$1.ZodNullable<z$1.ZodString>;\n sessionGrant: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"permission_grant\">;\n itemId: z$1.ZodString;\n toolName: z$1.ZodNullable<z$1.ZodString>;\n permissions: z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plan\">;\n itemId: z$1.ZodString;\n plan: z$1.ZodString;\n planFilePath: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>], \"kind\">;\n reason: z$1.ZodNullable<z$1.ZodString>;\n availableDecisions: z$1.ZodArray<z$1.ZodEnum<{\n allow_once: \"allow_once\";\n allow_for_session: \"allow_for_session\";\n deny: \"deny\";\n }>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_question\">;\n questions: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n prompt: z$1.ZodString;\n shortLabel: z$1.ZodOptional<z$1.ZodString>;\n multiSelect: z$1.ZodBoolean;\n options: z$1.ZodOptional<z$1.ZodArray<z$1.ZodObject<{\n value: z$1.ZodString;\n label: z$1.ZodString;\n description: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>>;\n allowFreeText: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>;\n resolution: z$1.ZodNullable<z$1.ZodUnion<readonly [z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_once\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"allow_for_session\">;\n grantedPermissions: z$1.ZodNullable<z$1.ZodObject<{\n network: z$1.ZodNullable<z$1.ZodObject<{\n enabled: z$1.ZodNullable<z$1.ZodBoolean>;\n }, z$1.core.$strip>>;\n fileSystem: z$1.ZodNullable<z$1.ZodObject<{\n read: z$1.ZodArray<z$1.ZodString>;\n write: z$1.ZodArray<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strict>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n decision: z$1.ZodLiteral<\"deny\">;\n }, z$1.core.$strip>], \"decision\">, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"user_answer\">;\n answers: z$1.ZodRecord<z$1.ZodString, z$1.ZodObject<{\n selected: z$1.ZodArray<z$1.ZodString>;\n freeText: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>]>>;\n}, z$1.core.$strip>, z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n interrupted: \"interrupted\";\n resolving: \"resolving\";\n resolved: \"resolved\";\n }>;\n statusReason: z$1.ZodNullable<z$1.ZodString>;\n createdAt: z$1.ZodNumber;\n expiresAt: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodNumber>>;\n resolvedAt: z$1.ZodNullable<z$1.ZodNumber>;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n origin: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n rendererId: z$1.ZodString;\n }, z$1.core.$strip>;\n payload: z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n title: z$1.ZodString;\n data: z$1.ZodType<JsonValue$1, unknown, z$1.core.$ZodTypeInternals<JsonValue$1, unknown>>;\n }, z$1.core.$strip>;\n resolution: z$1.ZodNullable<z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin_submitted\">;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>]>>;\ntype ThreadPendingInteractionsResponse = z$1.infer<typeof threadPendingInteractionsResponseSchema>;\ndeclare const threadQueuedMessageListResponseSchema: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n content: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"text\">;\n text: z$1.ZodString;\n mentions: z$1.ZodDefault<z$1.ZodArray<z$1.ZodObject<{\n start: z$1.ZodNumber;\n end: z$1.ZodNumber;\n resource: z$1.ZodPipe<z$1.ZodTransform<unknown, unknown>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"thread\">;\n threadId: z$1.ZodString;\n projectId: z$1.ZodOptional<z$1.ZodString>;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"project\">;\n projectId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"section\">;\n sectionId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"path\">;\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"command\">;\n trigger: z$1.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z$1.ZodString;\n source: z$1.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z$1.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z$1.ZodString;\n argumentHint: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"plugin\">;\n pluginId: z$1.ZodString;\n icon: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n itemId: z$1.ZodString;\n label: z$1.ZodString;\n }, z$1.core.$strip>], \"kind\">>;\n }, z$1.core.$strip>>>;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"image\">;\n url: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localImage\">;\n path: z$1.ZodString;\n }, z$1.core.$strip>, z$1.ZodObject<{\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z$1.ZodLiteral<\"localFile\">;\n path: z$1.ZodString;\n name: z$1.ZodOptional<z$1.ZodString>;\n sizeBytes: z$1.ZodOptional<z$1.ZodNumber>;\n mimeType: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>], \"type\">>;\n model: z$1.ZodString;\n reasoningLevel: z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>;\n permissionMode: z$1.ZodEnum<{\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n full: \"full\";\n }>;\n serviceTier: z$1.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n }>;\n groupWithNext: z$1.ZodBoolean;\n createdAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n}, z$1.core.$strip>>;\ntype ThreadQueuedMessageListResponse = z$1.infer<typeof threadQueuedMessageListResponseSchema>;\ndeclare const threadChildSummaryResponseSchema: z$1.ZodObject<{\n nonDeletedChildCount: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadChildSummaryResponse = z$1.infer<typeof threadChildSummaryResponseSchema>;\ndeclare const deleteThreadRequestSchema: z$1.ZodObject<{\n childThreadsConfirmed: z$1.ZodBoolean;\n}, z$1.core.$strip>;\ntype DeleteThreadRequest = z$1.infer<typeof deleteThreadRequestSchema>;\ndeclare const updateThreadRequestSchema: z$1.ZodObject<{\n title: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n sectionId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n parentThreadId: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n model: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodString>>;\n reasoningLevel: z$1.ZodOptional<z$1.ZodNullable<z$1.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n }>>>;\n visibility: z$1.ZodOptional<z$1.ZodEnum<{\n visible: \"visible\";\n hidden: \"hidden\";\n }>>;\n}, z$1.core.$strip>;\ntype UpdateThreadRequest = z$1.infer<typeof updateThreadRequestSchema>;\ndeclare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{\n previousThreadId: z$1.ZodNullable<z$1.ZodString>;\n nextThreadId: z$1.ZodNullable<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ReorderPinnedThreadRequest = z$1.infer<typeof reorderPinnedThreadRequestSchema>;\n/**\n * Requested placement for a thread opened in the app's split layout. Edge\n * placements add panes through the eighth pane; at the cap they replace the\n * focused pane. `replace` always replaces the focused pane.\n */\ndeclare const threadOpenSplitSchema: z$1.ZodEnum<{\n right: \"right\";\n down: \"down\";\n left: \"left\";\n top: \"top\";\n replace: \"replace\";\n}>;\ntype ThreadOpenSplit = z$1.infer<typeof threadOpenSplitSchema>;\n/** Optional secondary-panel file to open with a thread. */\ndeclare const threadOpenFileSchema: z$1.ZodObject<{\n source: z$1.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n path: z$1.ZodString;\n lineNumber: z$1.ZodNullable<z$1.ZodNumber>;\n}, z$1.core.$strict>;\ntype ThreadOpenFile = z$1.infer<typeof threadOpenFileSchema>;\n/** Response for POST /threads/:id/open: how many connected clients received it. */\ndeclare const threadOpenResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadOpenResponse = z$1.infer<typeof threadOpenResponseSchema>;\n/** Presentation action for one thread pane in each connected app window. */\ndeclare const threadPaneActionSchema: z$1.ZodEnum<{\n maximize: \"maximize\";\n restore: \"restore\";\n toggle: \"toggle\";\n}>;\ntype ThreadPaneAction = z$1.infer<typeof threadPaneActionSchema>;\n/** Number of connected app clients that received the pane action. */\ndeclare const threadPaneActionResponseSchema: z$1.ZodObject<{\n delivered: z$1.ZodNumber;\n}, z$1.core.$strip>;\ntype ThreadPaneActionResponse = z$1.infer<typeof threadPaneActionResponseSchema>;\ndeclare const threadArchiveAllResponseSchema: z$1.ZodObject<{\n ok: z$1.ZodLiteral<true>;\n archivedThreadIds: z$1.ZodArray<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadArchiveAllResponse = z$1.infer<typeof threadArchiveAllResponseSchema>;\ndeclare const threadListQuerySchema: z$1.ZodObject<{\n projectId: z$1.ZodOptional<z$1.ZodString>;\n parentThreadId: z$1.ZodOptional<z$1.ZodString>;\n sourceThreadId: z$1.ZodOptional<z$1.ZodString>;\n archived: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n sectionId: z$1.ZodOptional<z$1.ZodString>;\n unsectioned: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n hasParent: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n originKind: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n originPluginId: z$1.ZodOptional<z$1.ZodString>;\n childOrigin: z$1.ZodOptional<z$1.ZodEnum<{\n fork: \"fork\";\n }>>;\n includeHidden: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n offset: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadListQuery = z$1.infer<typeof threadListQuerySchema>;\ndeclare const threadSearchQuerySchema: z$1.ZodObject<{\n query: z$1.ZodString;\n limitPerGroup: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadSearchQuery = z$1.infer<typeof threadSearchQuerySchema>;\ndeclare const threadTimelineQuerySchema: z$1.ZodObject<{\n includeNestedRows: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n segmentLimit: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorSeq: z$1.ZodOptional<z$1.ZodString>;\n beforeAnchorId: z$1.ZodOptional<z$1.ZodString>;\n summaryOnly: z$1.ZodOptional<z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>>;\n afterSequence: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadTimelineQuery = z$1.infer<typeof threadTimelineQuerySchema>;\ndeclare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{\n turnId: z$1.ZodString;\n sourceSeqStart: z$1.ZodString;\n sourceSeqEnd: z$1.ZodString;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsQuery = z$1.infer<typeof timelineTurnSummaryDetailsQuerySchema>;\ndeclare const threadStorageFilesQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n}, z$1.core.$strip>;\ntype ThreadStorageFilesQuery = z$1.infer<typeof threadStorageFilesQuerySchema>;\ndeclare const threadStoragePathsQuerySchema: z$1.ZodObject<{\n query: z$1.ZodOptional<z$1.ZodString>;\n limit: z$1.ZodOptional<z$1.ZodString>;\n includeFiles: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n includeDirectories: z$1.ZodEnum<{\n true: \"true\";\n false: \"false\";\n }>;\n}, z$1.core.$strip>;\ntype ThreadStoragePathsQuery = z$1.infer<typeof threadStoragePathsQuerySchema>;\ndeclare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n}, z$1.core.$strip>;\ntype TimelineTurnSummaryDetailsResponse = z$1.infer<typeof timelineTurnSummaryDetailsResponseSchema>;\ndeclare const threadTimelineResponseSchema: z$1.ZodObject<{\n rows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n activePromptMode: z$1.ZodNullable<z$1.ZodObject<{\n mode: z$1.ZodLiteral<\"plan\">;\n providerId: z$1.ZodEnum<{\n \"claude-code\": \"claude-code\";\n codex: \"codex\";\n }>;\n prompt: z$1.ZodString;\n }, z$1.core.$strict>>;\n activeThinking: z$1.ZodNullable<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n startedAt: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n activeWorkflows: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n activeBackgroundCommands: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n threadId: z$1.ZodString;\n turnId: z$1.ZodNullable<z$1.ZodString>;\n sourceSeqStart: z$1.ZodNumber;\n sourceSeqEnd: z$1.ZodNumber;\n startedAt: z$1.ZodNumber;\n createdAt: z$1.ZodNumber;\n kind: z$1.ZodLiteral<\"work\">;\n status: z$1.ZodEnum<{\n error: \"error\";\n pending: \"pending\";\n completed: \"completed\";\n interrupted: \"interrupted\";\n }>;\n workKind: z$1.ZodLiteral<\"workflow\">;\n itemId: z$1.ZodString;\n taskType: z$1.ZodString;\n workflowName: z$1.ZodNullable<z$1.ZodString>;\n description: z$1.ZodString;\n taskStatus: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n running: \"running\";\n paused: \"paused\";\n failed: \"failed\";\n killed: \"killed\";\n stopped: \"stopped\";\n }>;\n workflow: z$1.ZodNullable<z$1.ZodObject<{\n phases: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n title: z$1.ZodString;\n kind: z$1.ZodOptional<z$1.ZodString>;\n }, z$1.core.$strip>>;\n agents: z$1.ZodArray<z$1.ZodObject<{\n index: z$1.ZodNumber;\n label: z$1.ZodString;\n state: z$1.ZodEnum<{\n running: \"running\";\n failed: \"failed\";\n queued: \"queued\";\n done: \"done\";\n skipped: \"skipped\";\n }>;\n model: z$1.ZodString;\n attempt: z$1.ZodNumber;\n cached: z$1.ZodBoolean;\n lastProgressAt: z$1.ZodNumber;\n phaseIndex: z$1.ZodOptional<z$1.ZodNumber>;\n phaseTitle: z$1.ZodOptional<z$1.ZodString>;\n agentType: z$1.ZodOptional<z$1.ZodString>;\n isolation: z$1.ZodOptional<z$1.ZodString>;\n queuedAt: z$1.ZodOptional<z$1.ZodNumber>;\n startedAt: z$1.ZodOptional<z$1.ZodNumber>;\n lastToolName: z$1.ZodOptional<z$1.ZodString>;\n lastToolSummary: z$1.ZodOptional<z$1.ZodString>;\n promptPreview: z$1.ZodOptional<z$1.ZodString>;\n resultPreview: z$1.ZodOptional<z$1.ZodString>;\n error: z$1.ZodOptional<z$1.ZodString>;\n tokens: z$1.ZodOptional<z$1.ZodNumber>;\n toolCalls: z$1.ZodOptional<z$1.ZodNumber>;\n durationMs: z$1.ZodOptional<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n usage: z$1.ZodNullable<z$1.ZodObject<{\n totalTokens: z$1.ZodNumber;\n toolUses: z$1.ZodNumber;\n durationMs: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n summary: z$1.ZodNullable<z$1.ZodString>;\n error: z$1.ZodNullable<z$1.ZodString>;\n completedAt: z$1.ZodNullable<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n pendingTodos: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n text: z$1.ZodString;\n status: z$1.ZodEnum<{\n pending: \"pending\";\n completed: \"completed\";\n in_progress: \"in_progress\";\n }>;\n }, z$1.core.$strip>>;\n }, z$1.core.$strip>>;\n goal: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n updatedAt: z$1.ZodNumber;\n objective: z$1.ZodString;\n status: z$1.ZodEnum<{\n active: \"active\";\n paused: \"paused\";\n budgetLimited: \"budgetLimited\";\n complete: \"complete\";\n }>;\n tokenBudget: z$1.ZodNullable<z$1.ZodNumber>;\n tokensUsed: z$1.ZodNumber;\n timeUsedSeconds: z$1.ZodNumber;\n }, z$1.core.$strip>>;\n modelFallback: z$1.ZodNullable<z$1.ZodObject<{\n sourceSeq: z$1.ZodNumber;\n detectedAt: z$1.ZodNumber;\n originalModel: z$1.ZodString;\n fallbackModel: z$1.ZodString;\n reason: z$1.ZodEnum<{\n refusal: \"refusal\";\n provider: \"provider\";\n }>;\n message: z$1.ZodString;\n }, z$1.core.$strip>>;\n contextWindowUsage: z$1.ZodOptional<z$1.ZodObject<{\n usedTokens: z$1.ZodNumber;\n modelContextWindow: z$1.ZodNumber;\n estimated: z$1.ZodBoolean;\n }, z$1.core.$strip>>;\n timelinePage: z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n latest: \"latest\";\n older: \"older\";\n }>;\n segmentLimit: z$1.ZodNumber;\n returnedSegmentCount: z$1.ZodNumber;\n hasOlderRows: z$1.ZodBoolean;\n olderCursor: z$1.ZodNullable<z$1.ZodObject<{\n anchorSeq: z$1.ZodNumber;\n anchorId: z$1.ZodString;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>;\n maxSeq: z$1.ZodNumber;\n delta: z$1.ZodOptional<z$1.ZodObject<{\n upsertRows: z$1.ZodArray<z$1.ZodType<TimelineRow, unknown, z$1.core.$ZodTypeInternals<TimelineRow, unknown>>>;\n rowOrder: z$1.ZodOptional<z$1.ZodArray<z$1.ZodString>>;\n }, z$1.core.$strip>>;\n}, z$1.core.$strip>;\ntype ThreadTimelineResponse = z$1.infer<typeof threadTimelineResponseSchema>;\ndeclare const threadConversationOutlineResponseSchema: z$1.ZodObject<{\n items: z$1.ZodArray<z$1.ZodObject<{\n id: z$1.ZodString;\n role: z$1.ZodEnum<{\n user: \"user\";\n assistant: \"assistant\";\n }>;\n preview: z$1.ZodString;\n attachmentSummary: z$1.ZodNullable<z$1.ZodObject<{\n imageCount: z$1.ZodNumber;\n fileCount: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n }, z$1.core.$strict>>;\n maxSeq: z$1.ZodNumber;\n}, z$1.core.$strict>;\ntype ThreadConversationOutlineResponse = z$1.infer<typeof threadConversationOutlineResponseSchema>;\ndeclare const threadStorageFileListResponseSchema: z$1.ZodObject<{\n files: z$1.ZodArray<z$1.ZodObject<{\n path: z$1.ZodString;\n name: z$1.ZodString;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStorageFileListResponse = z$1.infer<typeof threadStorageFileListResponseSchema>;\ndeclare const threadStoragePathListResponseSchema: z$1.ZodObject<{\n paths: z$1.ZodArray<z$1.ZodObject<{\n kind: z$1.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z$1.ZodString;\n name: z$1.ZodString;\n score: z$1.ZodNumber;\n positions: z$1.ZodArray<z$1.ZodNumber>;\n }, z$1.core.$strip>>;\n truncated: z$1.ZodBoolean;\n storageRootPath: z$1.ZodString;\n}, z$1.core.$strip>;\ntype ThreadStoragePathListResponse = z$1.infer<typeof threadStoragePathListResponseSchema>;\n\ndeclare const threadTabsResponseSchema: z$1.ZodObject<{\n revision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype ThreadTabsResponse = z$1.infer<typeof threadTabsResponseSchema>;\ndeclare const updateThreadTabsRequestSchema: z$1.ZodObject<{\n expectedRevision: z$1.ZodNumber;\n tabs: z$1.ZodArray<z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"thread-info\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"git-diff\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n actionId: z$1.ZodString;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"plugin-panel\">;\n paramsJson: z$1.ZodNullable<z$1.ZodString>;\n pluginId: z$1.ZodString;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"workspace-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n projectId: z$1.ZodNullable<z$1.ZodString>;\n source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"working-tree\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"head\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n kind: z$1.ZodLiteral<\"merge-base\">;\n ref: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">;\n statusLabel: z$1.ZodNullable<z$1.ZodLiteral<\"deleted\">>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"host-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n isPinned: z$1.ZodBoolean;\n kind: z$1.ZodLiteral<\"thread-storage-file-preview\">;\n lineRange: z$1.ZodNullable<z$1.ZodObject<{\n endLineNumber: z$1.ZodNumber;\n startLineNumber: z$1.ZodNumber;\n }, z$1.core.$strict>>;\n path: z$1.ZodString;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n }, z$1.core.$strict>, z$1.ZodObject<{\n environmentId: z$1.ZodNullable<z$1.ZodString>;\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"browser\">;\n title: z$1.ZodNullable<z$1.ZodString>;\n url: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"new-tab\">;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"side-chat\">;\n sourceMessageText: z$1.ZodString;\n sourceSeqEnd: z$1.ZodNullable<z$1.ZodNumber>;\n threadId: z$1.ZodNullable<z$1.ZodString>;\n title: z$1.ZodString;\n }, z$1.core.$strict>, z$1.ZodObject<{\n id: z$1.ZodString;\n kind: z$1.ZodLiteral<\"terminal\">;\n terminalId: z$1.ZodString;\n }, z$1.core.$strict>], \"kind\">>;\n}, z$1.core.$strict>;\ntype UpdateThreadTabsRequest = z$1.infer<typeof updateThreadTabsRequestSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\n/** Define a shared RPC contract while preserving exact method/schema types. */\ndeclare function defineRpcContract<const Contract extends PluginRpcContract>(contract: Contract): Contract;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ninterface EnvironmentActionArgs {\n environmentId: string;\n}\ninterface EnvironmentGetArgs extends EnvironmentActionArgs {\n signal?: AbortSignal;\n}\ntype EnvironmentMergeBaseBranchUpdateValue = Exclude<UpdateEnvironmentRequest[\"mergeBaseBranch\"], undefined>;\ntype EnvironmentNameUpdateValue = Exclude<UpdateEnvironmentRequest[\"name\"], undefined>;\ninterface EnvironmentMergeBaseBranchUpdate {\n mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue;\n name?: EnvironmentNameUpdateValue;\n}\ninterface EnvironmentNameUpdate {\n mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue;\n name: EnvironmentNameUpdateValue;\n}\ntype EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate;\ntype EnvironmentUpdateArgs = EnvironmentUpdateFields & {\n environmentId: string;\n};\ninterface EnvironmentStatusArgs extends EnvironmentStatusQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentDiffArgs = EnvironmentDiffQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ntype EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ninterface EnvironmentCommitArgs {\n environmentId: string;\n}\ninterface EnvironmentSquashMergeArgs {\n environmentId: string;\n mergeBaseBranch: string;\n}\ninterface EnvironmentPullRequestMergeArgs {\n environmentId: string;\n method: PullRequestMergeMethod;\n}\ntype EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & {\n environmentId: string;\n signal?: AbortSignal;\n};\ninterface EnvironmentPathsArgs extends EnvironmentPathsQuery {\n environmentId: string;\n signal?: AbortSignal;\n}\ntype EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse;\ntype EnvironmentCommitResult = CommitActionResponse;\ntype EnvironmentDiffResult = EnvironmentDiffResponse;\ntype EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse;\ntype EnvironmentDiffFileResult = EnvironmentDiffFileResponse;\ntype EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse;\ntype EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse;\ntype EnvironmentGetResult = Environment;\ntype EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse;\ntype EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse;\ntype EnvironmentMergePullRequestResult = PullRequestMergeActionResponse;\ntype EnvironmentPathsResult = WorkspacePathListResponse;\ntype EnvironmentPullRequestResult = EnvironmentPullRequestResponse;\ntype EnvironmentSquashMergeResult = SquashMergeActionResponse;\ntype EnvironmentStatusResult = EnvironmentStatusResponse;\ntype EnvironmentUpdateResult = Environment;\ninterface EnvironmentsArea {\n archiveThreads(args: EnvironmentActionArgs): Promise<EnvironmentArchiveThreadsResult>;\n commit(args: EnvironmentCommitArgs): Promise<EnvironmentCommitResult>;\n diff(args: EnvironmentDiffArgs): Promise<EnvironmentDiffResult>;\n diffBranches(args: EnvironmentDiffBranchesArgs): Promise<EnvironmentDiffBranchesResult>;\n diffFile(args: EnvironmentDiffFileArgs): Promise<EnvironmentDiffFileResult>;\n diffFiles(args: EnvironmentDiffArgs): Promise<EnvironmentDiffFilesResult>;\n diffPatch(args: EnvironmentDiffPatchArgs): Promise<EnvironmentDiffPatchResult>;\n get(args: EnvironmentGetArgs): Promise<EnvironmentGetResult>;\n pullRequest(args: EnvironmentGetArgs): Promise<EnvironmentPullRequestResult>;\n markPullRequestDraft(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestDraftResult>;\n markPullRequestReady(args: EnvironmentActionArgs): Promise<EnvironmentMarkPullRequestReadyResult>;\n mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise<EnvironmentMergePullRequestResult>;\n paths(args: EnvironmentPathsArgs): Promise<EnvironmentPathsResult>;\n squashMerge(args: EnvironmentSquashMergeArgs): Promise<EnvironmentSquashMergeResult>;\n status(args: EnvironmentStatusArgs): Promise<EnvironmentStatusResult>;\n update(args: EnvironmentUpdateArgs): Promise<EnvironmentUpdateResult>;\n}\n\n/**\n * Host file primitives. `hostId` may be omitted to target the server's\n * primary (local) host. `rootPath`, when set, confines the target beneath\n * that absolute root on the host (symlink-safe).\n */\ninterface FileReadArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n signal?: AbortSignal;\n}\ninterface FileWriteArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n content: string;\n /** Defaults to \"utf8\". */\n contentEncoding?: \"utf8\" | \"base64\";\n /** Defaults to false. */\n createParents?: boolean;\n /**\n * Optimistic-concurrency guard: omitted → unconditional write; a hash →\n * write only when the current content hashes to it (use `read().sha256`);\n * null → create-only. A failed guard resolves to the `conflict` outcome.\n */\n expectedSha256?: string | null;\n /** POSIX permission bits used when creating a file (for example 0o600). */\n mode?: number;\n}\ninterface FileListArgs {\n hostId?: string;\n path: string;\n query?: string;\n limit?: number;\n signal?: AbortSignal;\n}\ninterface PathListArgs extends FileListArgs {\n includeFiles: boolean;\n includeDirectories: boolean;\n}\ninterface FileMkdirArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FileMoveArgs {\n hostId?: string;\n sourcePath: string;\n destinationPath: string;\n rootPath?: string;\n}\ninterface FileRemoveArgs {\n hostId?: string;\n path: string;\n rootPath?: string;\n recursive?: boolean;\n}\ninterface FilePreviewArgs {\n hostId?: string;\n rootPath: string;\n signal?: AbortSignal;\n ttlMs?: number;\n}\ntype FileReadResult = HostFileReadResponse;\ntype FileWriteResult = HostFileWriteResponse;\ntype FileListResult = HostFileListResponse;\ntype PathListResult = HostPathListResponse;\ntype FileMkdirResult = HostMkdirResponse;\ntype FileMoveResult = HostMovePathResponse;\ntype FileRemoveResult = HostRemovePathResponse;\ntype FilePreviewResult = CreateFilePreviewResponse;\ninterface FilesArea {\n read(args: FileReadArgs): Promise<FileReadResult>;\n write(args: FileWriteArgs): Promise<FileWriteResult>;\n list(args: FileListArgs): Promise<FileListResult>;\n listPaths(args: PathListArgs): Promise<PathListResult>;\n mkdir(args: FileMkdirArgs): Promise<FileMkdirResult>;\n move(args: FileMoveArgs): Promise<FileMoveResult>;\n remove(args: FileRemoveArgs): Promise<FileRemoveResult>;\n createPreview(args: FilePreviewArgs): Promise<FilePreviewResult>;\n}\n\ninterface GuideRenderArgs {\n chapter?: string;\n}\ninterface GuideRenderResult {\n chapter?: string;\n content: string;\n}\ninterface GuideArea {\n render(args?: GuideRenderArgs): GuideRenderResult;\n}\n\ninterface HostGetArgs {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostDeleteArgs {\n hostId: string;\n}\ninterface HostUpdateArgs extends UpdateHostRequest {\n hostId: string;\n}\ninterface HostRetryUpdateArgs {\n hostId: string;\n}\ninterface HostDirectoryArgs extends HostDirectoryQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPathsExistArgs extends HostPathsExistRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostPickFolderArgs extends HostPickFolderRequest {\n hostId: string;\n signal?: AbortSignal;\n}\ninterface HostProviderCliInstallArgs extends HostProviderCliInstallRequest {\n hostId: string;\n}\ninterface HostListArgs {\n signal?: AbortSignal;\n}\ntype HostCreateJoinCodeResult = CreateHostJoinCodeResponse;\ntype HostDeleteResult = {\n ok: true;\n};\ntype HostDirectoryResult = HostDirectoryListing;\ntype HostGetResult = Host;\ntype HostCloneDefaultPathResult = HostCloneDefaultPathResponse;\ntype HostProviderCliInstallResult = HostProviderCliInstallEvent[];\ntype HostListResult = Host[];\ntype HostPathsExistResult = HostPathsExistResponse;\ntype HostPickFolderResult = HostPickFolderResponse;\ntype HostProviderCliStatusResult = HostProviderCliStatusResponse;\ntype HostRetryUpdateResult = HostRetryUpdateResponse;\ntype HostUpdateResult = Host;\ninterface HostsArea {\n createJoinCode(): Promise<HostCreateJoinCodeResult>;\n delete(args: HostDeleteArgs): Promise<HostDeleteResult>;\n directory(args: HostDirectoryArgs): Promise<HostDirectoryResult>;\n get(args: HostGetArgs): Promise<HostGetResult>;\n cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise<HostCloneDefaultPathResult>;\n installProviderCli(args: HostProviderCliInstallArgs): Promise<HostProviderCliInstallResult>;\n list(args?: HostListArgs): Promise<HostListResult>;\n pathsExist(args: HostPathsExistArgs): Promise<HostPathsExistResult>;\n pickFolder(args: HostPickFolderArgs): Promise<HostPickFolderResult>;\n providerCliStatus(args: HostGetArgs): Promise<HostProviderCliStatusResult>;\n retryUpdate(args: HostRetryUpdateArgs): Promise<HostRetryUpdateResult>;\n update(args: HostUpdateArgs): Promise<HostUpdateResult>;\n}\n\ninterface ProjectListArgs {\n include?: ProjectListQuery[\"include\"];\n /** Include the singleton personal project. Defaults to false for compatibility. */\n includePersonal?: boolean;\n signal?: AbortSignal;\n}\ninterface ProjectCreateArgs extends CreateProjectRequest {\n}\ninterface ProjectGetArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectUpdateArgs extends UpdateProjectRequest {\n projectId: string;\n}\ninterface ProjectDeleteArgs {\n projectId: string;\n}\ninterface ProjectReorderArgs extends ReorderProjectRequest {\n projectId: string;\n}\ninterface ProjectPromptHistoryArgs extends PromptHistoryQuery {\n projectId: string;\n signal?: AbortSignal;\n}\n/** Select one project workspace source, or omit both for the primary host. */\ntype ProjectWorkspaceRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFilesQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectPathsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectCommandsQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ntype ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit<ProjectFileContentQuery, \"environmentId\" | \"hostId\"> & {\n projectId: string;\n signal?: AbortSignal;\n};\ninterface ProjectBranchesArgs extends ProjectBranchesQuery {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectDefaultExecutionOptionsArgs {\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentFileLike {\n arrayBuffer(): Promise<ArrayBuffer>;\n readonly name: string;\n readonly type?: string;\n}\ninterface ProjectAttachmentUploadArgsBase {\n /** MIME override. Omit to use the File/Blob type, when available. */\n mimeType?: string;\n projectId: string;\n}\n/**\n * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an\n * explicit filename; File-like values can supply their own name.\n */\ntype ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({\n clientFile: ProjectAttachmentFileLike;\n filename?: string;\n} | {\n clientFile: ArrayBuffer | Blob | Uint8Array;\n filename: string;\n});\ninterface ProjectAttachmentReadArgs {\n path: string;\n projectId: string;\n signal?: AbortSignal;\n}\ninterface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest {\n projectId: string;\n}\ntype ProjectSourceAddArgs = CreateProjectSourceRequest & {\n projectId: string;\n};\ninterface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest {\n projectId: string;\n sourceId: string;\n}\ninterface ProjectSourceDeleteArgs {\n projectId: string;\n sourceId: string;\n}\ntype ProjectBranchesResult = ProjectBranchesResponse;\ninterface ProjectAttachmentReadResult {\n bytes: Uint8Array;\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectAttachmentUploadResult = UploadedPromptAttachment;\ntype ProjectCommandsResult = CommandListResponse;\ntype ProjectCreateResult = ProjectResponse;\ntype ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null;\ntype ProjectDeleteResult = {\n ok: true;\n};\ninterface ProjectFileContentResult {\n /** UTF-8 text or base64, as selected by `contentEncoding`. */\n content: string;\n contentEncoding: \"utf8\" | \"base64\";\n mimeType: string;\n sizeBytes: number;\n}\ntype ProjectFilesResult = WorkspaceFileListResponse;\ntype ProjectGetResult = ProjectResponse;\ntype ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[];\ntype ProjectPathsResult = WorkspacePathListResponse;\ntype ProjectPromptHistoryResult = PromptHistoryResponse;\ntype ProjectReorderResult = ProjectResponse[];\ntype ProjectSourceAddResult = ProjectSource;\ntype ProjectSourceDeleteResult = {\n ok: true;\n};\ntype ProjectSourceUpdateResult = ProjectSource;\ntype ProjectUpdateResult = ProjectResponse;\ninterface ProjectSourcesArea {\n add(args: ProjectSourceAddArgs): Promise<ProjectSourceAddResult>;\n delete(args: ProjectSourceDeleteArgs): Promise<ProjectSourceDeleteResult>;\n update(args: ProjectSourceUpdateArgs): Promise<ProjectSourceUpdateResult>;\n}\ninterface ProjectAttachmentsArea {\n copy(args: ProjectAttachmentCopyArgs): Promise<void>;\n read(args: ProjectAttachmentReadArgs): Promise<ProjectAttachmentReadResult>;\n upload(args: ProjectAttachmentUploadArgs): Promise<ProjectAttachmentUploadResult>;\n}\ninterface ProjectsArea {\n attachments: ProjectAttachmentsArea;\n branches(args: ProjectBranchesArgs): Promise<ProjectBranchesResult>;\n commands(args: ProjectCommandsArgs): Promise<ProjectCommandsResult>;\n create(args: ProjectCreateArgs): Promise<ProjectCreateResult>;\n defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise<ProjectDefaultExecutionOptionsResult>;\n delete(args: ProjectDeleteArgs): Promise<ProjectDeleteResult>;\n fileContent(args: ProjectFileContentArgs): Promise<ProjectFileContentResult>;\n files(args: ProjectFilesArgs): Promise<ProjectFilesResult>;\n get(args: ProjectGetArgs): Promise<ProjectGetResult>;\n list(args?: ProjectListArgs): Promise<ProjectListResult>;\n paths(args: ProjectPathsArgs): Promise<ProjectPathsResult>;\n promptHistory(args: ProjectPromptHistoryArgs): Promise<ProjectPromptHistoryResult>;\n reorder(args: ProjectReorderArgs): Promise<ProjectReorderResult>;\n sources: ProjectSourcesArea;\n update(args: ProjectUpdateArgs): Promise<ProjectUpdateResult>;\n}\n\n/** Select exactly one provider-discovery host source, or omit both for primary. */\ntype ProviderHostRoutingArgs = {\n environmentId: string;\n hostId?: never;\n} | {\n environmentId?: never;\n hostId: string;\n} | {\n environmentId?: never;\n hostId?: never;\n};\ntype ProviderListArgs = ProviderHostRoutingArgs & {\n signal?: AbortSignal;\n};\ntype ProviderModelsArgs = ProviderHostRoutingArgs & {\n providerId?: string;\n signal?: AbortSignal;\n};\ntype ProviderListResult = ProviderInfo[];\ntype ProviderModelsResult = SystemExecutionOptionsResponse;\ninterface ProvidersArea {\n /** List providers on the environment host, explicit host, or primary host. */\n list(args?: ProviderListArgs): Promise<ProviderListResult>;\n /** List models on the environment host, explicit host, or primary host. */\n models(args?: ProviderModelsArgs): Promise<ProviderModelsResult>;\n}\n\ninterface PluginIdArgs {\n pluginId: string;\n}\n/** Install directly from a path:, git:, npm:, or builtin: source spec. */\ninterface PluginInstallArgs {\n source: string;\n}\n/** Install an entry from BB's official catalog. */\ninterface PluginCatalogInstallArgs {\n entryId: string;\n}\ninterface PluginReloadArgs {\n pluginId?: string;\n}\ninterface PluginSettingsUpdateArgs extends PluginIdArgs {\n values: Record<string, JsonValue$1>;\n}\ninterface PluginTokenArgs extends PluginIdArgs {\n rotate?: boolean;\n}\ninterface PluginCheckUpdatesArgs {\n pluginId?: string;\n signal?: AbortSignal;\n}\ninterface PluginRpcArgs<TOutput> extends PluginIdArgs {\n input?: JsonValue$1;\n method: string;\n outputSchema: z$1.ZodType<TOutput>;\n}\ninterface PluginCatalogSearchArgs {\n query: string;\n signal?: AbortSignal;\n}\ninterface PluginCatalogStatusArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSettingsArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginGetSourceArgs extends PluginIdArgs {\n signal?: AbortSignal;\n}\ninterface PluginListArgs {\n signal?: AbortSignal;\n}\ninterface PluginListUpdateResultsArgs {\n signal?: AbortSignal;\n}\ntype PluginDisableResult = InstalledPlugin;\ntype PluginEnableResult = InstalledPlugin;\ntype PluginGetSettingsResult = PluginSettingsResponse;\ntype PluginInstallResult = InstalledPlugin;\ntype PluginListResult = PluginListResponse;\ntype PluginReloadResult = PluginReloadResponse;\ntype PluginRemoveResult = PluginRemoveResponse;\ntype PluginTokenResult = PluginTokenResponse;\ntype PluginUpdateSettingsResult = PluginSettingsResponse;\ntype PluginGetSourceResult = PluginSourceDetail;\ntype PluginCheckUpdatesResult = PluginUpdateCheckEntry[];\ntype PluginApplyUpdateResult = PluginApplyUpdateResult$1;\ntype PluginCatalogStatusResult = PluginCatalogStatus;\ntype PluginCatalogSearchResult = PluginCatalogSearchResult$1[];\ninterface PluginCatalogArea {\n install(args: PluginCatalogInstallArgs): Promise<PluginInstallResult>;\n search(args: PluginCatalogSearchArgs): Promise<PluginCatalogSearchResult>;\n status(args?: PluginCatalogStatusArgs): Promise<PluginCatalogStatusResult>;\n}\ninterface PluginsArea {\n applyUpdate(args: PluginIdArgs): Promise<PluginApplyUpdateResult>;\n callRpc<TOutput>(args: PluginRpcArgs<TOutput>): Promise<TOutput>;\n checkUpdates(args?: PluginCheckUpdatesArgs): Promise<PluginCheckUpdatesResult>;\n catalog: PluginCatalogArea;\n disable(args: PluginIdArgs): Promise<PluginDisableResult>;\n enable(args: PluginIdArgs): Promise<PluginEnableResult>;\n getSettings(args: PluginGetSettingsArgs): Promise<PluginGetSettingsResult>;\n getSource(args: PluginGetSourceArgs): Promise<PluginGetSourceResult>;\n install(args: PluginInstallArgs): Promise<PluginInstallResult>;\n list(args?: PluginListArgs): Promise<PluginListResult>;\n listUpdateResults(args?: PluginListUpdateResultsArgs): Promise<PluginCheckUpdatesResult>;\n reload(args?: PluginReloadArgs): Promise<PluginReloadResult>;\n remove(args: PluginIdArgs): Promise<PluginRemoveResult>;\n token(args: PluginTokenArgs): Promise<PluginTokenResult>;\n updateSettings(args: PluginSettingsUpdateArgs): Promise<PluginUpdateSettingsResult>;\n}\n\ntype BbRealtimeUnsubscribe = () => void;\ntype BbRealtimeEventName = \"thread:changed\" | \"project:changed\" | \"environment:changed\" | \"host:changed\" | \"system:changed\" | \"system:config-changed\" | \"realtime:connection\";\ntype ThreadRealtimeEvent = Extract<ChangedMessage, {\n entity: \"thread\";\n}>;\ntype ProjectRealtimeEvent = Extract<ChangedMessage, {\n entity: \"project\";\n}>;\ntype EnvironmentRealtimeEvent = Extract<ChangedMessage, {\n entity: \"environment\";\n}>;\ntype HostRealtimeEvent = Extract<ChangedMessage, {\n entity: \"host\";\n}>;\ntype SystemRealtimeEvent = Extract<ChangedMessage, {\n entity: \"system\";\n}>;\ntype BbRealtimeConnectionState = \"connecting\" | \"connected\" | \"disconnected\";\ninterface BbRealtimeConnectionEvent {\n reconnectDelayMs: number | null;\n reconnected: boolean;\n state: BbRealtimeConnectionState;\n}\n/**\n * Entity-changed events are delivered as one shared object to every matching\n * listener; their payload types are readonly so a listener cannot mutate what\n * the next listener receives.\n */\ninterface BbRealtimeEventMap {\n \"thread:changed\": ThreadRealtimeEvent;\n \"project:changed\": ProjectRealtimeEvent;\n \"environment:changed\": EnvironmentRealtimeEvent;\n \"host:changed\": HostRealtimeEvent;\n \"system:changed\": SystemRealtimeEvent;\n \"system:config-changed\": SystemRealtimeEvent;\n \"realtime:connection\": BbRealtimeConnectionEvent;\n}\ntype BbRealtimeCallback<TEventName extends BbRealtimeEventName> = (event: BbRealtimeEventMap[TEventName]) => void;\ninterface ThreadRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"thread:changed\">;\n event: \"thread:changed\";\n threadId?: string;\n}\ninterface ProjectRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"project:changed\">;\n event: \"project:changed\";\n projectId?: string;\n}\ninterface EnvironmentRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"environment:changed\">;\n environmentId?: string;\n event: \"environment:changed\";\n}\ninterface HostRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"host:changed\">;\n event: \"host:changed\";\n hostId?: string;\n}\ninterface SystemRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:changed\">;\n event: \"system:changed\";\n}\ninterface SystemConfigRealtimeSubscribeArgs {\n callback: BbRealtimeCallback<\"system:config-changed\">;\n event: \"system:config-changed\";\n}\n/**\n * Connection listeners are pure observers — they never open or hold the\n * socket. A listener registered while a socket already exists receives the\n * latest connection event as a snapshot on the next microtask, so a status\n * UI mounted after connect still learns the current state.\n */\ninterface RealtimeConnectionSubscribeArgs {\n callback: BbRealtimeCallback<\"realtime:connection\">;\n event: \"realtime:connection\";\n}\ntype BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs;\ntype BbRealtimeSubscribeArgs<TEventName extends BbRealtimeEventName = BbRealtimeEventName> = Extract<BbRealtimeSubscribeArgsUnion, {\n event: TEventName;\n}>;\ninterface BbRealtime {\n subscribe<TEventName extends BbRealtimeEventName>(args: BbRealtimeSubscribeArgs<TEventName>): BbRealtimeUnsubscribe;\n}\n\ninterface StatusGetArgs {\n projectId?: string;\n signal?: AbortSignal;\n threadId?: string;\n}\ninterface StatusThreadSummary {\n environmentId: string | null;\n id: string;\n parentThreadId: string | null;\n pinnedAt: number | null;\n projectId: string;\n status: ThreadStatus;\n title: string | null;\n}\ntype StatusProject = ProjectResponse;\ntype StatusChildThreads = ThreadListResponse;\ninterface StatusResult {\n childThreads: StatusChildThreads | null;\n pendingTodos: ThreadTimelinePendingTodos | null;\n project: StatusProject | null;\n thread: StatusThreadSummary | null;\n}\ninterface StatusArea {\n get(args?: StatusGetArgs): Promise<StatusResult>;\n}\n\ninterface SkillWorkspaceArgs {\n projectId: string;\n environmentId: string | null;\n}\ninterface SkillListArgs extends SkillWorkspaceArgs {\n signal?: AbortSignal;\n}\ninterface SkillIdentityArgs extends SkillListArgs {\n skillId: string;\n}\ninterface SkillContentArgs extends SkillIdentityArgs {\n path: string;\n}\ninterface SkillUpdateArgs extends SkillWorkspaceArgs {\n skillId: string;\n content: string;\n revision: string;\n}\ninterface SkillDeleteArgs extends SkillWorkspaceArgs {\n skillId: string;\n}\n/**\n * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans\n * out one per card. Callers pass their query's AbortSignal so abandoning a\n * page cancels its requests instead of leaving them in flight.\n */\ninterface AbortableArgs {\n signal?: AbortSignal;\n}\ninterface RegistrySkillsSearchArgs extends AbortableArgs {\n query?: string;\n page?: number;\n perPage?: number;\n}\ninterface RegistrySkillIdArgs extends AbortableArgs {\n registrySkillId: string;\n}\ninterface RegistrySkillSourceArgs extends AbortableArgs {\n source: string;\n skillId: string;\n}\ninterface RegistryRepositoryArgs extends AbortableArgs {\n source: string;\n}\n/**\n * Install is a mutation and deliberately takes no signal: its body is parsed\n * with a strict schema, so an extra key would throw at runtime.\n */\ninterface RegistrySkillInstallArgs {\n registrySkillId: string;\n}\ninterface SkillsRegistryArea {\n detail(args: RegistrySkillSourceArgs): Promise<RegistrySkillDetail>;\n get(args: RegistrySkillIdArgs): Promise<RegistrySkill>;\n install(args: RegistrySkillInstallArgs): Promise<RegistrySkillInstallResponse>;\n repositoryStars(args: RegistryRepositoryArgs): Promise<RegistryRepositoryStars>;\n search(args?: RegistrySkillsSearchArgs): Promise<RegistrySkillsPage>;\n}\ninterface SkillsArea {\n getContent(args: SkillContentArgs): Promise<SkillContentResponse>;\n list(args: SkillListArgs): Promise<SkillListResponse>;\n listFiles(args: SkillIdentityArgs): Promise<SkillFilesResponse>;\n registry: SkillsRegistryArea;\n remove(args: SkillDeleteArgs): Promise<{\n deletedPath: string;\n }>;\n update(args: SkillUpdateArgs): Promise<{\n filePath: string;\n revision: string;\n }>;\n}\n\ntype ThemeGetResult = AppTheme;\ntype ThemeCatalogResult = ThemeCatalogResponse;\ntype ThemeSetInput = AppThemeSelection;\ntype ThemeSetResult = AppTheme;\ninterface ThemeCatalogArgs {\n signal?: AbortSignal;\n}\ninterface ThemeGetArgs {\n signal?: AbortSignal;\n}\ninterface ThemeArea {\n /** The active app palette, resolved server-side (built-in id or custom CSS). */\n get(args?: ThemeGetArgs): Promise<ThemeGetResult>;\n /** The custom-theme directory plus discovered themes and the active palette. */\n catalog(args?: ThemeCatalogArgs): Promise<ThemeCatalogResult>;\n /** Set the complete app appearance selection in one request. */\n set(selection: ThemeSetInput): Promise<ThemeSetResult>;\n /**\n * Activate a palette by id while preserving the active favicon color. This\n * compatibility shorthand reads the active appearance before writing the\n * complete selection; prefer the object form when both values are known.\n */\n set(themeId: string): Promise<ThemeSetResult>;\n}\n\ninterface SystemAttentionArgs {\n signal?: AbortSignal;\n}\ninterface SystemConfigArgs {\n signal?: AbortSignal;\n}\ninterface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery {\n signal?: AbortSignal;\n}\ninterface SystemUsageLimitsArgs extends SystemUsageLimitsQuery {\n signal?: AbortSignal;\n}\ninterface SystemVersionArgs {\n force?: boolean;\n signal?: AbortSignal;\n}\ninterface SystemVoiceTranscriptionArgs {\n file: Blob;\n prompt?: string;\n signal?: AbortSignal;\n}\ntype SystemAttentionResult = SystemAttentionResponse;\ntype SystemConfigResult = SystemConfigResponse;\ntype SystemExecutionOptionsResult = SystemExecutionOptionsResponse;\ntype SystemReloadConfigResult = SystemConfigReloadResponse;\ntype SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest;\ninterface SystemCliSkillsStatusArgs {\n /** Omit for every enrolled machine. */\n hostIds?: readonly string[];\n signal?: AbortSignal;\n}\ntype SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse;\ntype SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse;\ntype SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse;\ntype SystemUpdateExperimentsResult = Experiments;\ntype SystemUpdateGeneralSettingsResult = AppSettings;\ntype SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides;\ntype SystemUsageLimitsResult = ProviderUsageResponse;\ninterface SystemOnboardingArgs extends SystemProvidersQuery {\n signal?: AbortSignal;\n}\ninterface SystemOnboardingReposArgs extends SystemOnboardingReposQuery {\n signal?: AbortSignal;\n}\ntype SystemOnboardingAgentsResult = OnboardingAgentOverview;\ntype SystemOnboardingReposResult = DiscoverReposResult;\ntype SystemVersionResult = SystemVersionResponse;\ninterface SystemArea {\n attention(args?: SystemAttentionArgs): Promise<SystemAttentionResult>;\n config(args?: SystemConfigArgs): Promise<SystemConfigResult>;\n executionOptions(args?: SystemExecutionOptionsArgs): Promise<SystemExecutionOptionsResult>;\n /**\n * Copy bb's built-in CLI skills into each named machine's global agent skill\n * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install\n * independently; the result reports each machine's outcome.\n */\n /** Per-machine install state of bb's built-in CLI skills. */\n cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise<SystemCliSkillsStatusResult>;\n installCliSkills(args: SystemInstallCliSkillsArgs): Promise<SystemInstallCliSkillsResult>;\n reloadConfig(): Promise<SystemReloadConfigResult>;\n transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise<SystemVoiceTranscriptionResult>;\n updateExperiments(args: Experiments): Promise<SystemUpdateExperimentsResult>;\n updateGeneralSettings(args: AppSettings): Promise<SystemUpdateGeneralSettingsResult>;\n updateKeyboardSettings(args: AppKeybindingOverrides): Promise<SystemUpdateKeyboardSettingsResult>;\n /** Report one onboarding funnel event to anonymous telemetry. */\n onboardingEvent(args: OnboardingTelemetryEvent): Promise<{\n ok: true;\n }>;\n /** Live agent state for onboarding: install, auth, and plan per provider. */\n onboardingAgents(args?: SystemOnboardingArgs): Promise<SystemOnboardingAgentsResult>;\n /** Candidate projects discovered on the host, ranked for onboarding. */\n onboardingRepos(args?: SystemOnboardingReposArgs): Promise<SystemOnboardingReposResult>;\n usageLimits(args?: SystemUsageLimitsArgs): Promise<SystemUsageLimitsResult>;\n version(args?: SystemVersionArgs): Promise<SystemVersionResult>;\n}\n\ninterface TerminalThreadScope {\n cwd?: never;\n environmentId?: never;\n hostId?: never;\n kind: \"thread\";\n threadId: string;\n}\ninterface TerminalEnvironmentScope {\n environmentId: string;\n cwd?: never;\n hostId?: never;\n kind: \"environment\";\n threadId?: never;\n}\ninterface TerminalHostPathListScope {\n /** Optional exact initial working-directory filter on the selected host. */\n cwd?: string;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ninterface TerminalHostPathCreateScope {\n /** Null starts in the selected host's home directory. */\n cwd: string | null;\n environmentId?: never;\n hostId: string;\n kind: \"host_path\";\n threadId?: never;\n}\ntype TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope;\ntype TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope;\ninterface TerminalListArgs {\n signal?: AbortSignal;\n scope: TerminalListScope;\n}\ninterface TerminalCreateArgs {\n cols: number;\n rows: number;\n scope: TerminalCreateScope;\n start?: CreateTerminalRequest[\"start\"];\n title?: string;\n}\ninterface TerminalTargetArgs {\n terminalId: string;\n}\ninterface TerminalGetArgs extends TerminalTargetArgs {\n signal?: AbortSignal;\n}\ninterface TerminalRenameArgs extends TerminalTargetArgs {\n title: UpdateTerminalRequest[\"title\"];\n}\ninterface TerminalCloseArgs extends TerminalTargetArgs {\n mode: \"force\" | \"if-clean\";\n}\ninterface TerminalInputArgs extends TerminalTargetArgs {\n dataBase64: TerminalInputRequest[\"dataBase64\"];\n}\ninterface TerminalResizeArgs extends TerminalTargetArgs {\n cols: TerminalResizeRequest[\"cols\"];\n rows: TerminalResizeRequest[\"rows\"];\n}\ninterface TerminalOutputArgs extends TerminalTargetArgs {\n limitChunks?: TerminalOutputQuery[\"limitChunks\"];\n signal?: AbortSignal;\n sinceSeq?: TerminalOutputQuery[\"sinceSeq\"];\n tailBytes?: TerminalOutputQuery[\"tailBytes\"];\n}\ntype TerminalRestartArgs = TerminalTargetArgs;\ntype TerminalListResult = TerminalListResponse;\ntype TerminalCreateResult = TerminalSession;\ntype TerminalGetResult = TerminalSession;\ntype TerminalRenameResult = TerminalSession;\ntype TerminalCloseResult = TerminalSession;\ntype TerminalInputResult = TerminalSession;\ntype TerminalResizeResult = TerminalSession;\ntype TerminalOutputResult = TerminalOutputResponse;\ntype TerminalRestartResult = TerminalSession;\ninterface TerminalsArea {\n close(args: TerminalCloseArgs): Promise<TerminalCloseResult>;\n create(args: TerminalCreateArgs): Promise<TerminalCreateResult>;\n get(args: TerminalGetArgs): Promise<TerminalGetResult>;\n input(args: TerminalInputArgs): Promise<TerminalInputResult>;\n list(args: TerminalListArgs): Promise<TerminalListResult>;\n output(args: TerminalOutputArgs): Promise<TerminalOutputResult>;\n rename(args: TerminalRenameArgs): Promise<TerminalRenameResult>;\n /**\n * Replace a terminal with a shell at the same scope, size, and title.\n * The server serializes concurrent restarts and opens the replacement before\n * closing the old session, so a failed open leaves the old terminal running.\n * The original command is not replayed because terminal sessions do not\n * persist launch commands. The replacement has a new terminal ID.\n */\n restart(args: TerminalRestartArgs): Promise<TerminalRestartResult>;\n resize(args: TerminalResizeArgs): Promise<TerminalResizeResult>;\n}\n\ninterface ThreadListArgs {\n archived?: boolean;\n sectionId?: string;\n hasParent?: boolean;\n includeHidden?: boolean;\n limit?: number;\n offset?: number;\n originKind?: ThreadListQuery[\"originKind\"];\n originPluginId?: string;\n parentThreadId?: string;\n projectId?: string;\n signal?: AbortSignal;\n sourceThreadId?: string;\n unsectioned?: boolean;\n}\ninterface ThreadSearchArgs extends ThreadSearchQuery {\n signal?: AbortSignal;\n}\ninterface ThreadGetArgs {\n include?: ThreadGetQuery[\"include\"];\n signal?: AbortSignal;\n threadId: string;\n}\ntype ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse;\ntype ThreadListResult = ThreadListResponse;\ntype ThreadSearchResult = ThreadSearchResponse;\ninterface ThreadOutputResponse {\n output: string | null;\n}\ntype ThreadMutationResult = ThreadResponse;\ntype ThreadSpawnResult = ThreadResponse;\ntype ThreadForkResult = ThreadResponse;\ntype ThreadInteractionGetResult = PendingInteraction;\ntype ThreadInteractionListResult = ThreadPendingInteractionsResponse;\ntype ThreadInteractionResolveResult = PendingInteraction;\ntype ThreadInteractionRespondResult = PendingInteraction;\ntype ThreadInteractionCancelResult = PendingInteraction;\ntype ThreadEventsListResult = ThreadEventRow[];\ntype ThreadEventWaitResult = ThreadEventRow | null;\ntype ThreadTimelineResult = ThreadTimelineResponse;\ntype ThreadArchiveResult = ThreadArchiveAllResponse;\ntype ThreadOpenResult = ThreadOpenResponse;\ntype ThreadPaneActionResult = ThreadPaneActionResponse;\ntype ThreadDeleteResult = {\n ok: true;\n};\ntype ThreadSendResult = {\n ok: true;\n};\ntype ThreadRateLimitRecoveryResult = ProviderRateLimitRecoveryStatus;\ntype ThreadContinueAfterRateLimitResult = ContinueAfterProviderRateLimitResponse;\ntype ThreadEditMessageResult = EditMessageResponse;\ntype ThreadStopResult = {\n ok: true;\n};\ntype ThreadCompactResult = {\n ok: true;\n};\ntype ThreadBannerActionResult = {\n ok: true;\n};\ntype ThreadUnarchiveResult = {\n ok: true;\n};\ntype ThreadArchiveAllResult = ThreadArchiveAllResponse;\ntype ThreadReadStateResult = ThreadResponse;\ntype ThreadPinOrderResult = ThreadListResponse;\ntype ThreadPromptHistoryResult = PromptHistoryResponse;\ntype ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageCreateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageUpdateResult = ThreadQueuedMessage;\ntype ThreadQueuedMessageDeleteResult = {\n ok: true;\n};\ntype ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse;\ntype ThreadQueuedMessageSendResult = SendQueuedMessageResponse;\ntype ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse;\ntype ThreadTabsResult = ThreadTabsResponse;\ntype ThreadTabsUpdateResult = ThreadTabsResponse;\ntype ThreadStorageFilesResult = ThreadStorageFileListResponse;\ntype ThreadStoragePathsResult = ThreadStoragePathListResponse;\ntype ThreadChildSummaryResult = ThreadChildSummaryResponse;\ntype ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null;\ntype ThreadConversationOutlineResult = ThreadConversationOutlineResponse;\ntype ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse;\ninterface ThreadSpawnBaseArgs extends Omit<CreateThreadRequest, \"childOrigin\" | \"input\" | \"origin\" | \"originKind\" | \"startedOnBehalfOf\"> {\n childOrigin?: CreateThreadRequest[\"childOrigin\"];\n origin?: CreateThreadRequest[\"origin\"];\n originKind?: CreateThreadRequest[\"originKind\"];\n startedOnBehalfOf?: CreateThreadRequest[\"startedOnBehalfOf\"];\n}\ntype ThreadSpawnArgs = ThreadSpawnBaseArgs & ({\n input: CreateThreadRequest[\"input\"];\n prompt?: never;\n} | {\n input?: never;\n prompt: string;\n});\ninterface ThreadForkArgs extends Omit<ForkThreadRequest, \"origin\" | \"visibility\" | \"workspace\"> {\n origin?: ForkThreadRequest[\"origin\"];\n visibility?: ForkThreadRequest[\"visibility\"];\n workspace?: ForkThreadRequest[\"workspace\"];\n}\ninterface ThreadUpdateArgs extends UpdateThreadRequest {\n threadId: string;\n}\ninterface ThreadDeleteArgs extends DeleteThreadRequest {\n threadId: string;\n}\ninterface ThreadSendArgs extends SendMessageRequest {\n threadId: string;\n}\ninterface ThreadEditMessageArgs extends EditMessageRequest {\n threadId: string;\n}\ninterface ThreadActionArgs {\n threadId: string;\n}\ninterface ThreadContinueAfterRateLimitArgs extends ThreadActionArgs {\n failedRequestId: string;\n}\ninterface ThreadStatusArgs extends ThreadActionArgs {\n signal?: AbortSignal;\n}\ninterface ThreadPromptHistoryArgs extends PromptHistoryQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadPinOrderArgs extends ReorderPinnedThreadRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest {\n threadId: string;\n}\ninterface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageTargetArgs {\n queuedMessageId: string;\n threadId: string;\n}\ninterface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest {\n}\ninterface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest {\n threadId: string;\n}\ninterface ThreadStorageFilesArgs extends ThreadStorageFilesQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadStoragePathsArgs extends ThreadStoragePathsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest {\n threadId: string;\n}\ninterface ThreadOpenArgs {\n threadId: string;\n split?: ThreadOpenSplit;\n file: ThreadOpenFile | null;\n}\ninterface ThreadPaneActionArgs {\n action: ThreadPaneAction;\n threadId: string;\n}\ninterface ThreadEventsListArgs {\n afterSeq?: string;\n limit?: string;\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadEventWaitArgs {\n afterSeq?: string;\n signal?: AbortSignal;\n threadId: string;\n type: string;\n waitMs: string;\n}\ninterface ThreadTimelineArgs extends ThreadTimelineQuery {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadOutputArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionListArgs {\n signal?: AbortSignal;\n threadId: string;\n}\ninterface ThreadInteractionTargetArgs {\n interactionId: string;\n threadId: string;\n}\ninterface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs {\n signal?: AbortSignal;\n}\ninterface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs {\n resolution: PendingInteractionResolution;\n}\ninterface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs {\n value: JsonValue$1;\n}\ntype ThreadWaitTarget = {\n kind: \"status\";\n status: ThreadStatus;\n} | {\n kind: \"event\";\n eventType: string;\n};\ninterface ThreadWaitArgs {\n event?: string;\n pollIntervalMs?: number;\n signal?: AbortSignal;\n status?: ThreadStatus;\n threadId: string;\n timeoutMs?: number;\n}\ntype ThreadWaitResult = {\n event: NonNullable<ThreadEventWaitResult>;\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"event\";\n }>;\n threadId: string;\n} | {\n matched: true;\n target: Extract<ThreadWaitTarget, {\n kind: \"status\";\n }>;\n thread: ThreadGetResult;\n threadId: string;\n};\ninterface ThreadInteractionsArea {\n cancel(args: ThreadInteractionTargetArgs): Promise<ThreadInteractionCancelResult>;\n get(args: ThreadInteractionGetArgs): Promise<ThreadInteractionGetResult>;\n list(args: ThreadInteractionListArgs): Promise<ThreadInteractionListResult>;\n resolve(args: ThreadInteractionResolveArgs): Promise<ThreadInteractionResolveResult>;\n respond(args: ThreadInteractionRespondArgs): Promise<ThreadInteractionRespondResult>;\n}\ninterface ThreadEventsArea {\n list(args: ThreadEventsListArgs): Promise<ThreadEventsListResult>;\n wait(args: ThreadEventWaitArgs): Promise<ThreadEventWaitResult>;\n}\ninterface ThreadQueuedMessagesArea {\n create(args: ThreadQueuedMessageCreateArgs): Promise<ThreadQueuedMessageCreateResult>;\n delete(args: ThreadQueuedMessageTargetArgs): Promise<ThreadQueuedMessageDeleteResult>;\n list(args: ThreadQueuedMessageArgs): Promise<ThreadQueuedMessagesResult>;\n reorder(args: ThreadQueuedMessageReorderArgs): Promise<ThreadQueuedMessageReorderResult>;\n send(args: ThreadQueuedMessageSendArgs): Promise<ThreadQueuedMessageSendResult>;\n setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise<ThreadQueuedMessageGroupBoundaryResult>;\n update(args: ThreadQueuedMessageUpdateArgs): Promise<ThreadQueuedMessageUpdateResult>;\n}\ninterface ThreadTabsArea {\n get(args: ThreadStatusArgs): Promise<ThreadTabsResult>;\n update(args: ThreadTabsUpdateArgs): Promise<ThreadTabsUpdateResult>;\n}\ninterface ThreadsArea {\n archive(args: ThreadActionArgs): Promise<ThreadArchiveResult>;\n archiveAll(args: ThreadActionArgs): Promise<ThreadArchiveAllResult>;\n childSummary(args: ThreadStatusArgs): Promise<ThreadChildSummaryResult>;\n continueAfterRateLimit(args: ThreadContinueAfterRateLimitArgs): Promise<ThreadContinueAfterRateLimitResult>;\n compact(args: ThreadActionArgs): Promise<ThreadCompactResult>;\n cancelPlan(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n clearGoal(args: ThreadActionArgs): Promise<ThreadBannerActionResult>;\n conversationOutline(args: ThreadStatusArgs): Promise<ThreadConversationOutlineResult>;\n defaultExecutionOptions(args: ThreadStatusArgs): Promise<ThreadDefaultExecutionOptionsResult>;\n delete(args: ThreadDeleteArgs): Promise<ThreadDeleteResult>;\n editMessage(args: ThreadEditMessageArgs): Promise<ThreadEditMessageResult>;\n events: ThreadEventsArea;\n fork(args: ThreadForkArgs): Promise<ThreadForkResult>;\n get(args: ThreadGetArgs): Promise<ThreadGetResult>;\n interactions: ThreadInteractionsArea;\n list(args?: ThreadListArgs): Promise<ThreadListResult>;\n markRead(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n markUnread(args: ThreadActionArgs): Promise<ThreadReadStateResult>;\n open(args: ThreadOpenArgs): Promise<ThreadOpenResult>;\n paneAction(args: ThreadPaneActionArgs): Promise<ThreadPaneActionResult>;\n output(args: ThreadOutputArgs): Promise<ThreadOutputResponse>;\n pin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n promptHistory(args: ThreadPromptHistoryArgs): Promise<ThreadPromptHistoryResult>;\n queuedMessages: ThreadQueuedMessagesArea;\n rateLimitRecovery(args: ThreadStatusArgs): Promise<ThreadRateLimitRecoveryResult>;\n reorderPinned(args: ThreadPinOrderArgs): Promise<ThreadPinOrderResult>;\n search(args: ThreadSearchArgs): Promise<ThreadSearchResult>;\n send(args: ThreadSendArgs): Promise<ThreadSendResult>;\n spawn(args: ThreadSpawnArgs): Promise<ThreadSpawnResult>;\n stop(args: ThreadActionArgs): Promise<ThreadStopResult>;\n tabs: ThreadTabsArea;\n timeline(args: ThreadTimelineArgs): Promise<ThreadTimelineResult>;\n timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise<ThreadTimelineTurnSummaryDetailsResult>;\n storageFiles(args: ThreadStorageFilesArgs): Promise<ThreadStorageFilesResult>;\n storagePaths(args: ThreadStoragePathsArgs): Promise<ThreadStoragePathsResult>;\n unarchive(args: ThreadActionArgs): Promise<ThreadUnarchiveResult>;\n unpin(args: ThreadActionArgs): Promise<ThreadMutationResult>;\n update(args: ThreadUpdateArgs): Promise<ThreadMutationResult>;\n wait(args: ThreadWaitArgs): Promise<ThreadWaitResult>;\n}\n\ntype ThreadSectionCreateResult = ThreadSectionResponse;\ntype ThreadSectionUpdateResult = ThreadSectionMutationResponse;\ntype ThreadSectionDeleteResult = ThreadSectionMutationResponse;\ntype ThreadSectionListResult = ThreadSectionResponse[];\ninterface ThreadSectionListArgs {\n signal?: AbortSignal;\n}\ninterface ThreadSectionsArea {\n create(args: CreateThreadSectionRequest): Promise<ThreadSectionCreateResult>;\n delete(args: DeleteThreadSectionRequest): Promise<ThreadSectionDeleteResult>;\n list(args?: ThreadSectionListArgs): Promise<ThreadSectionListResult>;\n update(args: UpdateThreadSectionRequest): Promise<ThreadSectionUpdateResult>;\n}\n\ninterface BbSdk extends BbRealtime {\n environments: EnvironmentsArea;\n files: FilesArea;\n guide: GuideArea;\n hosts: HostsArea;\n projects: ProjectsArea;\n plugins: PluginsArea;\n providers: ProvidersArea;\n skills: SkillsArea;\n status: StatusArea;\n system: SystemArea;\n terminals: TerminalsArea;\n theme: ThemeArea;\n threadSections: ThreadSectionsArea;\n threads: ThreadsArea;\n}\n\n/**\n * The backend plugin API contract — the `bb` object handed to a plugin's\n * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`).\n *\n * Types only: the implementation lives in the BB server\n * (apps/server/src/services/plugins/plugin-api.ts), which imports these\n * shapes so the contract and the implementation cannot drift. Plugin authors\n * import them type-only (`import type { BbPluginApi } from\n * \"@bb/plugin-sdk\"`); the import is erased when BB loads the file.\n *\n * Runtime classes stay host-side. NeedsConfigurationError in particular is\n * matched by NAME, so plugin code needs no runtime import:\n * `throw Object.assign(new Error(msg), { name: \"NeedsConfigurationError\" })`.\n */\ninterface PluginLogger {\n debug(message: string): void;\n info(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n/**\n * Declarative settings descriptors (`bb.settings.define`). Deliberately plain\n * data — not zod — so the host can render settings forms and the CLI can\n * parse values without executing plugin code.\n */\ntype PluginSettingDescriptor = {\n type: \"string\";\n label: string;\n description?: string;\n /** Stored in a 0600 file under <dataDir>/plugins/<id>/secrets/, never in the db or sent to the frontend. */\n secret?: true;\n default?: string;\n} | {\n type: \"boolean\";\n label: string;\n description?: string;\n default?: boolean;\n} | {\n type: \"select\";\n label: string;\n description?: string;\n options: string[];\n default?: string;\n} | {\n type: \"project\";\n label: string;\n description?: string;\n default?: string;\n};\ntype PluginSettingDescriptors = Record<string, PluginSettingDescriptor>;\ntype PluginSettingValue = string | boolean;\n/** `default` present → non-optional value; absent → `T | undefined`. */\ntype PluginSettingsValues<Ds extends Record<string, PluginSettingDescriptor>> = {\n [K in keyof Ds]: Ds[K] extends {\n default: string | boolean;\n } ? PluginSettingValueOf<Ds[K]> : PluginSettingValueOf<Ds[K]> | undefined;\n};\ntype PluginSettingValueOf<D extends PluginSettingDescriptor> = D extends {\n type: \"boolean\";\n} ? boolean : string;\ninterface PluginSettingsHandle<Ds extends Record<string, PluginSettingDescriptor>> {\n /** Load-safe: callable inside the factory. */\n get(): Promise<PluginSettingsValues<Ds>>;\n /** Fires after values change through the settings route/CLI. */\n onChange(listener: (next: PluginSettingsValues<Ds>, prev: PluginSettingsValues<Ds>) => void): void;\n}\ninterface PluginSettings {\n define<Ds extends Record<string, PluginSettingDescriptor>>(descriptors: Ds): PluginSettingsHandle<Ds>;\n}\ninterface PluginKvStorage {\n get<T>(key: string): Promise<T | undefined>;\n set(key: string, value: unknown): Promise<void>;\n delete(key: string): Promise<void>;\n list(prefix?: string): Promise<string[]>;\n}\ninterface PluginStorage {\n /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */\n kv: PluginKvStorage;\n /**\n * Open (or reuse the path of) the plugin's own SQLite database at\n * <dataDir>/plugins/<id>/data.db — the server's better-sqlite3, WAL mode,\n * busy_timeout 5000. Handles are host-tracked and closed on\n * dispose/reload; a closed handle throws on use.\n */\n database(): Database.Database;\n /**\n * Ordered-statement migration helper: statement index = migration id in a\n * `_bb_migrations` table; unapplied statements run in one transaction.\n * Append-only — never reorder or edit shipped statements.\n */\n migrate(db: Database.Database, statements: string[]): void;\n}\n/**\n * Thread lifecycle events a plugin can observe (design §4.5). Observe-only:\n * handlers run fire-and-forget after the transition is applied and can never\n * block or veto it. `thread` is the same public DTO GET /threads/:id serves.\n */\ninterface PluginThreadEventPayloads {\n /** Fired after a thread row is created. */\n \"thread.created\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `active`. */\n \"thread.active\": {\n thread: ThreadResponse;\n };\n /** Fired when a thread transitions into `idle`. `lastAssistantText` is\n * assembled the same way GET /threads/:id/output is. */\n \"thread.idle\": {\n thread: ThreadResponse;\n lastAssistantText: string | null;\n };\n /** Fired when a thread transitions into `error`. `error` is the latest\n * system/error event message, when one exists. */\n \"thread.failed\": {\n thread: ThreadResponse;\n error: string | null;\n };\n /** Fired after a thread is archived (including cascade archives). */\n \"thread.archived\": {\n thread: ThreadResponse;\n };\n /** Fired after a thread is soft-deleted. */\n \"thread.deleted\": {\n thread: ThreadResponse;\n };\n}\ntype PluginThreadEventName = keyof PluginThreadEventPayloads;\ntype PluginThreadEventHandler<E extends PluginThreadEventName> = (payload: PluginThreadEventPayloads[E]) => void | Promise<void>;\ntype PluginHttpAuthMode = \"local\" | \"token\" | \"none\";\ntype PluginHttpHandler = (context: Context) => Response | Promise<Response>;\ninterface PluginHttp {\n /**\n * Register an HTTP route, mounted at\n * `/api/v1/plugins/<id>/http/<path>`. Auth modes (default \"local\"):\n * - \"local\": Origin/Host must be a local BB app origin; non-GET requires\n * content-type application/json (forces a CORS preflight).\n * - \"token\": requires the per-plugin token (`bb plugin token <id>`) via\n * the x-bb-plugin-token header or ?token=.\n * - \"none\": no checks — only for signature-verified webhooks.\n */\n route(method: string, path: string, handler: PluginHttpHandler, opts?: {\n auth?: PluginHttpAuthMode;\n }): void;\n}\ninterface PluginRpc {\n /**\n * Register a Standard Schema-driven rpc contract and its inferred handlers,\n * served at POST\n * `/api/v1/plugins/<id>/rpc/<method>` with \"local\" auth semantics. The\n * host validates input before invocation and output before strict JSON\n * serialization. The response is `{ ok: true, result }` or\n * `{ ok: false, error: { code, message, issues? } }`.\n */\n register<Contract extends PluginRpcContract>(contract: Contract, handlers: PluginRpcHandlers<Contract>): void;\n}\ninterface PluginRealtime {\n /**\n * Broadcast an ephemeral `plugin-signal` WS message\n * `{ pluginId, channel, payload }` to every connected client (V1 has no\n * per-channel subscriptions). `payload` must be JSON-serializable;\n * `undefined` is normalized to `null`. Nothing is persisted.\n */\n publish(channel: string, payload: unknown): void;\n}\ninterface PluginBackground {\n /**\n * Register a long-lived background service. `start` runs after the\n * factory completes and should resolve when `signal` aborts\n * (dispose/reload/disable/shutdown). A crash restarts it with capped\n * exponential backoff; throwing NeedsConfigurationError marks the plugin\n * `needs-configuration` and stops restarting until the next load.\n */\n service(name: string, service: {\n start(signal: AbortSignal): void | Promise<void>;\n }): void;\n /**\n * Register a cron schedule (5-field expression, server-local time). The\n * durable row keyed (pluginId, name) is upserted at load; the periodic\n * sweep claims due rows with a CAS on next_run_at, but only while this\n * plugin is loaded. Failures land in last_status/last_error, visible in\n * `bb plugin list`.\n */\n schedule(name: string, cron: string, fn: () => void | Promise<void>): void;\n}\ninterface PluginCliCommandInfo {\n name: string;\n summary: string;\n usage: string;\n}\n/** Context forwarded from the invoking CLI when known; all fields optional. */\ninterface PluginCliContext {\n cwd?: string;\n threadId?: string;\n projectId?: string;\n /** Aborted when the invoking CLI HTTP request disconnects. */\n signal?: AbortSignal;\n}\ntype PluginInteractionCancelReason = \"user\" | \"request-aborted\" | \"thread-stopped\" | \"thread-deleted\" | \"plugin-disposed\" | \"server-restarted\" | \"timeout\";\ntype PluginInteractionResult = {\n outcome: \"submitted\";\n value: JsonValue;\n} | {\n outcome: \"cancelled\";\n reason: PluginInteractionCancelReason;\n};\ninterface PluginInteractionRequest {\n threadId: string;\n rendererId: string;\n title: string;\n payload: JsonValue;\n /** Defaults to ten minutes; capped at one hour. */\n timeoutMs?: number;\n}\ninterface PluginCliResult {\n exitCode: number;\n stdout?: string;\n stderr?: string;\n}\n/**\n * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr.\n * This is the shared source of truth for production and the testing harness.\n */\ndeclare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number;\ninterface PluginCliOutputLimitError {\n code: \"plugin_cli_output_too_large\";\n message: string;\n maxBytes: number;\n stdoutBytes: number;\n stderrBytes: number;\n totalBytes: number;\n}\n/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */\ninterface PluginCliExecutionResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n error?: PluginCliOutputLimitError;\n}\ninterface PluginCliRegistration {\n /** Top-level command name (`bb <name> …`): lowercase [a-z0-9-]+, and not\n * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */\n name: string;\n summary: string;\n /** Subcommand metadata rendered in help and the plugin-commands skill\n * without executing plugin code. Parsing argv is plugin-owned. */\n commands?: PluginCliCommandInfo[];\n run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise<PluginCliResult>;\n}\ninterface PluginCli {\n /**\n * Register this plugin's `bb` subcommand. One registration per factory\n * execution; a repeated call is rejected. Core bb commands always win\n * name collisions; reserved names are rejected at registration.\n */\n register(registration: PluginCliRegistration): void;\n}\n/** Per-turn context handed to bb.agents context providers (design §4.4). */\n/** MCP-style content parts a native tool may return (design §4.4). */\ntype PluginAgentToolContentPart = {\n type: \"text\";\n text: string;\n} | {\n type: \"image\";\n data: string;\n mimeType: string;\n};\ntype PluginAgentToolResult = string | {\n content: PluginAgentToolContentPart[];\n isError?: boolean;\n};\n/** Per-call context handed to a native tool's execute (design §4.4). */\ninterface PluginAgentToolContext {\n threadId: string;\n projectId: string;\n /** The tool-call request's abort signal (aborts if the daemon round-trip\n * is torn down mid-call). */\n signal: AbortSignal;\n}\n/**\n * Native timeline labels for a plugin tool, keyed by BB's own timeline row\n * status. This is experimental: BB may refine its presentation contract\n * before the field is stabilized.\n */\ninterface PluginAgentToolExperimentalStatusLabels {\n /** Label shown while the tool call is pending. */\n pending: string;\n /** Label shown after the tool call completes successfully. */\n completed: string;\n}\ninterface PluginAgentToolRegistrationBase {\n /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins,\n * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the\n * server). */\n name: string;\n description: string;\n /**\n * Optional usage snippet appended to the thread instructions whenever\n * this tool is in the session's tool set (mirrors the built-in\n * update_environment_directory guidance). Limited to 4096 characters.\n */\n instructions?: string;\n /**\n * Optional native timeline labels. When omitted, BB shows the standard\n * tool name and arguments (for example, `Ran tool search_docs …`). Labels\n * apply only while the call is pending and after successful completion;\n * approval, error, and interruption states keep BB's standard rendering.\n */\n experimental_statusLabels?: PluginAgentToolExperimentalStatusLabels;\n}\n/** Stable, plain-data context resolved by the server for one agent session. */\ninterface PluginAgentConfigurationContext {\n thread: {\n id: string;\n title: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n };\n project: {\n id: string;\n kind: \"standard\" | \"personal\";\n name: string;\n gitRemoteUrl: string | null;\n };\n environment: {\n id: string;\n name: string | null;\n path: string | null;\n workspaceProvisionType: \"unmanaged\" | \"managed-worktree\" | \"personal\";\n branchName: string | null;\n };\n host: {\n id: string;\n name: string;\n };\n provider: {\n id: string;\n model: string;\n };\n /** How the thread was spawned. A side chat is the builtin side-chat\n * plugin's fork: `{ kind: \"fork\", pluginId: \"side-chat\" }`. */\n origin: {\n kind: \"fork\" | null;\n pluginId: string | null;\n };\n}\n/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a\n * registered tool and overrides the parameter schema advertised to the\n * provider for this resolution only. */\ninterface PluginAgentToolSelection {\n /** Name of a tool registered by this plugin via `registerTool`. */\n name: string;\n /** JSON-schema object (root `type: \"object\"`, JSON-serializable, at most\n * 128 KiB serialized) sent to the provider in place of the registered\n * parameter schema. Execution-side validation still runs the registered\n * parameters, so the override must only narrow what the registered schema\n * already accepts. */\n parameters: Record<string, unknown>;\n}\n/** Per-resolution selection returned by {@link PluginAgents.configure}. */\ninterface PluginAgentConfiguration {\n /** Tool names registered by this plugin, or {@link PluginAgentToolSelection}\n * entries to also override a tool's advertised parameter schema for this\n * resolution. Duplicate or unknown names, or an invalid override, reject\n * this plugin's complete selection for the resolution. */\n tools: Array<string | PluginAgentToolSelection>;\n /** Skill frontmatter names from this plugin's manifest skill roots.\n * Duplicate or unknown names reject this plugin's complete selection. */\n skills: string[];\n /** Optional dynamic instructions. Output is truncated to 4096 characters. */\n instructions?: string;\n}\ninterface PluginAgents {\n /**\n * Select this plugin's statically registered tools and manifest skills for\n * each thread/session resolution, with optional dynamic instructions. The\n * callback is synchronous and runs at `thread.start` / `turn.submit`; it\n * never rebuilds registrations. Exactly one callback may be registered per\n * factory execution. A throw, malformed result, duplicate id, unknown id,\n * or more than 256 tool/skill ids fails closed for this plugin only.\n *\n * Tools take effect when the provider session is next started or resumed;\n * an already-running session is not hot-mutated. Instructions follow the\n * same boundary: a live provider session keeps the instructions it was\n * constructed with, and a changed selection applies when the session is\n * next constructed. Skill changes follow BB's environment runtime policy:\n * a busy runtime keeps its current catalog until a safe relaunch. Side chats\n * are ordinary plugin-owned forks here — read `origin` to detect them — and\n * their returned tool, skill, and dynamic-instruction selections apply at the\n * same boundaries.\n */\n configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void;\n /**\n * Register a native dynamic tool (design §4.4). `parameters` is either a\n * zod schema (validated per call; execute receives the parsed value) or a\n * plain JSON-schema object (no validation; execute receives the raw\n * arguments as `unknown`). Tool-set changes apply on the NEXT session\n * start — a tool registered mid-session is not hot-added to running\n * provider sessions. A second registration of the same name within this\n * plugin is rejected; a name already registered by another plugin is\n * rejected and surfaced as this plugin's status detail.\n */\n registerTool<Schema extends z.ZodType>(tool: PluginAgentToolRegistrationBase & {\n parameters: Schema;\n execute(params: z.output<Schema>, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n registerTool(tool: PluginAgentToolRegistrationBase & {\n /** Raw JSON-schema escape hatch; params arrive unvalidated. */\n parameters: Record<string, unknown>;\n execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise<PluginAgentToolResult>;\n }): void;\n /**\n * Contribute a dynamic section appended to thread instructions. The\n * provider runs when a thread's runtime command config is resolved\n * (thread.start / turn.submit); return null to contribute nothing for\n * that resolution. A live provider session keeps the instructions it was\n * constructed with — a changed contribution takes effect when the\n * provider session is next constructed (thread start or resume after a\n * daemon restart, environment switch, or provider restart), never\n * mid-session. Must be synchronous and fast — it sits on the\n * thread-start path. Output longer than 4096 characters is truncated; a\n * throwing provider is logged against the plugin and contributes nothing.\n * A repeated registration within one factory execution is rejected.\n */\n contributeInstructions(provider: (ctx: {\n threadId: string;\n projectId: string;\n }) => string | null): void;\n}\ntype PluginMentionTrigger = \"@\" | \"#\" | \"$\" | \"!\" | \"~\";\n/** Search context handed to a mention provider (design §4.9). `projectId`/\n * `threadId` are null when the composer has not committed one yet. */\ninterface PluginMentionSearchContext {\n trigger: PluginMentionTrigger;\n query: string;\n projectId: string | null;\n threadId: string | null;\n}\n/** One row a mention provider returns from `search`. `id` is the provider's\n * own item id — the host namespaces it before it reaches the wire. */\ninterface PluginMentionItem {\n id: string;\n title: string;\n subtitle?: string;\n icon?: string;\n}\ninterface PluginMentionProviderRegistration {\n /** Unique within this plugin: [a-zA-Z0-9_-]+ (no \":\" — the host composes\n * wire item ids as \"<providerId>:<itemId>\"). */\n id: string;\n /** Section label shown above this provider's rows in the mention menu. */\n label: string;\n /**\n * Composer trigger characters this provider should answer. Omit to use the\n * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`.\n */\n triggers?: readonly PluginMentionTrigger[];\n /**\n * Runs server-side as the user types after one of this provider's triggers\n * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow\n * or throwing provider contributes an empty list — it can never break the\n * mention menu.\n */\n search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise<PluginMentionItem[]>;\n /**\n * Resolves one picked item into agent context, called once per unique\n * item at message send time. The returned `context` is attached to the\n * message as an agent-visible (user-hidden) prompt input. Throwing blocks\n * the send with a visible error.\n */\n resolve(itemId: string): {\n context: string;\n } | Promise<{\n context: string;\n }>;\n}\ninterface PluginUi {\n /** Block until the app submits or cancels a plugin-owned composer form. */\n requestInput(request: PluginInteractionRequest, options?: {\n signal?: AbortSignal;\n }): Promise<PluginInteractionResult>;\n /**\n * Register a mention provider for the shipped app's composer (design §4.9).\n * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or\n * `~` with `triggers`. Items group under `label` in the mention menu; a\n * picked item becomes a `{ kind: \"plugin\" }` mention resource whose context\n * is resolved once at send time. Multiple providers per plugin; ids must be\n * unique within the plugin.\n */\n registerMentionProvider(provider: PluginMentionProviderRegistration): void;\n}\ninterface PluginEvents {\n /**\n * Add a thread lifecycle listener. Multiple listeners for the same event are\n * additive and run independently in registration order.\n */\n on<E extends PluginThreadEventName>(event: E, handler: PluginThreadEventHandler<E>): void;\n}\ninterface PluginServerApi {\n /**\n * This BB server's own loopback base URL (e.g. \"http://127.0.0.1:38886\"),\n * which serves the SPA + /api + /ws. For plugins that proxy or relay\n * traffic back to the server itself (e.g. a tunnel). Bind-gated like\n * `bb.sdk`: reading it before the server is listening throws, so prefer\n * reading it from handlers, services, and timers.\n */\n readonly loopbackBaseUrl: string;\n}\ninterface PluginSharedPortTunnelIdentity {\n /** Gate routing label assigned to this machine. */\n label: string;\n /** Gate apex without a scheme, e.g. \"getbb.app\". */\n baseDomain: string;\n}\ninterface PluginHosts {\n /**\n * Ensure this enrolled host has a gate label and return its read-only public\n * identity. The daemon chooses the trusted gate and desired label; plugins\n * cannot influence either credential-bearing destination.\n */\n ensureSharedPortTunnel(hostId: string): Promise<PluginSharedPortTunnelIdentity>;\n /**\n * Replace this plugin's desired shared-loopback ports for one host. The\n * server aggregates declarations, owns generations, and delivers the\n * resulting set to that host's daemon. Tunnel identity is deliberately not\n * accepted here: it is owned by the daemon's trusted enrollment.\n */\n declareSharedPorts(hostId: string, ports: readonly number[]): void;\n}\ninterface PluginStatusApi {\n /**\n * Mark this plugin `needs-configuration` (with a message shown in\n * `bb plugin list` and the UI) instead of failing — e.g. a factory or\n * service that finds no API key configured. Cleared on the next load;\n * saving settings does not auto-reload in V1, so ask the user to\n * `bb plugin reload <id>` after configuring.\n */\n needsConfiguration(message: string): void;\n}\n/**\n * The API object handed to a plugin's factory (design §4). Implemented by\n * the BB server; this contract is what plugin `server.ts` files compile\n * against.\n */\ninterface BbPluginApi {\n /** The plugin's own id (namespaces storage, routes, commands). */\n readonly pluginId: string;\n /** Leveled, plugin-scoped logger. */\n readonly log: PluginLogger;\n /** Declarative settings (design §4.2). */\n readonly settings: PluginSettings;\n /** Namespaced KV + per-plugin database (design §4.3). */\n readonly storage: PluginStorage;\n /** HTTP routes under /api/v1/plugins/<id>/http/* (design §4.6). */\n readonly http: PluginHttp;\n /** RPC methods under /api/v1/plugins/<id>/rpc/<method> (design §4.6). */\n readonly rpc: PluginRpc;\n /** Ephemeral push to connected frontends (design §4.7). */\n readonly realtime: PluginRealtime;\n /** Long-lived services + cron schedules (design §4.8). */\n readonly background: PluginBackground;\n /** Agent-facing `bb` CLI subcommand (design §4.4). */\n readonly cli: PluginCli;\n /** Per-turn agent context contributions (design §4.4). */\n readonly agents: PluginAgents;\n /** Host-rendered UI contributions (design §4.9). */\n readonly ui: PluginUi;\n /** Additive plugin lifecycle listeners (design §4.5). */\n readonly events: PluginEvents;\n /** Plugin-reported status (needs-configuration). */\n readonly status: PluginStatusApi;\n /** Read-only facts about the running server (loopback base URL). */\n readonly server: PluginServerApi;\n /** Server-to-daemon host control-plane declarations. */\n readonly hosts: PluginHosts;\n /**\n * The full BB SDK, bound to this server over loopback (design §4.1).\n * Bind-gated: reading this before the host binds the SDK throws. The real\n * server binds it before loading plugins, so it is available from the\n * moment factories run there — but isolated harnesses may not, so prefer\n * using it from handlers, services, and timers for portability.\n * `threads.spawn` defaults `origin` to \"plugin\" and `originPluginId` to\n * this plugin's id so spawned threads are attributed automatically.\n */\n readonly sdk: BbSdk;\n /**\n * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO.\n * The sanctioned place to clear timers and close connections.\n */\n onDispose(hook: () => void | Promise<void>): void;\n}\n\nexport { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract };\nexport type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolExperimentalStatusLabels, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginSidebarProject, PluginSidebarPullRequest, PluginSidebarSplitPane, PluginSidebarThread, PluginSidebarThreadActions, PluginSidebarThreadActivity, PluginSidebarThreadIndicator, PluginSidebarThreadPullRequestState, PluginSidebarThreadSplit, PluginSidebarThreadsState, PluginSidebarWorkspaceKind, PluginStatusApi, PluginStorage, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; export const PLUGIN_SDK_APP_DTS = "// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB\n// workspace contracts are flattened; public subpaths may reuse the\n// package root without requiring any other @bb/* package.\n//\n// Confused by the API, or need a symbol that isn't here? Clone the BB repo\n// and read the real source: https://github.com/get-bb/bb\n\nimport * as react from 'react';\nimport { ComponentType, ReactNode } from 'react';\nimport { z } from 'zod';\n\n/** A JSON-safe path segment reported by a Standard Schema validation issue. */\ntype PluginRpcIssuePathSegment = string | number;\n/** Validator-neutral validation detail carried by an RPC error envelope. */\ninterface PluginRpcValidationIssue {\n message: string;\n path?: PluginRpcIssuePathSegment[];\n}\n/** Stable wire error categories for plugin RPC. */\ntype PluginRpcErrorCode = \"invalid_json\" | \"invalid_input\" | \"handler_error\" | \"invalid_output\" | \"non_json_result\" | \"unknown_method\";\n/** Structured RPC failure returned as `{ ok: false, error }`. */\ninterface PluginRpcError {\n code: PluginRpcErrorCode;\n message: string;\n issues?: PluginRpcValidationIssue[];\n}\n/**\n * The validator-neutral subset of Standard Schema v1 used by plugin RPC.\n * Zod 4 schemas implement this interface directly; other validators can do\n * the same without becoming part of BB's public protocol.\n */\ninterface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (value: unknown) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>;\n readonly types?: {\n readonly input: Input;\n readonly output: Output;\n };\n };\n}\ntype StandardSchemaV1Result<Output> = {\n readonly value: Output;\n readonly issues?: undefined;\n} | {\n readonly issues: readonly StandardSchemaV1Issue[];\n};\ninterface StandardSchemaV1Issue {\n readonly message: string;\n readonly path?: PropertyKey | readonly (PropertyKey | {\n readonly key: PropertyKey;\n })[];\n}\ntype StandardSchemaV1InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"input\"];\ntype StandardSchemaV1InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema[\"~standard\"][\"types\"]>[\"output\"];\ninterface PluginRpcMethodContract<InputSchema extends StandardSchemaV1 = StandardSchemaV1, OutputSchema extends StandardSchemaV1 = StandardSchemaV1> {\n readonly input: InputSchema;\n readonly output: OutputSchema;\n}\ntype PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract>>;\ntype PluginRpcHandlers<Contract extends PluginRpcContract> = {\n [Method in keyof Contract]: (input: StandardSchemaV1InferOutput<Contract[Method][\"input\"]>) => StandardSchemaV1InferInput<Contract[Method][\"output\"]> | Promise<StandardSchemaV1InferInput<Contract[Method][\"output\"]>>;\n};\ntype PluginRpcCallInput<Method extends PluginRpcMethodContract> = StandardSchemaV1InferInput<Method[\"input\"]>;\ntype PluginRpcCallArgs<Method extends PluginRpcMethodContract> = null extends PluginRpcCallInput<Method> ? [input?: PluginRpcCallInput<Method>] : [input: PluginRpcCallInput<Method>];\ntype PluginRpcResult<Method extends PluginRpcMethodContract> = StandardSchemaV1InferOutput<Method[\"output\"]>;\n\ndeclare const reasoningLevelSchema: z.ZodEnum<{\n none: \"none\";\n low: \"low\";\n medium: \"medium\";\n high: \"high\";\n xhigh: \"xhigh\";\n ultracode: \"ultracode\";\n max: \"max\";\n ultra: \"ultra\";\n}>;\ntype ReasoningLevel = z.infer<typeof reasoningLevelSchema>;\ndeclare const serviceTierSchema: z.ZodEnum<{\n default: \"default\";\n fast: \"fast\";\n}>;\ntype ServiceTier = z.infer<typeof serviceTierSchema>;\ndeclare const permissionModeSchema: z.ZodEnum<{\n full: \"full\";\n auto: \"auto\";\n \"accept-edits\": \"accept-edits\";\n}>;\ntype PermissionMode = z.infer<typeof permissionModeSchema>;\ndeclare const promptInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"text\">;\n text: z.ZodString;\n mentions: z.ZodDefault<z.ZodArray<z.ZodObject<{\n start: z.ZodNumber;\n end: z.ZodNumber;\n resource: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"thread\">;\n threadId: z.ZodString;\n projectId: z.ZodOptional<z.ZodString>;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"project\">;\n projectId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"section\">;\n sectionId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"path\">;\n source: z.ZodEnum<{\n workspace: \"workspace\";\n \"thread-storage\": \"thread-storage\";\n }>;\n entryKind: z.ZodEnum<{\n file: \"file\";\n directory: \"directory\";\n }>;\n path: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"command\">;\n trigger: z.ZodEnum<{\n \"/\": \"/\";\n }>;\n name: z.ZodString;\n source: z.ZodEnum<{\n command: \"command\";\n skill: \"skill\";\n }>;\n origin: z.ZodEnum<{\n user: \"user\";\n project: \"project\";\n builtin: \"builtin\";\n }>;\n label: z.ZodString;\n argumentHint: z.ZodNullable<z.ZodString>;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"plugin\">;\n pluginId: z.ZodString;\n icon: z.ZodOptional<z.ZodNullable<z.ZodString>>;\n itemId: z.ZodString;\n label: z.ZodString;\n }, z.core.$strip>], \"kind\">>;\n }, z.core.$strip>>>;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"image\">;\n url: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localImage\">;\n path: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n visibility: z.ZodOptional<z.ZodEnum<{\n \"agent-only\": \"agent-only\";\n }>>;\n type: z.ZodLiteral<\"localFile\">;\n path: z.ZodString;\n name: z.ZodOptional<z.ZodString>;\n sizeBytes: z.ZodOptional<z.ZodNumber>;\n mimeType: z.ZodOptional<z.ZodString>;\n}, z.core.$strip>], \"type\">;\ntype PromptInput = z.infer<typeof promptInputSchema>;\n\ndeclare const createThreadEnvironmentArgsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"reuse\">;\n environmentId: z.ZodString;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"host\">;\n hostId: z.ZodOptional<z.ZodString>;\n workspace: z.ZodDiscriminatedUnion<[z.ZodObject<{\n type: z.ZodLiteral<\"unmanaged\">;\n path: z.ZodNullable<z.ZodString>;\n branch: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"existing\">;\n name: z.ZodString;\n }, z.core.$strict>, z.ZodObject<{\n kind: z.ZodLiteral<\"new\">;\n baseBranch: z.ZodString;\n }, z.core.$strict>], \"kind\">>;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"managed-worktree\">;\n baseBranch: z.ZodDiscriminatedUnion<[z.ZodObject<{\n kind: z.ZodLiteral<\"named\">;\n name: z.ZodString;\n }, z.core.$strip>, z.ZodObject<{\n kind: z.ZodLiteral<\"default\">;\n }, z.core.$strip>], \"kind\">;\n }, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"personal\">;\n }, z.core.$strip>], \"type\">;\n}, z.core.$strip>, z.ZodObject<{\n type: z.ZodLiteral<\"project-default\">;\n}, z.core.$strip>], \"type\">;\ntype CreateThreadEnvironmentArgs = z.infer<typeof createThreadEnvironmentArgsSchema>;\n\ndeclare const createExecutionInputSourcesSchema: z.ZodObject<{\n providerId: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n model: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n serviceTier: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n reasoningLevel: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n permissionMode: z.ZodOptional<z.ZodEnum<{\n explicit: \"explicit\";\n \"client-preference\": \"client-preference\";\n }>>;\n}, z.core.$strict>;\ntype CreateExecutionInputSources = z.infer<typeof createExecutionInputSourcesSchema>;\n\n/**\n * A value that survives a JSON round trip without coercion or data loss.\n *\n * Host boundaries still validate values at runtime because TypeScript cannot\n * exclude non-finite numbers and plugin bundles can bypass static types.\n */\ntype JsonValue = string | number | boolean | null | JsonValue[] | {\n [key: string]: JsonValue;\n};\n\n/**\n * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no\n * side effects. The BB app imports these to keep its real implementation in\n * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through\n * `@bb/plugin-sdk/app`.\n *\n * Per-slot props are versioned contracts: additive-only within an SDK major.\n */\n/** Props passed to a `homepageSection` component. */\ninterface PluginHomepageSectionProps {\n /** Project in view on the compose surface; null when none is selected. */\n projectId: string | null;\n}\n/**\n * Props passed to a `settingsSection` component.\n *\n * Deliberately empty in V1; versioned additive like the other slot props.\n */\ninterface PluginSettingsSectionProps {\n}\n/** Props passed to a `navPanel` component (it owns its whole route). */\ninterface PluginNavPanelProps {\n /**\n * The route remainder after the panel root, \"\" at the root. The panel's\n * route is `/plugins/<pluginId>/<path>/*`, so a deep link like\n * `/plugins/notes/notes/work/ideas.md` renders the panel with\n * `subPath: \"work/ideas.md\"`. Navigate within the panel via\n * `useBbNavigate().toPluginPanel(path, { subPath })` — browser\n * back/forward then walks panel-internal history.\n */\n subPath: string;\n}\n/** Props passed to a panel tab opened by a `threadPanelAction`. */\ninterface PluginThreadPanelProps {\n threadId: string;\n /**\n * The JSON value the action's `openPanel` call passed (round-tripped\n * through persistence, so the tab restores across reloads); null when the\n * action opened the panel without params.\n */\n params: JsonValue | null;\n}\ninterface PluginPendingInteractionView {\n id: string;\n threadId: string;\n title: string;\n payload: JsonValue;\n createdAt: number;\n expiresAt: number | null;\n}\ninterface PluginPendingInteractionProps {\n interaction: PluginPendingInteractionView;\n submit(value: JsonValue): Promise<void>;\n cancel(): Promise<void>;\n}\n/**\n * Props for a `sidebarFooterAction` — host-rendered (no plugin component).\n * Deliberately empty; the registration's `run` carries the behavior.\n */\ninterface PluginSidebarFooterActionProps {\n}\n/**\n * Props passed to an `experimental_threadList` component — the sidebar's\n * scrolling thread area, replaced wholesale by one plugin.\n */\ninterface PluginThreadListProps {\n /** The thread the route currently shows; null on non-thread routes. */\n activeThreadId: string | null;\n /** The project the route currently shows; null when none is selected. */\n activeProjectId: string | null;\n /** True on phone-width viewports and coarse pointers. */\n isCompactViewport: boolean;\n /**\n * Call after the user opens a thread. It closes the mobile sidebar drawer,\n * and it clears the host search field on every viewport. Always call it, or\n * the sidebar stays in search mode after the thread opens.\n */\n onNavigate: () => void;\n /**\n * The host search field's current text, or \"\" when the field is closed.\n * The host owns that field, so a plugin list filters by this rather than\n * shipping a second search box.\n */\n searchQuery: string;\n}\n/**\n * Props passed to an `experimental_threadHeaderAction` component, rendered in\n * the thread header's action row.\n */\ninterface PluginThreadHeaderActionProps {\n /**\n * The thread this header belongs to. Never null: the slot is not rendered\n * on the compose screen or other non-thread routes. A split layout renders\n * one header per pane, so the component mounts once per visible thread,\n * each with its own id — keep per-thread state in the component, never in a\n * module-level singleton.\n */\n threadId: string;\n projectId: string;\n /**\n * True on phone-width viewports and coarse pointers. Collapse to an\n * icon-sized control when it is true — the row is short.\n */\n isCompactViewport: boolean;\n}\n/**\n * Where a file being opened by a `fileOpener` lives. `path` semantics follow\n * the source: workspace paths are relative to the environment's worktree,\n * thread-storage paths are relative to the thread's storage root, host paths\n * are absolute on the thread's host.\n */\ninterface PluginFileOpenerSource {\n kind: \"workspace\" | \"host\" | \"thread-storage\";\n threadId: string | null;\n environmentId: string | null;\n projectId: string | null;\n}\n/** Props passed to a `fileOpener` component (rendered as a panel file tab). */\ninterface PluginFileOpenerProps {\n path: string;\n source: PluginFileOpenerSource;\n}\n/**\n * Message context passed to a `messageDirective` component — the assistant\n * (or nested agent) message that contained the directive.\n */\ninterface PluginMessageDirectiveMessage {\n id: string;\n threadId: string;\n turnId: string | null;\n projectId: string | null;\n}\n/**\n * Open a worktree-relative file in the host's workspace file viewer. Returns\n * true when the host accepted the path; false when the path is invalid or the\n * viewer declined it.\n */\ntype PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean;\n/**\n * Props passed to a `messageDirective` component. Attributes are untrusted\n * strings parsed from the directive; the plugin validates its own fields.\n */\ninterface PluginMessageDirectiveProps {\n /** Parsed, untrusted directive attributes (e.g. `{ file: \"demo.html\" }`). */\n attributes: Readonly<Record<string, string>>;\n /** Original directive source text (useful for diagnostics / crash fallback). */\n source: string;\n message: PluginMessageDirectiveMessage;\n /**\n * Opens a worktree-relative file in the host's workspace file viewer. Null\n * when the message surface has no workspace viewer available.\n */\n openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null;\n}\ninterface PluginHomepageSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n component: ComponentType<PluginHomepageSectionProps>;\n}\ninterface PluginSettingsSectionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Optional host-rendered section heading. */\n title?: string;\n /**\n * Optional one-line host-rendered subheading under `title`, in the built-in\n * SettingsSection idiom (ignored when `title` is absent).\n */\n description?: string;\n component: ComponentType<PluginSettingsSectionProps>;\n}\ninterface PluginNavPanelRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /** URL segment under `/plugins/<pluginId>/`; letters, digits, `-`, `_`. */\n path: string;\n component: ComponentType<PluginNavPanelProps>;\n /**\n * Optional component rendered on the right side of the shared title bar\n * (e.g. a sync button or a count). Contained separately from the body: a\n * throwing headerContent is hidden without breaking the title bar.\n */\n headerContent?: ComponentType<PluginNavPanelProps>;\n}\n/** Context handed to a `threadPanelAction`'s `run`. */\ninterface PluginThreadPanelActionContext {\n /** The thread whose panel launcher invoked the action. */\n threadId: string;\n /**\n * Open a tab in the thread's side panel rendering this action's\n * `component`. `title` labels the tab (default: the action's `title`);\n * `params` must be JSON-serializable — it is persisted with the tab and\n * reaches the component as its `params` prop. Opening with params\n * identical to an already-open tab of this action focuses that tab\n * (updating its title) instead of duplicating it. May be called more than\n * once (different params ⇒ multiple tabs) or not at all.\n */\n openPanel(options?: {\n title?: string;\n params?: JsonValue;\n }): void;\n}\ninterface PluginThreadPanelActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label of the action row in the panel's new-tab launcher. */\n title: string;\n /**\n * Icon hint (BB icon name) used when the plugin ships no logo; the\n * launcher row and opened tabs prefer the plugin's logo.\n */\n icon?: string;\n /** Rendered inside every panel tab this action opens. */\n component: ComponentType<PluginThreadPanelProps>;\n /**\n * How the host frames the tab content. \"padded\" (default) wraps the\n * component in the panel's scroll container with standard padding —\n * right for document-like content. \"flush\" gives the component the full\n * tab area (no padding, definite height, no host scrolling) — right for\n * app-like content that manages its own layout, such as\n * `ThreadChat`.\n */\n layout?: \"padded\" | \"flush\";\n /**\n * Runs when the user activates the action: call your RPC methods, show a\n * toast, and/or open panel tabs via `context.openPanel`. Omitted =\n * immediately open a panel tab with defaults. Errors (sync or async) are\n * contained and logged; they never break the launcher.\n */\n run?(context: PluginThreadPanelActionContext): void | Promise<void>;\n}\ninterface PluginPendingInteractionRegistration {\n /** Matches `rendererId` passed to `bb.ui.requestInput`. */\n id: string;\n component: ComponentType<PluginPendingInteractionProps>;\n}\n/** Context handed to a `sidebarFooterAction`'s `run`. */\ninterface PluginSidebarFooterActionContext {\n /**\n * Navigate to this plugin's detail page in Tools, where declarative settings\n * and `settingsSection` slots render.\n */\n openSettings(): void;\n}\n/**\n * An icon button in the app sidebar footer (next to Settings / bug report).\n * Host-rendered for consistent chrome — plugins supply icon, label, and\n * `run` behavior only.\n */\ninterface PluginSidebarFooterActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip and accessible label for the icon button. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon: string;\n /**\n * Runs when the user activates the action (e.g. call `openSettings()`,\n * open a panel via other surfaces, toast). Errors (sync or async) are\n * contained and logged; they never break the sidebar.\n */\n run(context: PluginSidebarFooterActionContext): void | Promise<void>;\n}\n/**\n * The one status bb would paint for a thread, already resolved through the\n * host's precedence (attention before work; plan and goal before the generic\n * spinner). Draw your own glyph for it — the SDK ships no status component.\n *\n * Treat an unrecognized value as \"none\": bb adds kinds over time, and an\n * older plugin must degrade to drawing nothing rather than throwing.\n *\n * \"draft\" and \"working-draft\" are never reported here: an unsubmitted composer\n * draft is per-client state the host reads per row, which an array-wide view\n * cannot. A thread holding a draft reports whatever it would report without\n * one.\n */\ntype PluginSidebarThreadIndicator = \"unread-error\" | \"waiting-for-input\" | \"working-draft\" | \"workflow\" | \"background-agent\" | \"background-command\" | \"plan-mode\" | \"goal\" | \"runtime\" | \"draft\" | \"unread-success\" | \"none\";\n/**\n * How a thread's environment presents its workspace: a worktree bb manages,\n * a worktree the user manages, or anything else (a plain checkout).\n */\ntype PluginSidebarWorkspaceKind = \"managed-worktree\" | \"unmanaged-worktree\" | \"other\";\n/** Live work counts on a thread. All zero means nothing is running. */\ninterface PluginSidebarThreadActivity {\n workflows: number;\n backgroundAgents: number;\n backgroundCommands: number;\n planMode: number;\n goals: number;\n}\n/**\n * One thread in the sidebar's live view.\n *\n * A deliberate copy of the fields a sidebar needs — not a re-export of the\n * host's internal thread row type, which changes whenever the app needs a\n * field. Timestamps are epoch milliseconds.\n */\ninterface PluginSidebarThread {\n id: string;\n projectId: string;\n /** Null while a thread is still unnamed; pair with `titleFallback`. */\n title: string | null;\n titleFallback: string | null;\n /** The thread this one was forked from or spawned under; null at the root. */\n parentThreadId: string | null;\n sectionId: string | null;\n /** How this thread came to exist under its parent; null for root threads. */\n originKind: \"fork\" | \"side-chat\" | null;\n /** The plugin that spawned it, or null for non-plugin origins. */\n originPluginId: string | null;\n /** The agent provider this thread runs on, e.g. \"codex\", \"claude-code\". */\n providerId: string;\n /** The agent is blocked on the user: an approval or a question. */\n hasPendingInteraction: boolean;\n activity: PluginSidebarThreadActivity;\n indicator: PluginSidebarThreadIndicator;\n /**\n * The host's accessible label for `indicator`, e.g. \"Thread needs user\n * input\"; null when the indicator is \"none\". Use it for `aria-label` so\n * screen-reader text stays consistent across sidebars.\n */\n indicatorLabel: string | null;\n isUnread: boolean;\n isPinned: boolean;\n isArchived: boolean;\n environment: {\n id: string | null;\n name: string | null;\n branchName: string | null;\n workspaceDisplayKind: PluginSidebarWorkspaceKind;\n } | null;\n /**\n * The machine this thread's work runs on, with the name resolved for you.\n * Null when the thread has no environment yet, or when its host is not in\n * the known-hosts list. Useful where a thread has no branch to show — a\n * personal-project thread has a machine but no worktree.\n */\n host: {\n id: string;\n name: string;\n } | null;\n createdAt: number;\n updatedAt: number;\n lastReadAt: number | null;\n latestAttentionAt: number;\n}\n/**\n * The pull request for a thread's branch, narrowed to what a sidebar row\n * needs. `attention` is bb's rolled-up \"does this need you\" signal, so a row\n * can colour a badge without reading checks, review, and mergeability itself.\n */\ninterface PluginSidebarPullRequest {\n number: number;\n title: string;\n url: string;\n state: \"draft\" | \"open\" | \"merged\" | \"closed\";\n attention: \"checks_failed\" | \"checks_pending\" | \"changes_requested\" | \"review_requested\" | \"conflicts\" | \"blocked\" | \"draft\" | \"ready_to_merge\" | \"merged\" | \"closed\" | \"none\";\n}\ninterface PluginSidebarThreadPullRequestState {\n /** True while the first lookup for this thread's environment is in flight. */\n isLoading: boolean;\n /**\n * The pull request, or null when the branch has none, the thread has no\n * environment, or the lookup could not run (a git-host hiccup). A row should\n * treat null as \"nothing to show\", never as an error.\n */\n pullRequest: PluginSidebarPullRequest | null;\n}\n/** One project in the sidebar's live view. */\ninterface PluginSidebarProject {\n id: string;\n name: string;\n /** True for the implicit personal project. */\n isPersonal: boolean;\n}\ninterface PluginSidebarThreadsState {\n status: \"loading\" | \"ready\" | \"error\";\n threads: readonly PluginSidebarThread[];\n projects: readonly PluginSidebarProject[];\n}\n/**\n * Act on threads from a plugin surface. Every method routes to the host's own\n * flow, so optimistic updates, toasts, dialogs, pane closing, and route repair\n * behave exactly as they do in the built-in sidebar. Unknown thread ids are\n * ignored by `open` and rejected by the rest.\n */\ninterface PluginSidebarThreadActions {\n /**\n * Navigate to a thread. `split: true` applies bb's split placement rules —\n * a right split by default, focus when the thread is already open, replace\n * at the pane cap — and falls back to plain navigation where splits are off.\n */\n open(threadId: string, options?: {\n split?: boolean;\n }): void;\n /**\n * Go to the new-thread screen. Passing `projectId` also makes that project\n * the composer's selection, so the thread is created where you asked.\n */\n openNewThread(options?: {\n projectId?: string;\n focusPrompt?: boolean;\n }): void;\n setPinned(threadId: string, pinned: boolean): Promise<void>;\n setRead(threadId: string, read: boolean): Promise<void>;\n /** Silent rename — no dialog. For inline editing in your own row. */\n rename(threadId: string, title: string): Promise<void>;\n /** Archives the thread AND its children, closing any panes showing them. */\n archive(threadId: string): void;\n /**\n * Opens bb's delete confirmation, which counts child threads first. Deletion\n * is destructive and recursive, so the host owns the confirmation: there is\n * deliberately no silent `delete`.\n */\n requestDelete(threadId: string): void;\n}\n/**\n * Render a plugin component in the thread header's action row.\n *\n * The frontend sibling of the backend `bb.ui.registerThreadAction`, which\n * renders a host-owned button and runs server-side. Use that one for \"do a\n * thing\"; use this one when the control must draw live state.\n *\n * The host places it at the left end of the action row, before the workspace\n * button, git actions, the panel toggle, maximize, and close. That row is a\n * 48px chrome row with 28px controls: render one inline control that fits, and\n * put anything taller in a portalled popover.\n */\ninterface PluginThreadHeaderActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Names the region the host wraps around your component (a labelled group).\n * It does NOT label your control: an icon-only button still needs its own\n * accessible name.\n */\n title: string;\n component: ComponentType<PluginThreadHeaderActionProps>;\n}\n/** One pane's place in the split layout, as fractions of the split area. */\ninterface PluginSidebarSplitPane {\n paneId: string;\n rect: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n /** This pane holds the thread the row represents. */\n isMe: boolean;\n isFocused: boolean;\n}\n/**\n * Drag-to-split support for one row, plus where that thread currently sits in\n * the split layout.\n */\ninterface PluginSidebarThreadSplit {\n /**\n * Spread onto the row's interactive element. Carries the pointer handler\n * that starts a split drag; empty when splits are unavailable, so spreading\n * it is always safe.\n *\n * The host owns every rule: the gesture engages only once the pointer leaves\n * the sidebar toward the main area (so a list with its own drag-to-reorder\n * keeps working), an edge drop splits, a center drop replaces, an\n * already-open thread focuses its pane, and the pane cap coerces a split\n * into a replace.\n */\n splitProps: {\n onPointerDown?: (event: react.PointerEvent<HTMLElement>) => void;\n };\n /**\n * False on compact viewports, when the user disabled splits, and for an\n * unknown thread id. Gate any \"open in split\" affordance you draw on it.\n */\n isAvailable: boolean;\n /**\n * Where this thread sits in the split layout, or null when it is not open in\n * one (including single-pane layouts). Draw a mini-map, a tint, or nothing.\n */\n layout: {\n panes: readonly PluginSidebarSplitPane[];\n } | null;\n}\n/**\n * Replace the sidebar's thread list with a plugin component.\n *\n * Unlike every other slot, this one is EXCLUSIVE: two lists cannot share one\n * scroll area. The built-in list stays the default; the user picks a provider\n * in Settings → Appearance, stored per client. A provider that is uninstalled,\n * disabled, or crashing falls back to the built-in list rather than leaving\n * the user with no sidebar.\n *\n * The plugin gets the scrolling list and nothing else. The New-thread button,\n * the search field, the plugin nav rows, and the footer stay host-rendered in\n * every sidebar — they are shared surfaces (other plugins live in two of\n * them), and a replaced list must not be able to remove them.\n */\ninterface PluginThreadListRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the Settings → Appearance → Sidebar picker. */\n title: string;\n /** Optional one-line description under the title in that picker. */\n description?: string;\n component: ComponentType<PluginThreadListProps>;\n}\n/**\n * Register this plugin as a viewer/editor for file extensions. The user\n * picks (and can set as default) an opener per extension via the file tab's\n * \"Open with\" menu; matching files opened in the panel then render\n * `component` in a plugin tab instead of the built-in preview. Applies to\n * working-tree, host, and thread-storage files — never to git-ref snapshots\n * (diff views always use the built-in preview). The built-in preview stays\n * one menu click away, and a missing/disabled opener falls back to it.\n */\ninterface PluginFileOpenerRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Label in the \"Open with\" menu (e.g. \"Notes editor\"). */\n title: string;\n /** Lowercase extensions without the dot (e.g. [\"md\", \"mdx\"]). */\n extensions: readonly string[];\n component: ComponentType<PluginFileOpenerProps>;\n}\n/**\n * Register a leaf message directive rendered inside assistant (and nested\n * agent) message Markdown. `id` is the directive name: `inline-vis` matches\n * `::inline-vis{file=\"demo.html\"}`.\n */\ninterface PluginMessageDirectiveRegistration {\n /**\n * The directive name. Lowercase kebab-case beginning with a letter.\n */\n id: string;\n component: ComponentType<PluginMessageDirectiveProps>;\n}\n/**\n * A narrow, stable reference to one rendered chat message — NOT an internal\n * timeline row. `sourceSeqEnd` is the last source event sequence the message\n * covers, the anchor the server accepts for provider-history forks.\n */\ninterface ThreadChatMessageReference {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n /** Visible text of the message. */\n text: string;\n sourceSeqEnd: number;\n}\ninterface PluginMessageActionThreadPanelOptions {\n /** A `threadPanelAction` id registered by this same plugin. */\n actionId: string;\n title?: string;\n params?: JsonValue;\n}\n/** Context handed to a `messageAction`'s `run`. */\ninterface PluginMessageActionContext {\n /** The thread whose timeline surfaced the action. */\n threadId: string;\n message: ThreadChatMessageReference;\n /**\n * Present only when the action was invoked from the text-selection menu;\n * the exact text the user highlighted inside `message`.\n */\n selectedText?: string;\n /**\n * Open one of this plugin's `threadPanelAction` components in the current\n * thread's side panel — the registration-callback equivalent of\n * `useBbNavigate().openThreadPanel`. Returns true when the host\n * accepted (the action id exists and the surface has a panel); false\n * otherwise.\n */\n openPanel(options: PluginMessageActionThreadPanelOptions): boolean;\n}\n/**\n * An action on chat messages: an icon button in the per-message action bar\n * (user and assistant messages) and an entry in the assistant-message\n * text-selection menu. Host-rendered chrome — the plugin supplies title,\n * icon hint, and `run` behavior only.\n */\ninterface PluginMessageActionRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(context: PluginMessageActionContext): void | Promise<void>;\n}\ninterface PluginAppSlots {\n homepageSection(registration: PluginHomepageSectionRegistration): void;\n settingsSection(registration: PluginSettingsSectionRegistration): void;\n navPanel(registration: PluginNavPanelRegistration): void;\n threadPanelAction(registration: PluginThreadPanelActionRegistration): void;\n pendingInteraction(registration: PluginPendingInteractionRegistration): void;\n sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void;\n /**\n * Replace the sidebar's thread list (see\n * {@link PluginThreadListRegistration}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_threadList(registration: PluginThreadListRegistration): void;\n /**\n * Render a component in the thread header's action row (see\n * {@link PluginThreadHeaderActionRegistration}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_threadHeaderAction(registration: PluginThreadHeaderActionRegistration): void;\n fileOpener(registration: PluginFileOpenerRegistration): void;\n messageDirective(registration: PluginMessageDirectiveRegistration): void;\n messageAction(registration: PluginMessageActionRegistration): void;\n}\ninterface PluginAppComposer {\n customize(registration: ComposerCustomization): void;\n}\n/** Stable lifecycle values for one content-script instance in one bb client. */\ninterface PluginContentScriptContext {\n /** The id of the plugin that owns this script. */\n readonly pluginId: string;\n /** Monotonic per-client generation, starting at 1. */\n readonly generation: number;\n /** Aborted before cleanup begins on replacement, deactivation, or teardown. */\n readonly signal: AbortSignal;\n /**\n * Persistently decorate any thread row for this plugin generation.\n *\n * The status is owned by the frontend generation and therefore survives\n * route changes. Passing `null` clears the plugin's status for that thread.\n * The host clears every remaining status when the frontend generation\n * deactivates.\n *\n * Optional so bundles can feature-detect support while this experimental\n * surface rolls out across 0.x clients.\n */\n readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void;\n}\n/** Cleanup returned by a frontend content script. */\ntype PluginContentScriptDisposer = () => void | Promise<void>;\n/**\n * Trusted same-origin JavaScript/TypeScript mounted once per active frontend\n * generation in each bb app window or browser tab.\n */\ninterface PluginContentScriptRegistration {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /**\n * Install behavior into the bb app shell. The host awaits a returned\n * promise, contains failures, and calls the returned disposer exactly once.\n */\n mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise<void | PluginContentScriptDisposer>;\n}\n/** Lifecycle surface for trusted frontend content scripts. */\ninterface PluginAppContentScripts {\n register(registration: PluginContentScriptRegistration): void;\n}\ninterface PluginAppBuilder {\n slots: PluginAppSlots;\n composer: PluginAppComposer;\n contentScripts: PluginAppContentScripts;\n}\ntype PluginAppSetup = (app: PluginAppBuilder) => void;\n/**\n * The opaque product of `definePluginApp` — a plugin's `app.tsx` default\n * export. The host re-runs `setup` against a fresh collector on every\n * (re)interpretation, replacing that plugin's registrations wholesale.\n */\ninterface PluginAppDefinition {\n /** Brand the host checks before interpreting a bundle's default export. */\n readonly __bbPluginApp: true;\n readonly setup: PluginAppSetup;\n}\ninterface PluginRpcClient<Contract extends PluginRpcContract = PluginRpcContract> {\n /**\n * Invoke one of the plugin's `bb.rpc` methods (POST\n * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's\n * inferred output; rejects with an `Error` carrying the server's message,\n * stable `code`, and validation `issues` when present.\n */\n call<Method extends Extract<keyof Contract, string>>(method: Method, ...args: PluginRpcCallArgs<Contract[Method]>): Promise<PluginRpcResult<Contract[Method]>>;\n}\ninterface PluginSettingsState {\n /**\n * Effective non-secret setting values (secret settings are excluded —\n * read them server-side). Undefined while loading or unavailable.\n */\n values: Record<string, string | boolean> | undefined;\n isLoading: boolean;\n}\n/** State of the app's shared realtime connection to the bb server. */\ntype PluginRealtimeConnectionState = \"connecting\" | \"connected\" | \"reconnecting\";\n/** Where `useComposer()` writes. */\ntype PluginComposerScope = {\n kind: \"thread\";\n threadId: string;\n} | {\n kind: \"queued-message\";\n threadId: string;\n queuedMessageId: string;\n} | {\n kind: \"side-chat\";\n projectId: string;\n parentThreadId: string;\n tabId: string;\n childThreadId: string | null;\n} | {\n kind: \"new-thread\";\n /** Root compose's effective selected project; null only while unresolved. */\n projectId: string | null;\n};\n/** One plugin-owned composer customization registration. */\ninterface ComposerCustomization {\n /** Unique within the plugin; letters, digits, `-`, `_`. */\n id: string;\n /** Composer kinds where this customization is active; omit for all kinds. */\n scopes?: readonly PluginComposerScope[\"kind\"][];\n actions?: readonly {\n id: string;\n component: ComponentType;\n }[];\n banners?: readonly {\n id: string;\n /** Host chrome around the banner. Defaults to `\"card\"`. */\n chrome?: \"card\" | \"bare\";\n component: ComponentType;\n }[];\n plusMenu?: readonly ComposerPlusMenuItem[];\n richText?: ComposerRichTextSpec;\n}\n/** Host-rendered menu row in the composer's `+` menu. */\ninterface ComposerPlusMenuItem {\n id: string;\n label: string;\n /** BB icon name; unknown names fall back to the generic plugin icon. */\n icon?: string;\n /** Accessible description for the host-rendered row. */\n description?: string;\n disabled?: boolean | ((view: ComposerView) => boolean);\n run(context: {\n composer: PluginComposerApi;\n view: ComposerView;\n }): void | Promise<void>;\n}\n/** Reactive read-side of the composer a plugin surface is mounted in. */\ninterface ComposerView {\n scope: PluginComposerScope;\n layout: \"expanded\" | \"compact\" | \"zen\";\n draft: {\n text: string;\n isEmpty: boolean;\n attachmentCount: number;\n };\n run: {\n isRunning: boolean;\n isSubmitting: boolean;\n };\n}\ninterface ComposerRichTextSpec {\n /** Content-derived paint: match ranges receive `className`; text is never mutated. */\n effects?: readonly {\n id: string;\n /** Plain-text offsets into the current structured draft. */\n match(text: string): readonly {\n from: number;\n to: number;\n }[];\n className: string;\n }[];\n /** Debounced, read-only observation of the structured draft. */\n onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void;\n}\ninterface ComposerStructuredDraft {\n text: string;\n mentions: readonly {\n from: number;\n to: number;\n provider: string;\n id: string;\n label: string;\n }[];\n}\n/** Host-rendered paint applied to the editable composer text. */\ninterface PluginComposerTextEffect {\n className: string;\n}\n/** Host-rendered status that temporarily replaces a thread's draft glyph. */\ninterface PluginComposerThreadRowStatus {\n /** BB icon-name hint; unknown names fall back to the generic plugin icon. */\n icon: string;\n /** Accessible label for the status glyph. */\n label: string;\n /**\n * Semantic host treatment for the status glyph. `running` automatically\n * shimmers; terminal `success` and `error` tones are static. Defaults to the\n * neutral tone.\n */\n tone?: \"default\" | \"running\" | \"success\" | \"error\";\n}\n/** An @-mention pill bound to one of the calling plugin's mention providers. */\ninterface PluginComposerMention {\n /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */\n provider: string;\n /** Item id your provider's `resolve` will receive at send time. */\n id: string;\n /** Pill text shown in the composer. */\n label: string;\n}\n/**\n * Programmatic access to the chat composer draft — the same shared draft the\n * built-in \"Add to chat\" affordances (file preview, diff, terminal selections)\n * write to. While a queued message is being edited, writes land in that\n * message's inline editor. In a side chat, writes land in the visible side-chat\n * draft. Otherwise, inside a thread context writes land in that thread's draft;\n * anywhere else (nav panel, homepage section) they seed the new-thread composer\n * draft, which persists until the user sends or clears it.\n */\ninterface PluginComposerApi {\n scope: PluginComposerScope;\n /** Current plain text for this composer scope. */\n readonly text: string;\n /**\n * Replace the draft's plain text. Attachments are preserved. Inline mentions\n * outside the changed range are preserved and rebased; mentions overlapped\n * by the replacement are removed because their text representation changed.\n */\n setText(next: string): void;\n /**\n * Replace the draft's plain text from the latest committed value. Uses the\n * same structured-state reconciliation as `setText`.\n */\n updateText(updater: (current: string) => string): void;\n /** Clear plain text without clearing independently attached files. */\n clear(): void;\n /**\n * Apply a host-rendered effect to this composer's editable text, or clear it.\n * Effects are scoped to the calling plugin and automatically clear when the\n * slot unmounts or its composer scope changes.\n */\n setTextEffect(effect: PluginComposerTextEffect | null): void;\n /**\n * Lock or unlock editing for this composer. Locks are scoped to the calling\n * plugin and automatically release when the slot unmounts or its composer\n * scope changes.\n */\n setInputLock(locked: boolean): void;\n /**\n * Append text to the draft as a `> ` blockquote block and focus the\n * composer. Blank text is a no-op. This is the \"reference this selection\n * in chat\" primitive.\n */\n addQuote(text: string): void;\n /**\n * Insert an @-mention pill that resolves through this plugin's mention\n * provider at send time — the durable way to reference an entity whose\n * content should be fetched fresh when the message is sent.\n */\n insertMention(mention: PluginComposerMention): void;\n /** Focus the composer caret at the end of the draft. */\n focus(): void;\n}\n/**\n * A consumer-supplied action on the messages of one `ThreadChat` instance,\n * rendered in the embedded timeline's per-message action bar alongside the\n * native and slot-registered actions. Unlike the `messageAction` slot this is\n * scoped to the rendering component, not registered globally.\n */\ninterface ThreadChatMessageAction {\n /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */\n id: string;\n /** Tooltip / menu label for the action. */\n title: string;\n /** Icon hint (BB icon name); unknown names fall back to a generic icon. */\n icon?: string;\n /**\n * Message roles the action applies to. Omitted = both user and assistant\n * messages.\n */\n roles?: readonly (\"user\" | \"assistant\")[];\n /**\n * Runs when the user activates the action. Errors (sync or async) are\n * contained and logged; they never break the timeline.\n */\n run(message: ThreadChatMessageReference): void | Promise<void>;\n}\n/**\n * Props of the host-owned `ThreadChat` component — one thread's chat\n * (timeline, and for the composer variants the full send/queue/draft\n * engine), rendered by the BB app inside a plugin slot. This is the\n * deliberate exception to the no-host-components rule (§5.5): a stable\n * product capability, not a UI kit. Versioned additive like slot props;\n * internal timeline rows, query hooks, and prompt-box configuration are\n * deliberately not exposed.\n */\ninterface ThreadChatProps {\n threadId: string;\n /**\n * \"full\" (default) is the page presentation (centered reading width);\n * \"compact\" is the side-panel presentation; \"timeline\" renders the\n * transcript without a composer.\n */\n variant?: \"full\" | \"compact\" | \"timeline\";\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the composer (ignored by `variant: \"timeline\"`). */\n focusRequest?: number;\n /**\n * Who controls the permission mode sends run with. \"inherit\" (default)\n * pins every send to the thread's own resolved default and renders the\n * picker as a dimmed label — a plugin surface can never widen it.\n * \"editable\" gives this chat its own picker, so the user can raise or\n * lower permissions for this thread independently of the thread it was\n * forked from. Ignored by `variant: \"timeline\"` (no composer).\n */\n permissionPolicy?: \"inherit\" | \"editable\";\n className?: string;\n /** Rendered above the conversation, scrolling with it. */\n leadingContent?: ReactNode;\n /**\n * Actions rendered in this instance's per-message action bar (see\n * {@link ThreadChatMessageAction}).\n */\n messageActions?: readonly ThreadChatMessageAction[];\n}\n/**\n * Every selection the composer resolved, JSON-serializable so a plugin can\n * forward it to its own backend rpc verbatim and hand it straight to\n * `bb.sdk.threads.spawn`.\n *\n * The split is deliberate: the composer owns *user selections*, the plugin\n * owns *filing and attribution*. `bb.sdk.threads.spawn` auto-fills\n * `origin: \"plugin\"` and `originPluginId`, so a thread created this way stays\n * attributed to the plugin — which it would not be if the component created\n * the thread itself. The plugin adds `sectionId`, `parentThreadId`, `title`,\n * and `visibility` to the request on its own; they are deliberately not\n * composer props.\n */\ninterface NewThreadRequest {\n projectId: string;\n providerId: string;\n model: string;\n reasoningLevel: ReasoningLevel;\n permissionMode: PermissionMode;\n /** Omitted when the selected provider has no service tiers. */\n serviceTier?: ServiceTier;\n /**\n * Per-field provenance (caller-explicit vs. default) for the execution\n * options above, forwarded to `spawn` so the server records what the user\n * actually chose.\n */\n executionInputSources: CreateExecutionInputSources;\n environment: CreateThreadEnvironmentArgs;\n input: PromptInput[];\n}\n/**\n * Props of the host-owned `experimental_NewThreadComposer` component — bb's\n * full new-thread compose surface (prompt editor with @-mentions and expand,\n * attachments, provider/model/reasoning picker, voice, submit, and the row\n * beneath with project, environment, branch-from, and permission mode),\n * rendered by the BB app inside a plugin slot.\n *\n * It is the create-side counterpart to `ThreadChat`: same deliberate\n * exception to the no-host-components rule (§5.5), same additive versioning.\n */\ninterface NewThreadComposerProps {\n /** Seeds the project picker. The user can change it. */\n defaultProjectId?: string;\n /**\n * Seeds the provider picker. Like every `default*` prop this is a SEED, not\n * a controlled value: the composer stays uncontrolled, the user can change\n * it, and when omitted the composer falls back to the project's remembered\n * execution defaults exactly as before. When provided it takes precedence\n * over those project defaults.\n *\n * Re-seeding: the `default*` props are value-compared each render. When any\n * of them changes after mount, the composer re-seeds EVERY execution and\n * environment selection from the new props — including selections the user\n * had already touched — so switching between two saved records in the same\n * mounted composer reloads that record's values (the same rule\n * `defaultProjectId` already follows).\n *\n * Every seeded field is reported as caller-explicit in the submitted\n * request's `executionInputSources`. That is what makes the seed survive\n * `threads.spawn`: the server drops a requested `providerId`/`model` that\n * carries no provenance source and re-derives it from the project's stored\n * defaults, which would silently undo the seed.\n */\n defaultProviderId?: string;\n /** Seeds the model picker. Same seed semantics as {@link defaultProviderId}. */\n defaultModel?: string;\n /**\n * Seeds the reasoning-level picker. Same seed semantics as\n * {@link defaultProviderId}. If the seeded model does not support this\n * level, the composer reconciles to the closest supported one.\n */\n defaultReasoningLevel?: ReasoningLevel;\n /**\n * Seeds the service-tier picker. Same seed semantics as\n * {@link defaultProviderId}. Ignored (and omitted from the submitted\n * request) when the selected provider has no service tiers.\n */\n defaultServiceTier?: ServiceTier;\n /** Seeds the permission-mode picker. Same seed semantics as {@link defaultProviderId}. */\n defaultPermissionMode?: PermissionMode;\n /**\n * Seeds the environment and branch pickers from a previously submitted\n * `NewThreadRequest.environment`. Same seed semantics as\n * {@link defaultProviderId}: a seed the user can change, taking precedence\n * over the composer's own environment default when provided.\n *\n * Round trip: feeding a submitted request's `environment` back in and\n * resubmitting untouched reproduces an equivalent environment, with these\n * documented limits — the composer cannot represent every args variant:\n *\n * - `{ type: \"project-default\" }` seeds nothing; the composer resolves its\n * own default and submits that concrete environment instead.\n * - A `host` environment whose host no longer exists (or whose project has\n * no source on it) falls back to the composer's default host, exactly as\n * the primary compose surface would.\n * - A `reuse` environment whose worktree no longer has unarchived threads\n * falls back the same way.\n * - An `unmanaged` workspace's `path` has no composer control; the seeded\n * selection submits `path: null` (the host's configured checkout). The\n * composer itself never produces a non-null `path`, so real round trips\n * are unaffected.\n * - A `managed-worktree` with `baseBranch: { kind: \"default\" }` leaves the\n * branch picker on its default, which may resolve to a named base branch\n * when the project configures a dedicated worktree base — the same branch\n * the original `default` submission would have created from.\n */\n defaultEnvironment?: CreateThreadEnvironmentArgs;\n /** Seeds the draft, only while the draft is still empty. */\n initialPrompt?: string;\n placeholder?: string;\n /**\n * \"contained\" (default) fills and scrolls inside a bounded parent;\n * \"document\" grows with its content and defers scrolling to the page.\n */\n layout?: \"contained\" | \"document\";\n /** Bump to focus the editor. */\n focusRequest?: number;\n className?: string;\n /**\n * Where the draft persists. Drafts survive reloads and are shared by every\n * composer using the same key; defaults to a key scoped to this plugin.\n */\n draftKey?: string;\n /**\n * Fires on submit with every selection resolved. The draft clears when this\n * resolves and is KEPT if it throws, so a failed create never loses what the\n * user typed.\n */\n onSubmit: (request: NewThreadRequest) => void | Promise<void>;\n}\n/**\n * Props of the host-owned `Markdown` component — bb's chat message renderer\n * (the same typography, spacing, and code styling as timeline messages).\n * Use it wherever plugin UI quotes or previews message content so it reads\n * like the rest of the chat. Like `ThreadChat`, this is a stable product\n * capability, not a UI kit; renderer internals stay private.\n */\ninterface MarkdownProps {\n /** Markdown source, rendered exactly like a chat message body. */\n content: string;\n className?: string;\n}\n/** Current app selection, derived from the route. */\ninterface BbContext {\n projectId: string | null;\n threadId: string | null;\n}\ninterface BbNavigate {\n toThread(threadId: string): void;\n toProject(projectId: string): void;\n /**\n * Navigate to one of this plugin's own nav panels by its `path`.\n * `subPath` targets a location inside the panel (the component's\n * `subPath` prop); `replace` swaps the current history entry instead of\n * pushing — use it for redirects so back does not bounce.\n */\n toPluginPanel(path: string, options?: {\n subPath?: string;\n replace?: boolean;\n }): void;\n /**\n * Navigate to the root compose surface (the new-thread screen). Pass\n * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the\n * composer on arrival — the pairing behind \"Create via chat\" style entry\n * points that drop the user into chat with a prefilled prompt.\n */\n toCompose(options?: {\n initialPrompt?: string;\n focusPrompt?: boolean;\n }): void;\n /**\n * Open one of this plugin's registered thread-panel actions in the current\n * thread surface. Returns false when the surface has no thread side panel or\n * the action is unavailable.\n */\n openThreadPanel(options: {\n actionId: string;\n title?: string;\n params?: JsonValue;\n }): boolean;\n}\n/**\n * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds\n * the real implementation and `satisfies` this interface; `bb plugin build`\n * shims the specifier to that object on `globalThis.__bbPluginRuntime`.\n */\ninterface PluginSdkApp {\n definePluginApp(setup: PluginAppSetup): PluginAppDefinition;\n useRpc<Contract extends PluginRpcContract = PluginRpcContract>(): PluginRpcClient<Contract>;\n useRealtime(channel: string, handler: (payload: unknown) => void): void;\n /**\n * Observe the same shared connection that delivers `useRealtime` signals.\n * Use a subsequent transition to `connected` to reconcile server state that\n * may have changed while ephemeral signals could not be delivered. The first\n * connection can transition from `connecting` and is not a reconnection.\n */\n useRealtimeConnectionState(): PluginRealtimeConnectionState;\n useSettings(): PluginSettingsState;\n useBbContext(): BbContext;\n useBbNavigate(): BbNavigate;\n useComposer(): PluginComposerApi;\n /**\n * The sidebar's live thread view (see {@link PluginSidebarThreadsState}).\n * Reads the host's own cache and realtime subscriptions, so it costs no\n * extra request and updates exactly when the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreads(): PluginSidebarThreadsState;\n /**\n * Thread actions bound to the host's mutations (see\n * {@link PluginSidebarThreadActions}). Experimental: see\n * docs/api_to_audit.md.\n */\n experimental_useSidebarThreadActions(): PluginSidebarThreadActions;\n /**\n * The pull request for one thread's branch (see\n * {@link PluginSidebarThreadPullRequestState}).\n *\n * Per row and opt-in, because it costs a git-host lookup: it is NOT on the\n * thread payload every sidebar loads. Threads sharing an environment share\n * one query, and the host owns the polling and staleness rules — an open PR\n * with pending checks refreshes, a merged one does not.\n *\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadPullRequest(threadId: string): PluginSidebarThreadPullRequestState;\n /**\n * Per-row drag-to-split support (see {@link PluginSidebarThreadSplit}).\n * Call it once per rendered row, like the built-in sidebar does.\n * Experimental: see docs/api_to_audit.md.\n */\n experimental_useSidebarThreadSplit(threadId: string): PluginSidebarThreadSplit;\n /**\n * The host-owned chat component (see {@link ThreadChatProps}). Together\n * with `Markdown`, the only components the SDK ships — everything else\n * stays vendored per §5.5.\n */\n ThreadChat: ComponentType<ThreadChatProps>;\n /**\n * The host-owned chat-message markdown renderer (see\n * {@link MarkdownProps}).\n */\n Markdown: ComponentType<MarkdownProps>;\n /**\n * The host-owned new-thread compose surface (see\n * {@link NewThreadComposerProps}). Experimental: see\n * docs/api_to_audit.md for what to audit before the prefix drops.\n */\n experimental_NewThreadComposer: ComponentType<NewThreadComposerProps>;\n useComposerView(): ComposerView;\n}\n\ndeclare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition;\ndeclare const ThreadChat: react.ComponentType<ThreadChatProps>;\ndeclare const Markdown: react.ComponentType<MarkdownProps>;\ndeclare const experimental_NewThreadComposer: react.ComponentType<NewThreadComposerProps>;\ndeclare const useRpc: <Contract extends PluginRpcContract = Readonly<Record<string, PluginRpcMethodContract<StandardSchemaV1<unknown, unknown>, StandardSchemaV1<unknown, unknown>>>>>() => PluginRpcClient<Contract>;\ndeclare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void;\ndeclare const useRealtimeConnectionState: () => PluginRealtimeConnectionState;\ndeclare const useSettings: () => PluginSettingsState;\ndeclare const useBbContext: () => BbContext;\ndeclare const useBbNavigate: () => BbNavigate;\ndeclare const useComposer: () => PluginComposerApi;\ndeclare const useComposerView: () => ComposerView;\ndeclare const experimental_useSidebarThreads: () => PluginSidebarThreadsState;\ndeclare const experimental_useSidebarThreadActions: () => PluginSidebarThreadActions;\ndeclare const experimental_useSidebarThreadPullRequest: (threadId: string) => PluginSidebarThreadPullRequestState;\ndeclare const experimental_useSidebarThreadSplit: (threadId: string) => PluginSidebarThreadSplit;\n\nexport { Markdown, ThreadChat, definePluginApp, experimental_NewThreadComposer, experimental_useSidebarThreadActions, experimental_useSidebarThreadPullRequest, experimental_useSidebarThreadSplit, experimental_useSidebarThreads, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings };\nexport type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, NewThreadComposerProps, NewThreadRequest, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, 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, PluginThreadHeaderActionProps, PluginThreadHeaderActionRegistration, PluginThreadListProps, PluginThreadListRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps };\n"; diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md index cbe614107c..b8ae4e50ac 100644 --- a/plans/issue-1114-edit-sent-message.md +++ b/plans/issue-1114-edit-sent-message.md @@ -153,17 +153,17 @@ The server sends only opaque provider checkpoints across the daemon boundary: sourceProviderThreadId: string; retainThroughProviderCheckpoint: string; leaseId: string; - operationId: string; } ``` The runtime stages an event-suppressed provider fork and returns its provider -thread id. After the replacement fork settles, bb closes/removes the staged +thread id. The server mints a fresh `leaseId` per edit attempt and each lease +owns exactly one staged fork, so overlapping attempts can never discard each +other's fork. After the replacement fork settles, bb closes/removes the staged Claude Code or Pi session and archives the staged Codex fork; a daemon-side TTL cleans up abandoned preparations. The source provider session remains untouched until the database commit. The prepare/discard wire contract requires -`HOST_DAEMON_PROTOCOL_VERSION = 98` (the staged rewind commands now carry an -ownership lease so overlapping edits cannot discard each other's fork). +`HOST_DAEMON_PROTOCOL_VERSION = 100`. ## API, SDK, And CLI From f986bcef7a6777265f5978addffe34ff631add2b Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Tue, 11 Aug 2026 14:24:09 -0700 Subject: [PATCH 8/9] Drop the committed implementation plan Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --- plans/issue-1114-edit-sent-message.md | 250 -------------------------- 1 file changed, 250 deletions(-) delete mode 100644 plans/issue-1114-edit-sent-message.md diff --git a/plans/issue-1114-edit-sent-message.md b/plans/issue-1114-edit-sent-message.md deleted file mode 100644 index b8ae4e50ac..0000000000 --- a/plans/issue-1114-edit-sent-message.md +++ /dev/null @@ -1,250 +0,0 @@ -# Experimental Sent-Message Editing - -Issue: [#1114 — No way to edit a sent message or undo the last turn](https://github.com/get-bb/bb/issues/1114) - -## Goal - -Let a user replace any completed user message in a Codex, Claude Code, or Pi -thread and rerun the conversation from that point. - -Opening the editor must be entirely client-local. The thread, provider session, -timeline, and workspace change only after the user selects **Submit edit** and -the server has safely prepared the replacement provider history. - -This version deliberately does not include undo. - -## Status - -Status (2026-08-10): the functional prototype is implemented behind the -default-off `editMessages` experiment. It includes arbitrary-message timeline -actions, the shared inline editor, provider checkpoints for Codex, Claude Code, -and Pi, atomic event-suffix replacement, realtime invalidation, SDK and CLI -surfaces, staged-provider cleanup, and generated daemon-contract artifacts. The -experiment uses the existing keyed -`system_experiments` table, so no schema migration is required. - -Focused and package-wide automated validation is complete. The remaining work -before broadening the experiment is real-provider smoke testing proving that -each replacement turn cannot see the removed suffix. - -## Product Contract - -When `editMessages` is enabled: - -- Every eligible completed root user message exposes **Edit message**. -- Selecting the action replaces only that message bubble with the compact - inline editor. All later messages remain visible until submission succeeds. -- The editor reuses the queued-message editor frame and follow-up composer, - labels the action **Submit edit**, uses the short header **Editing message**, - and focuses the editor when it opens. -- Cancel is client-local and confirms only when it would discard changes. -- Submit atomically replaces the selected request and every later conversation - event, then starts the edited turn. -- Existing workspace, git, terminal, process, child-thread, and external side - effects are intentionally retained. -- Successful submission does not show a toast; the rewritten timeline is the - confirmation. - -This version does not provide: - -- undo, redo, or standalone rewind; -- editing while a root turn, workflow, background agent, or background command - is active; -- editing turns containing a steer or multiple accepted requests; -- editing one message inside a grouped multi-message request; -- ACP, OpenCode, or other provider support; -- filesystem or external-side-effect rollback; -- a generic history-truncation or plugin API. - -## Experiment - -`editMessages` is a required server-backed experiment field with a default of -`false`. It is persisted as the `editMessages` key in the existing -`system_experiments` key/value table and is exposed through: - -- Settings → Experiments → **Edit messages**; -- `bb settings experiment editMessages <true|false>`; -- the system configuration API used by the app and SDK. - -The app hides edit actions while the experiment is off. The server separately -rejects read and mutation requests while it is off, so direct CLI or SDK calls -cannot bypass the gate. - -## UX Flow - -### Open - -Selecting **Edit message**: - -1. Makes no server request. -2. Creates a separate in-memory edit session from the timeline row's visible - `PromptInput[]` and request event sequence. -3. Leaves the ordinary persisted follow-up draft mounted and unchanged. -4. Replaces the selected bubble with the inline editor and focuses it. -5. Keeps the selected turn's response and the entire later timeline visible. - -Remote image inputs that cannot be faithfully restored remain ineligible. -Agent-only context is excluded from the editor and is resolved again through -the normal submit pipeline. - -### Cancel And Navigation - -Cancel clears only the client edit session. No provider or server state changes. -If the draft differs from the original, cancellation confirms before discarding -it. Navigating to another thread parks the edit session and restores it when the -user returns; temporary eligibility blockers disable submission without losing -the draft. - -### Submit - -Normal and modifier submit both use the edit mutation, never ordinary send, -queue, or steer. While pending, the original timeline stays visible and the -editor is disabled. - -On a pre-commit failure, the original timeline and draft remain. On success, -the client invalidates history-owning queries and realtime publishes a -`history-rewritten` change so every client replaces the old suffix directly -with the edited pending turn. - -## Eligibility - -The server is authoritative. A selected request is editable only when: - -- the experiment is enabled; -- the thread is writable and idle; -- the provider is `codex`, `claude-code`, or `pi`; -- the request is user-initiated and targets a root thread start or root turn; -- exactly one `turn/input/accepted` event links the request to its root turn; -- that root turn completed successfully and contains no accepted steer or - additional input; -- the request is not a grouped multi-message request; -- there is no queued message, pending interaction, workflow, background agent, - or background command; -- the replacement provider history can be staged through the root turn - preceding the selected request. - -The app additionally suppresses actions during timeline loading, a competing -send/edit mutation, or an active local edit session. Submission always -revalidates the exact request sequence and current event high-water mark. - -## Provider Checkpoints - -Editing an earlier message needs a provider-native transcript boundary for the -turn immediately before it. bb stores that opaque boundary on -`turn/completed.providerCheckpointId`: - -| Provider | Persisted checkpoint | Rewind implementation | -| ----------- | -------------------------------------- | ----------------------------------------------- | -| Codex | bb root turn id | `thread/fork.lastTurnId` | -| Claude Code | latest root `SDKAssistantMessage.uuid` | `forkSession(..., { upToMessageId })` | -| Pi | session manager leaf entry id | `SessionManager.createBranchedSession(entryId)` | - -Editing the first root turn needs no retained checkpoint and starts a fresh -provider session. For an existing Claude Code or Pi thread created before -checkpoints were recorded, editing after a legacy turn is rejected rather than -silently forking from the wrong context. A new turn records the checkpoint -needed for subsequent edits. - -The server sends only opaque provider checkpoints across the daemon boundary: - -```ts -{ - type: "thread.rewind.prepare"; - sourceProviderThreadId: string; - retainThroughProviderCheckpoint: string; - leaseId: string; -} -``` - -The runtime stages an event-suppressed provider fork and returns its provider -thread id. The server mints a fresh `leaseId` per edit attempt and each lease -owns exactly one staged fork, so overlapping attempts can never discard each -other's fork. After the replacement fork settles, bb closes/removes the staged -Claude Code or Pi session and archives the staged Codex fork; a daemon-side TTL -cleans up abandoned preparations. The source provider session remains untouched -until the database commit. The prepare/discard wire contract requires -`HOST_DAEMON_PROTOCOL_VERSION = 100`. - -## API, SDK, And CLI - -The mutation selects its target by the initiating request event sequence: - -```text -POST /api/v1/threads/:id/edit-message -``` - -```ts -{ - operationId: string; - expectedRequestSequence?: number; - input: PromptInput[]; - model?: string; - serviceTier?: ServiceTier; - reasoningLevel?: ReasoningLevel; - permissionMode?: PermissionModeInput; - executionInputSources?: ExistingThreadExecutionInputSources; -} -``` - -Omitting `expectedRequestSequence` atomically targets the latest eligible -request with no staleness guard; supplying it selects any eligible earlier -message and doubles as an optimistic-concurrency guard. - -The SDK exposes `threads.editMessage(...)`. The CLI exposes: - -```text -bb thread edit-message [id] [--self] - --message <text> - [--expected-request-sequence <n>] [--json] -``` - -## Atomic Replacement - -The server holds the per-thread mutation guard and performs: - -1. **Preflight:** resolve the exact request and root turn, validate eligibility, - replacement input, attachments, mentions, execution options, and event - high-water mark. -2. **Stage:** create a detached provider fork through the preceding checkpoint, - or choose a fresh-session path for the first turn. The source session and bb - event history remain unchanged if this fails. -3. **Commit:** in one immediate transaction, revalidate the target and high-water - mark, append an `edit_message` operation marker, delete the selected event - suffix plus sequence-addressed prompt-history/search state and dynamic - context state, append the edited `client/turn/requested` through the normal - send pipeline, record prompt history, and transition the thread to active. -4. **Publish and dispatch:** emit `history-rewritten`, invalidate history-owning - caches, and dispatch the edited turn on the staged provider session. - -The marker is retained above the deleted suffix, keeps event sequences -monotonic, and stores an input fingerprint. Retrying the same `operationId` and -payload returns the committed result; reusing it with different input is a -conflict. - -## Validation Plan - -Automated coverage must prove: - -- the experiment defaults off, persists, renders in Settings, and gates both UI - and server; -- actions appear on every eligible accepted user request, not only the latest; -- opening/cancelling is non-destructive and focuses the editor; -- submitting an earlier request removes its turn and every later turn; -- suffix deletion also clears search, prompt-history, and dynamic-context state - while preserving monotonic sequences; -- stale request sequences, changed high-water marks, steers, active work, - queued messages, pending interactions, and unsupported providers reject - without changing history; -- Codex maps the retained bb turn id to `lastTurnId`; -- Claude Code persists the assistant UUID and maps it to `upToMessageId`; -- Pi persists the session leaf id and branches through that entry only; -- first-turn edits start fresh for all three supported providers; -- lost-response retries do not create duplicate rewinds or requests; -- SDK paths/types, CLI latest lookup, explicit earlier sequence, human output, - guide, skill, and configuration docs match the implementation. - -Before enabling the experiment more broadly, perform real Codex, Claude Code, -and Pi smoke tests with a unique fact in the removed suffix. The replacement -turn must be unable to recall that fact from provider conversation context. -Also verify desktop and compact/mobile editing, cancel, failed submit, and two -connected clients. From fd289881c5a97f4af6448ea42195a6fd2de1b806 Mon Sep 17 00:00:00 2001 From: Michael Yong <wrong92@gmail.com> Date: Tue, 11 Aug 2026 14:28:16 -0700 Subject: [PATCH 9/9] Adapt long-message fixture to grouped turn requests --- .../thread/timeline/ConversationMessageContent.test.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx b/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx index eed169383d..2a46af3783 100644 --- a/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx +++ b/apps/app/src/components/thread/timeline/ConversationMessageContent.test.tsx @@ -165,7 +165,11 @@ describe("ConversationMessageContent long user messages", () => { systemMessageKind="unlabeled" systemMessageSubject={null} text={text} - turnRequest={{ kind: "message", status: "accepted" }} + turnRequest={{ + isGrouped: false, + kind: "message", + status: "accepted", + }} /> </RouteNavigationProvider> </MemoryRouter>,