From c849b1f0f7487dcdec952f6ef78e9580cc97f56a Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Tue, 4 Aug 2026 13:40:28 +0800 Subject: [PATCH] refactor(app): own rendering contracts --- .../performance/timeline-stability/fixture.ts | 2 +- packages/app/e2e/tsconfig.json | 1 + .../app/src/components/command-palette.ts | 2 +- packages/app/src/components/dialog-fork.tsx | 2 +- .../components/dialog-select-directory-v2.tsx | 2 +- .../components/dialog-select-directory.tsx | 2 +- .../src/components/file-tree-v2-model.test.ts | 2 +- .../app/src/components/file-tree-v2-model.ts | 2 +- packages/app/src/components/file-tree-v2.tsx | 2 +- packages/app/src/components/file-tree.tsx | 2 +- .../app/src/components/prompt-input-v2.tsx | 2 +- .../src/components/prompt-input.stories.tsx | 2 +- packages/app/src/components/prompt-input.tsx | 2 +- .../prompt-input/build-request-parts.ts | 2 +- .../app/src/components/prompt-input/submit.ts | 2 +- .../session/session-context-breakdown.test.ts | 2 +- .../session/session-context-breakdown.ts | 2 +- .../session/session-context-metrics.test.ts | 2 +- .../session/session-context-metrics.ts | 2 +- .../session/session-context-tab.tsx | 2 +- .../components/status-popover-indicator.ts | 2 +- .../app/src/components/titlebar-tab-nav.tsx | 2 +- .../app/src/components/titlebar-tab-strip.tsx | 2 +- packages/app/src/context/directory-sync.ts | 2 +- .../app/src/context/file/content-cache.ts | 2 +- packages/app/src/context/file/tree-store.ts | 2 +- packages/app/src/context/file/types.ts | 2 +- packages/app/src/context/file/watcher.ts | 2 +- .../src/context/global-sync/bootstrap.test.ts | 3 +- .../app/src/context/global-sync/bootstrap.ts | 4 +- .../src/context/global-sync/child-store.ts | 2 +- .../context/global-sync/event-reducer.test.ts | 2 +- .../src/context/global-sync/event-reducer.ts | 2 +- .../global-sync/home-session-index.test.ts | 2 +- .../context/global-sync/home-session-index.ts | 2 +- .../context/global-sync/session-cache.test.ts | 2 +- .../src/context/global-sync/session-cache.ts | 2 +- .../context/global-sync/session-trim.test.ts | 2 +- .../src/context/global-sync/session-trim.ts | 2 +- packages/app/src/context/global-sync/types.ts | 2 +- packages/app/src/context/global-sync/utils.ts | 2 +- packages/app/src/context/layout.tsx | 2 +- packages/app/src/context/notification.tsx | 2 +- .../context/permission-auto-respond.test.ts | 2 +- packages/app/src/context/permission.tsx | 2 +- packages/app/src/context/prompt-state.ts | 2 +- packages/app/src/context/server-sdk.test.ts | 2 +- packages/app/src/context/server-sdk.tsx | 8 +- .../app/src/context/server-session.test.ts | 3 +- packages/app/src/context/server-session.ts | 4 +- packages/app/src/context/server-sync.tsx | 4 +- .../app/src/context/sync-optimistic.test.ts | 2 +- packages/app/src/context/sync.tsx | 2 +- packages/app/src/context/tabs.tsx | 2 +- .../pages/home/home-sessions-controller.tsx | 2 +- .../app/src/pages/home/home-sessions-view.tsx | 2 +- packages/app/src/pages/layout.tsx | 2 +- packages/app/src/pages/layout/helpers.test.ts | 2 +- packages/app/src/pages/layout/helpers.ts | 2 +- .../app/src/pages/layout/sidebar-items.tsx | 2 +- .../src/pages/layout/sidebar-workspace.tsx | 2 +- packages/app/src/pages/session.tsx | 2 +- .../composer/session-composer-state.test.ts | 2 +- .../composer/session-composer-state.ts | 2 +- .../composer/session-permission-dock.tsx | 2 +- .../composer/session-question-dock.tsx | 2 +- .../session/composer/session-request-tree.ts | 2 +- .../session/composer/session-todo-dock.tsx | 2 +- .../composer/todo-panel-motion.stories.tsx | 2 +- packages/app/src/pages/session/review-tab.tsx | 2 +- .../session/session-model-helpers.test.ts | 2 +- .../pages/session/session-model-helpers.ts | 2 +- .../src/pages/session/session-side-panel.tsx | 2 +- .../session/timeline/message-timeline.tsx | 2 +- .../src/pages/session/timeline/model.test.ts | 2 +- .../app/src/pages/session/timeline/model.ts | 2 +- .../src/pages/session/timeline/projection.ts | 2 +- .../app/src/pages/session/timeline/rows.ts | 4 +- .../session/timeline/summary-diffs.test.ts | 2 +- .../pages/session/timeline/summary-diffs.ts | 2 +- .../pages/session/timeline/timeline-row.ts | 2 +- .../pages/session/usage-exceeded-dialogs.tsx | 2 +- .../pages/session/use-session-commands.tsx | 2 +- .../pages/session/use-session-hash-scroll.ts | 2 +- .../src/pages/session/v2/review-diff-kinds.ts | 2 +- .../src/pages/session/v2/review-panel-v2.tsx | 2 +- packages/app/src/types.ts | 246 ++++++++++++++++++ packages/app/src/utils/diffs.test.ts | 4 +- packages/app/src/utils/diffs.ts | 4 +- packages/app/src/utils/prompt.test.ts | 2 +- packages/app/src/utils/prompt.ts | 2 +- packages/app/src/utils/server-compat.ts | 3 +- packages/app/src/utils/server-errors.test.ts | 2 +- packages/app/src/utils/session-message.ts | 2 +- packages/app/src/utils/session.ts | 2 +- 95 files changed, 352 insertions(+), 102 deletions(-) create mode 100644 packages/app/src/types.ts diff --git a/packages/app/e2e/performance/timeline-stability/fixture.ts b/packages/app/e2e/performance/timeline-stability/fixture.ts index 515338196e2..10d34aeb8a9 100644 --- a/packages/app/e2e/performance/timeline-stability/fixture.ts +++ b/packages/app/e2e/performance/timeline-stability/fixture.ts @@ -9,7 +9,7 @@ import type { ToolPart, ToolState, UserMessage, -} from "@opencode-ai/sdk/v2/client" +} from "../../../src/types" import type { SessionV1Info, SessionStatus } from "@opencode-ai/client/promise" import { expect, type Page } from "@playwright/test" import { Schema } from "effect" diff --git a/packages/app/e2e/tsconfig.json b/packages/app/e2e/tsconfig.json index 4a6046e4faa..514c171993a 100644 --- a/packages/app/e2e/tsconfig.json +++ b/packages/app/e2e/tsconfig.json @@ -12,6 +12,7 @@ "./performance/unit/visual-stability.test.ts", "./reproduction/timeline-suspense/**/*.ts", "./reproduction/timeline-suspense/**/*.tsx", + "../src/types.ts", "../src/pages/session/timeline/observe-element-offset.ts", "./regression/new-session-panel-corner.spec.ts", "./regression/session-timeline-context-resize.spec.ts", diff --git a/packages/app/src/components/command-palette.ts b/packages/app/src/components/command-palette.ts index 8014ea1c439..5779c3a423f 100644 --- a/packages/app/src/components/command-palette.ts +++ b/packages/app/src/components/command-palette.ts @@ -1,5 +1,5 @@ import { getFilename } from "@opencode-ai/core/util/path" -import type { Project } from "@opencode-ai/sdk/v2/client" +import type { Project } from "@/types" import type { SessionInfo } from "@opencode-ai/client/promise" import { useDialog } from "@opencode-ai/ui/context/dialog" import { createMemo, onCleanup } from "solid-js" diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index 91d34907326..6fe0c445601 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/packages/app/src/components/dialog-fork.tsx @@ -8,7 +8,7 @@ import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" import { showToast } from "@/utils/toast" import { extractPromptFromParts } from "@/utils/prompt" -import type { TextPart as SDKTextPart } from "@opencode-ai/sdk/v2/client" +import type { TextPart as SDKTextPart } from "@/types" import { base64Encode } from "@opencode-ai/core/util/encode" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/dialog-select-directory-v2.tsx b/packages/app/src/components/dialog-select-directory-v2.tsx index f3376ad35f2..d3adb4e1530 100644 --- a/packages/app/src/components/dialog-select-directory-v2.tsx +++ b/packages/app/src/components/dialog-select-directory-v2.tsx @@ -8,7 +8,7 @@ import { createEffect, createMemo, createResource, createSignal, For, onCleanup, import { useGlobal } from "@/context/global" import { useLanguage } from "@/context/language" import { ServerConnection } from "@/context/server" -import type { Path } from "@opencode-ai/sdk/v2/client" +import type { Path } from "@/types" import { absoluteTreePath, activeTreeNavigation, diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index 2a6c877df1d..35737412d36 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -9,7 +9,7 @@ import { useLanguage } from "@/context/language" import { ServerConnection } from "@/context/server" import { useGlobal } from "@/context/global" import { cleanPickerInput, createDirectorySearch, displayPickerPath } from "./directory-picker-domain" -import type { Path } from "@opencode-ai/sdk/v2/client" +import type { Path } from "@/types" interface DialogSelectDirectoryProps { title?: string diff --git a/packages/app/src/components/file-tree-v2-model.test.ts b/packages/app/src/components/file-tree-v2-model.test.ts index f2a63fe86d3..1516eb73177 100644 --- a/packages/app/src/components/file-tree-v2-model.test.ts +++ b/packages/app/src/components/file-tree-v2-model.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from "bun:test" import { buildFileTreeV2Model, flattenFileTreeV2, flattenLiveFileTreeV2 } from "./file-tree-v2-model" -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" describe("buildFileTreeV2Model", () => { test("builds a sorted tree and flattens expanded directories", () => { diff --git a/packages/app/src/components/file-tree-v2-model.ts b/packages/app/src/components/file-tree-v2-model.ts index 27783a9bb16..a84d8ed6256 100644 --- a/packages/app/src/components/file-tree-v2-model.ts +++ b/packages/app/src/components/file-tree-v2-model.ts @@ -1,4 +1,4 @@ -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" export type FileTreeV2Model = { children: ReadonlyMap diff --git a/packages/app/src/components/file-tree-v2.tsx b/packages/app/src/components/file-tree-v2.tsx index 26cf49d411b..64a015a226f 100644 --- a/packages/app/src/components/file-tree-v2.tsx +++ b/packages/app/src/components/file-tree-v2.tsx @@ -12,7 +12,7 @@ import { type ParentProps, } from "solid-js" import { Dynamic } from "solid-js/web" -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" import { Icon } from "@opencode-ai/ui/v2/icon" import { pathToFileUrl, withFileDragImage, type Kind } from "@/components/file-tree" import { createVirtualizer, defaultRangeExtractor } from "@tanstack/solid-virtual" diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 718e2f3493d..62b8e8e99fe 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -17,7 +17,7 @@ import { type ParentProps, } from "solid-js" import { Dynamic } from "solid-js/web" -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" const MAX_DEPTH = 128 diff --git a/packages/app/src/components/prompt-input-v2.tsx b/packages/app/src/components/prompt-input-v2.tsx index 44d9d48d386..517c110e4ed 100644 --- a/packages/app/src/components/prompt-input-v2.tsx +++ b/packages/app/src/components/prompt-input-v2.tsx @@ -5,7 +5,7 @@ import { ButtonV2 } from "@opencode-ai/ui/v2/button-v2" import { Icon } from "@opencode-ai/ui/v2/icon" import { KeybindV2 } from "@opencode-ai/ui/v2/keybind-v2" import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2" -import type { ReferenceInfo } from "@opencode-ai/sdk/v2/client" +import type { ReferenceInfo } from "@/types" import { createEffect, createMemo, on, Show } from "solid-js" import { ModelSelectorPopoverV2 } from "@/components/dialog-select-model" import { DialogSelectModelUnpaidV2 } from "@/components/dialog-select-model-unpaid-v2" diff --git a/packages/app/src/components/prompt-input.stories.tsx b/packages/app/src/components/prompt-input.stories.tsx index 0b9c26ce411..4f7c62dc135 100644 --- a/packages/app/src/components/prompt-input.stories.tsx +++ b/packages/app/src/components/prompt-input.stories.tsx @@ -1,6 +1,6 @@ // @ts-nocheck import { createStore } from "solid-js/store" -import type { Todo } from "@opencode-ai/sdk/v2" +import type { Todo } from "@/types" import { createPromptState } from "@/context/prompt" import { SessionComposerRegion, createSessionComposerRegionController } from "@/pages/session/composer" import { createPromptInputHistory, PromptInput } from "./prompt-input" diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 7923e18ee2a..0f4e81ed30b 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -81,7 +81,7 @@ import { promptDesignPlaceholder, promptPlaceholder } from "./prompt-input/place import { createPromptInputTransientState } from "./prompt-input/transient-state" import { showToast } from "@/utils/toast" import { ImagePreview } from "@opencode-ai/ui/image-preview" -import type { ReferenceInfo } from "@opencode-ai/sdk/v2/client" +import type { ReferenceInfo } from "@/types" export { createPromptInputHistory } export type { PromptInputControls, PromptInputHistory, PromptInputProps, PromptInputState, PromptInputSubmission } diff --git a/packages/app/src/components/prompt-input/build-request-parts.ts b/packages/app/src/components/prompt-input/build-request-parts.ts index 7f0fea2bfe7..52ec421a8eb 100644 --- a/packages/app/src/components/prompt-input/build-request-parts.ts +++ b/packages/app/src/components/prompt-input/build-request-parts.ts @@ -1,5 +1,5 @@ import { getFilename } from "@opencode-ai/core/util/path" -import { type AgentPartInput, type FilePartInput, type Part, type TextPartInput } from "@opencode-ai/sdk/v2/client" +import type { AgentPartInput, FilePartInput, Part, TextPartInput } from "@/types" import type { FileSelection } from "@/context/file" import { encodeFilePath } from "@/context/file/path" import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt" diff --git a/packages/app/src/components/prompt-input/submit.ts b/packages/app/src/components/prompt-input/submit.ts index 051bf4d06cb..1c6d802e0ae 100644 --- a/packages/app/src/components/prompt-input/submit.ts +++ b/packages/app/src/components/prompt-input/submit.ts @@ -1,4 +1,4 @@ -import type { Message, Session } from "@opencode-ai/sdk/v2/client" +import type { Message, Session } from "@/types" import { showToast } from "@/utils/toast" import { base64Encode } from "@opencode-ai/core/util/encode" import { Binary } from "@opencode-ai/core/util/binary" diff --git a/packages/app/src/components/session/session-context-breakdown.test.ts b/packages/app/src/components/session/session-context-breakdown.test.ts index f38aecb55da..fa5a1c363e7 100644 --- a/packages/app/src/components/session/session-context-breakdown.test.ts +++ b/packages/app/src/components/session/session-context-breakdown.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message, Part } from "@opencode-ai/sdk/v2/client" +import type { Message, Part } from "@/types" import { estimateSessionContextBreakdown } from "./session-context-breakdown" const user = (id: string) => { diff --git a/packages/app/src/components/session/session-context-breakdown.ts b/packages/app/src/components/session/session-context-breakdown.ts index e263b2957b3..9bcf77d4cd0 100644 --- a/packages/app/src/components/session/session-context-breakdown.ts +++ b/packages/app/src/components/session/session-context-breakdown.ts @@ -1,4 +1,4 @@ -import type { Message, Part } from "@opencode-ai/sdk/v2/client" +import type { Message, Part } from "@/types" export type SessionContextBreakdownKey = "system" | "user" | "assistant" | "tool" | "other" diff --git a/packages/app/src/components/session/session-context-metrics.test.ts b/packages/app/src/components/session/session-context-metrics.test.ts index 37cc0d5b5d2..411d987bd56 100644 --- a/packages/app/src/components/session/session-context-metrics.test.ts +++ b/packages/app/src/components/session/session-context-metrics.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message } from "@opencode-ai/sdk/v2/client" +import type { Message } from "@/types" import { getSessionContext } from "./session-context-metrics" const assistant = ( diff --git a/packages/app/src/components/session/session-context-metrics.ts b/packages/app/src/components/session/session-context-metrics.ts index 30dc9e958b9..ef51e30f1b9 100644 --- a/packages/app/src/components/session/session-context-metrics.ts +++ b/packages/app/src/components/session/session-context-metrics.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, Message } from "@opencode-ai/sdk/v2/client" +import type { AssistantMessage, Message } from "@/types" type Provider = { id: string diff --git a/packages/app/src/components/session/session-context-tab.tsx b/packages/app/src/components/session/session-context-tab.tsx index 25ad5ab230c..05a87faa8e9 100644 --- a/packages/app/src/components/session/session-context-tab.tsx +++ b/packages/app/src/components/session/session-context-tab.tsx @@ -10,7 +10,7 @@ import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header" import { File } from "@opencode-ai/session-ui/file" import { Markdown } from "@opencode-ai/session-ui/markdown" import { ScrollView } from "@opencode-ai/ui/scroll-view" -import type { Message, Part, UserMessage } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, UserMessage } from "@/types" import { useLanguage } from "@/context/language" import { useProviders } from "@/hooks/use-providers" import { useSDK } from "@/context/sdk" diff --git a/packages/app/src/components/status-popover-indicator.ts b/packages/app/src/components/status-popover-indicator.ts index 62fc3bedbff..eafe5facc6a 100644 --- a/packages/app/src/components/status-popover-indicator.ts +++ b/packages/app/src/components/status-popover-indicator.ts @@ -1,4 +1,4 @@ -import type { LspStatus } from "@opencode-ai/sdk/v2/client" +import type { LspStatus } from "@/types" import type { McpServer } from "@opencode-ai/client/promise" export function hasServiceNeedingAttention(input: { mcp: Array }) { diff --git a/packages/app/src/components/titlebar-tab-nav.tsx b/packages/app/src/components/titlebar-tab-nav.tsx index e2aa47adbda..8e36b9369d8 100644 --- a/packages/app/src/components/titlebar-tab-nav.tsx +++ b/packages/app/src/components/titlebar-tab-nav.tsx @@ -9,7 +9,7 @@ import { useGlobal } from "@/context/global" import { ServerConnection, serverName } from "@/context/server" import { displayName, projectForSession } from "@/pages/layout/helpers" import { SessionTabAvatar } from "@/pages/layout/session-tab-avatar" -import type { Session } from "@opencode-ai/sdk/v2" +import type { Session } from "@/types" import { canOpenTabRename, forwardTabRef } from "./titlebar-tab-gesture" import { TabPreviewPopover } from "./titlebar-tab-popover" import "./titlebar-tab-nav.css" diff --git a/packages/app/src/components/titlebar-tab-strip.tsx b/packages/app/src/components/titlebar-tab-strip.tsx index 0a4b4da12df..242de395c40 100644 --- a/packages/app/src/components/titlebar-tab-strip.tsx +++ b/packages/app/src/components/titlebar-tab-strip.tsx @@ -19,7 +19,7 @@ import { base64Encode } from "@opencode-ai/core/util/encode" import { showToast } from "@/utils/toast" import { canStartTabDrag, isTabCloseTarget } from "./titlebar-tab-gesture" import { adjacentTabKey, mergeVisibleTabOrder } from "./titlebar-tab-order" -import type { Session } from "@opencode-ai/sdk/v2" +import type { Session } from "@/types" function SessionTabSlot(props: { tab: SessionTab diff --git a/packages/app/src/context/directory-sync.ts b/packages/app/src/context/directory-sync.ts index befd5b61e09..359074da25c 100644 --- a/packages/app/src/context/directory-sync.ts +++ b/packages/app/src/context/directory-sync.ts @@ -1,5 +1,5 @@ import { Binary } from "@opencode-ai/core/util/binary" -import type { Message, Part, Session } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, Session } from "@/types" import { createMemo } from "solid-js" import { produce, reconcile, type SetStoreFunction } from "solid-js/store" import type { createServerSdkContext } from "./server-sdk" diff --git a/packages/app/src/context/file/content-cache.ts b/packages/app/src/context/file/content-cache.ts index 4b724068834..b6ba5e89d7c 100644 --- a/packages/app/src/context/file/content-cache.ts +++ b/packages/app/src/context/file/content-cache.ts @@ -1,4 +1,4 @@ -import type { FileContent } from "@opencode-ai/sdk/v2" +import type { FileContent } from "@/types" const MAX_FILE_CONTENT_ENTRIES = 40 const MAX_FILE_CONTENT_BYTES = 20 * 1024 * 1024 diff --git a/packages/app/src/context/file/tree-store.ts b/packages/app/src/context/file/tree-store.ts index 5769c318f07..e1404e0a8c2 100644 --- a/packages/app/src/context/file/tree-store.ts +++ b/packages/app/src/context/file/tree-store.ts @@ -1,5 +1,5 @@ import { createStore, produce, reconcile } from "solid-js/store" -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" type DirectoryState = { expanded: boolean diff --git a/packages/app/src/context/file/types.ts b/packages/app/src/context/file/types.ts index 7ce8a37c25e..e3af3a99a37 100644 --- a/packages/app/src/context/file/types.ts +++ b/packages/app/src/context/file/types.ts @@ -1,4 +1,4 @@ -import type { FileContent } from "@opencode-ai/sdk/v2" +import type { FileContent } from "@/types" export type FileSelection = { startLine: number diff --git a/packages/app/src/context/file/watcher.ts b/packages/app/src/context/file/watcher.ts index fbf71992791..79cda021956 100644 --- a/packages/app/src/context/file/watcher.ts +++ b/packages/app/src/context/file/watcher.ts @@ -1,4 +1,4 @@ -import type { FileNode } from "@opencode-ai/sdk/v2" +import type { FileNode } from "@/types" type WatcherEvent = { type: string diff --git a/packages/app/src/context/global-sync/bootstrap.test.ts b/packages/app/src/context/global-sync/bootstrap.test.ts index 71986dd3c40..fd4044a0fa7 100644 --- a/packages/app/src/context/global-sync/bootstrap.test.ts +++ b/packages/app/src/context/global-sync/bootstrap.test.ts @@ -1,7 +1,8 @@ import { describe, expect, test } from "bun:test" import { createStore } from "solid-js/store" import { QueryClient } from "@tanstack/solid-query" -import type { Config, OpencodeClient, Project } from "@opencode-ai/sdk/v2/client" +import type { Config, Project } from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import type { AgentApi, CatalogApi, CommandApi, ReferenceApi } from "@opencode-ai/client/promise" import type { NormalizedProviderListResponse } from "@opencode-ai/session-ui/context" import { diff --git a/packages/app/src/context/global-sync/bootstrap.ts b/packages/app/src/context/global-sync/bootstrap.ts index 844ce7cfc28..238a53b6230 100644 --- a/packages/app/src/context/global-sync/bootstrap.ts +++ b/packages/app/src/context/global-sync/bootstrap.ts @@ -1,6 +1,5 @@ import type { Config, - OpencodeClient, Path, PermissionRequest, Project, @@ -8,7 +7,8 @@ import type { QuestionRequest, ReferenceInfo, Session, -} from "@opencode-ai/sdk/v2/client" +} from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import type { AgentListInput, AgentListOutput, diff --git a/packages/app/src/context/global-sync/child-store.ts b/packages/app/src/context/global-sync/child-store.ts index 4eaa785789f..d376aa805e0 100644 --- a/packages/app/src/context/global-sync/child-store.ts +++ b/packages/app/src/context/global-sync/child-store.ts @@ -1,7 +1,7 @@ import { createRoot, createSignal, getOwner, onCleanup, runWithOwner, type Owner } from "solid-js" import { createStore, type SetStoreFunction, type Store } from "solid-js/store" import { Persist, persisted } from "@/utils/persist" -import type { VcsInfo } from "@opencode-ai/sdk/v2/client" +import type { VcsInfo } from "@/types" import { DIR_IDLE_TTL_MS, MAX_DIR_STORES, diff --git a/packages/app/src/context/global-sync/event-reducer.test.ts b/packages/app/src/context/global-sync/event-reducer.test.ts index b53fb691b3c..d0c85518164 100644 --- a/packages/app/src/context/global-sync/event-reducer.test.ts +++ b/packages/app/src/context/global-sync/event-reducer.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message, Part, PermissionRequest, Project, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, PermissionRequest, Project, QuestionRequest, Session } from "@/types" import { createStore } from "solid-js/store" import type { State } from "./types" import { applyDirectoryEvent, applyGlobalEvent, cleanupDroppedSessionCaches } from "./event-reducer" diff --git a/packages/app/src/context/global-sync/event-reducer.ts b/packages/app/src/context/global-sync/event-reducer.ts index 8f203715a6d..7837fb7aa05 100644 --- a/packages/app/src/context/global-sync/event-reducer.ts +++ b/packages/app/src/context/global-sync/event-reducer.ts @@ -9,7 +9,7 @@ import type { Session, SessionStatus, Todo, -} from "@opencode-ai/sdk/v2/client" +} from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import type { State, VcsCache } from "./types" import { trimSessions } from "./session-trim" diff --git a/packages/app/src/context/global-sync/home-session-index.test.ts b/packages/app/src/context/global-sync/home-session-index.test.ts index 4e40cc78eae..7b9e286fd51 100644 --- a/packages/app/src/context/global-sync/home-session-index.test.ts +++ b/packages/app/src/context/global-sync/home-session-index.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { SessionV2Info } from "@opencode-ai/sdk/v2/client" +import type { SessionV2Info } from "@/types" import { applyHomeSessionEvent, appendHomeSessionEvent, diff --git a/packages/app/src/context/global-sync/home-session-index.ts b/packages/app/src/context/global-sync/home-session-index.ts index 03a085e34d5..a70dc378fc2 100644 --- a/packages/app/src/context/global-sync/home-session-index.ts +++ b/packages/app/src/context/global-sync/home-session-index.ts @@ -1,4 +1,4 @@ -import type { Event, Session, SessionV2Info, V2SessionListResponse } from "@opencode-ai/sdk/v2/client" +import type { Event, Session, SessionV2Info, V2SessionListResponse } from "@/types" import type { QueryClient } from "@tanstack/solid-query" import { trimSessions } from "./session-trim" import { pathKey } from "@/utils/path-key" diff --git a/packages/app/src/context/global-sync/session-cache.test.ts b/packages/app/src/context/global-sync/session-cache.test.ts index 45fbe38abe7..0e3944666ed 100644 --- a/packages/app/src/context/global-sync/session-cache.test.ts +++ b/packages/app/src/context/global-sync/session-cache.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message, Part, PermissionRequest, QuestionRequest, SessionStatus, Todo } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, PermissionRequest, QuestionRequest, SessionStatus, Todo } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { dropSessionCaches, pickSessionCacheEvictions } from "./session-cache" diff --git a/packages/app/src/context/global-sync/session-cache.ts b/packages/app/src/context/global-sync/session-cache.ts index 7d684a5a1ab..d6af434a0bc 100644 --- a/packages/app/src/context/global-sync/session-cache.ts +++ b/packages/app/src/context/global-sync/session-cache.ts @@ -1,4 +1,4 @@ -import type { Message, Part, PermissionRequest, QuestionRequest, SessionStatus, Todo } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, PermissionRequest, QuestionRequest, SessionStatus, Todo } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import type { SessionMessageInfo } from "@opencode-ai/client/promise" diff --git a/packages/app/src/context/global-sync/session-trim.test.ts b/packages/app/src/context/global-sync/session-trim.test.ts index be12c074b5d..0eda5c7500a 100644 --- a/packages/app/src/context/global-sync/session-trim.test.ts +++ b/packages/app/src/context/global-sync/session-trim.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest, Session } from "@/types" import { trimSessions } from "./session-trim" const session = (input: { id: string; parentID?: string; created: number; updated?: number; archived?: number }) => diff --git a/packages/app/src/context/global-sync/session-trim.ts b/packages/app/src/context/global-sync/session-trim.ts index ba13cb5ec0e..eaa9bacc5f8 100644 --- a/packages/app/src/context/global-sync/session-trim.ts +++ b/packages/app/src/context/global-sync/session-trim.ts @@ -1,4 +1,4 @@ -import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest, Session } from "@/types" import { cmp } from "./utils" import { SESSION_RECENT_LIMIT, SESSION_RECENT_WINDOW } from "./types" diff --git a/packages/app/src/context/global-sync/types.ts b/packages/app/src/context/global-sync/types.ts index 74191e10b07..e0a69603cbd 100644 --- a/packages/app/src/context/global-sync/types.ts +++ b/packages/app/src/context/global-sync/types.ts @@ -12,7 +12,7 @@ import type { SessionStatus, Todo, VcsInfo, -} from "@opencode-ai/sdk/v2/client" +} from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { NormalizedProviderListResponse } from "@opencode-ai/session-ui/context" import type { CommandInfo, McpResource, McpServer, SessionMessageInfo } from "@opencode-ai/client/promise" diff --git a/packages/app/src/context/global-sync/utils.ts b/packages/app/src/context/global-sync/utils.ts index 1d917d7da71..c02e887a0d4 100644 --- a/packages/app/src/context/global-sync/utils.ts +++ b/packages/app/src/context/global-sync/utils.ts @@ -5,7 +5,7 @@ import type { PermissionRequest, ProviderListOutput, } from "@opencode-ai/client/promise" -import type { Agent, Event, Project, Provider, ProviderListResponse } from "@opencode-ai/sdk/v2/client" +import type { Agent, Event, Project, Provider, ProviderListResponse } from "@/types" import type { Project as CurrentProject } from "@opencode-ai/client/promise" import { NormalizedProviderListResponse } from "@opencode-ai/session-ui/context" export { pathKey as directoryKey, type PathKey as DirectoryKey } from "@/utils/path-key" diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index 6235f35c45a..78a7e94f3fe 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -7,7 +7,7 @@ import { useServerSync } from "./server-sync" import { useServerSDK } from "./server-sdk" import { RECENTLY_CLOSED_DISPLAY_LIMIT, ServerConnection, useServer } from "./server" import { usePlatform } from "./platform" -import { Project } from "@opencode-ai/sdk/v2" +import type { Project } from "@/types" import { normalizeProjectInfo } from "./global-sync/utils" import { Persist, persisted, removePersisted } from "@/utils/persist" import { pathKey } from "@/utils/path-key" diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index 9bfa13d854d..d73618e0567 100644 --- a/packages/app/src/context/notification.tsx +++ b/packages/app/src/context/notification.tsx @@ -9,7 +9,7 @@ import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" import { base64Encode } from "@opencode-ai/core/util/encode" import { decode64 } from "@/utils/base64" -import { EventSessionError } from "@opencode-ai/sdk/v2" +import type { EventSessionError } from "@/types" import { Persist, persisted } from "@/utils/persist" import { playSoundById } from "@/utils/sound" import { useGlobal } from "./global" diff --git a/packages/app/src/context/permission-auto-respond.test.ts b/packages/app/src/context/permission-auto-respond.test.ts index 794e03ae488..b534dd7d3b0 100644 --- a/packages/app/src/context/permission-auto-respond.test.ts +++ b/packages/app/src/context/permission-auto-respond.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest, Session } from "@/types" import { base64Encode } from "@opencode-ai/core/util/encode" import { autoRespondsPermission, isDirectoryAutoAccepting, sessionAutoAccept } from "./permission-auto-respond" diff --git a/packages/app/src/context/permission.tsx b/packages/app/src/context/permission.tsx index d6d8019262a..45135cb66f7 100644 --- a/packages/app/src/context/permission.tsx +++ b/packages/app/src/context/permission.tsx @@ -1,7 +1,7 @@ import { createEffect, createMemo, createRoot, getOwner, onCleanup } from "solid-js" import { createStore, produce } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" -import type { PermissionRequest } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest } from "@/types" import { Persist, persisted } from "@/utils/persist" import type { ServerSDK } from "@/context/server-sdk" import type { ServerSync } from "./server-sync" diff --git a/packages/app/src/context/prompt-state.ts b/packages/app/src/context/prompt-state.ts index 73196289e2f..064e9744e70 100644 --- a/packages/app/src/context/prompt-state.ts +++ b/packages/app/src/context/prompt-state.ts @@ -1,5 +1,5 @@ import { checksum } from "@opencode-ai/core/util/encode" -import type { FilePartSource } from "@opencode-ai/sdk/v2/client" +import type { FilePartSource } from "@/types" import { batch, createMemo, type Accessor } from "solid-js" import { createStore, type SetStoreFunction } from "solid-js/store" import type { FileSelection } from "@/context/file" diff --git a/packages/app/src/context/server-sdk.test.ts b/packages/app/src/context/server-sdk.test.ts index b5966ce77f9..30c40d32442 100644 --- a/packages/app/src/context/server-sdk.test.ts +++ b/packages/app/src/context/server-sdk.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "bun:test" import { adaptServerEvent, coalesceServerEvents, enqueueServerEvent, resumeStreamAfterPageShow } from "./server-sdk" import type { OpenCodeEvent } from "@opencode-ai/client/promise" -import type { Event } from "@opencode-ai/sdk/v2/client" +import type { Event } from "@/types" describe("resumeStreamAfterPageShow", () => { test("restarts a stream only after a back-forward cache restore", () => { diff --git a/packages/app/src/context/server-sdk.tsx b/packages/app/src/context/server-sdk.tsx index aaf43703ef2..8dbeeffd962 100644 --- a/packages/app/src/context/server-sdk.tsx +++ b/packages/app/src/context/server-sdk.tsx @@ -1,5 +1,5 @@ import type { OpenCodeEvent } from "@opencode-ai/client/promise" -import type { Event } from "@opencode-ai/sdk/v2/client" +import type { Event, PermissionRequest } from "@/types" import { createSimpleContext } from "@opencode-ai/ui/context" import { createGlobalEmitter } from "@solid-primitives/event-bus" import { makeEventListener } from "@solid-primitives/event-listener" @@ -18,7 +18,7 @@ const isAbortError = (error: unknown) => error !== null && typeof error === "object" && "name" in error && error.name === "AbortError" const isStreamClosed = (error: unknown, signal?: AbortSignal) => isAbortError(error) || signal?.aborted === true -export type ServerEvent = Event & { current?: OpenCodeEvent } +export type ServerEvent = Event & { id?: string; current?: OpenCodeEvent } type QueuedServerEvent = { directory: string; payload: ServerEvent } type CurrentDelta = Extract< OpenCodeEvent, @@ -41,9 +41,9 @@ export function adaptServerEvent(event: OpenCodeEvent): ServerEvent { event.data.source?.type === "tool" ? { messageID: event.data.source.messageID, callID: event.data.source.id } : undefined, - }, + } satisfies PermissionRequest, current: event, - } as ServerEvent + } } return { id: event.id, type: event.type, properties: event.data, current: event } as ServerEvent } diff --git a/packages/app/src/context/server-session.test.ts b/packages/app/src/context/server-session.test.ts index e9595e13760..ad0d572b5c1 100644 --- a/packages/app/src/context/server-session.test.ts +++ b/packages/app/src/context/server-session.test.ts @@ -1,7 +1,8 @@ import { describe, expect, test } from "bun:test" import type { retry } from "@opencode-ai/core/util/retry" import type { OpenCodeEvent, SessionApi } from "@opencode-ai/client/promise" -import type { Message, OpencodeClient, Part, Session } from "@opencode-ai/sdk/v2/client" +import type { Message, Part, Session } from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import { createServerSession } from "./server-session" import type { ServerApi } from "@/utils/server" diff --git a/packages/app/src/context/server-session.ts b/packages/app/src/context/server-session.ts index 69bec61ba2f..e3f04f9bdb6 100644 --- a/packages/app/src/context/server-session.ts +++ b/packages/app/src/context/server-session.ts @@ -3,14 +3,14 @@ import { retry } from "@opencode-ai/core/util/retry" import type { OpenCodeEvent, SessionApi, SessionMessageInfo } from "@opencode-ai/client/promise" import type { Message, - OpencodeClient, Part, PermissionRequest, QuestionRequest, Session, SessionStatus, Todo, -} from "@opencode-ai/sdk/v2/client" +} from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { batch } from "solid-js" import { createStore, produce, reconcile } from "solid-js/store" diff --git a/packages/app/src/context/server-sync.tsx b/packages/app/src/context/server-sync.tsx index 196cda84794..7f0ab7654b9 100644 --- a/packages/app/src/context/server-sync.tsx +++ b/packages/app/src/context/server-sync.tsx @@ -1,11 +1,11 @@ import type { Config, - OpencodeClient, Path, Project, ProviderAuthResponse, SessionStatus, -} from "@opencode-ai/sdk/v2/client" +} from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import { showToast } from "@/utils/toast" import { getFilename } from "@opencode-ai/core/util/path" import { type Accessor, batch, createMemo, getOwner, onCleanup, onMount, untrack } from "solid-js" diff --git a/packages/app/src/context/sync-optimistic.test.ts b/packages/app/src/context/sync-optimistic.test.ts index 94324f8a060..6679947149a 100644 --- a/packages/app/src/context/sync-optimistic.test.ts +++ b/packages/app/src/context/sync-optimistic.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Message, Part } from "@opencode-ai/sdk/v2/client" +import type { Message, Part } from "@/types" import { applyOptimisticAdd, applyOptimisticRemove, mergeOptimisticPage } from "./sync" type Text = Extract diff --git a/packages/app/src/context/sync.tsx b/packages/app/src/context/sync.tsx index b90f49ffd49..c129b958b1a 100644 --- a/packages/app/src/context/sync.tsx +++ b/packages/app/src/context/sync.tsx @@ -2,7 +2,7 @@ import { Binary } from "@opencode-ai/core/util/binary" import { createMemo } from "solid-js" import { useServerSync } from "./server-sync" import { useSDK } from "./sdk" -import type { Message, Part } from "@opencode-ai/sdk/v2/client" +import type { Message, Part } from "@/types" const SKIP_PARTS = new Set(["patch", "step-start", "step-finish"]) diff --git a/packages/app/src/context/tabs.tsx b/packages/app/src/context/tabs.tsx index 75191d54cf4..7bebc07664d 100644 --- a/packages/app/src/context/tabs.tsx +++ b/packages/app/src/context/tabs.tsx @@ -1,4 +1,4 @@ -import type { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { createSimpleContext } from "@opencode-ai/ui/context" import { createStore, produce } from "solid-js/store" import { Persist, persisted, removePersisted, draftPersistedKeys } from "@/utils/persist" diff --git a/packages/app/src/pages/home/home-sessions-controller.tsx b/packages/app/src/pages/home/home-sessions-controller.tsx index a12e9800e9f..d63c068b6c8 100644 --- a/packages/app/src/pages/home/home-sessions-controller.tsx +++ b/packages/app/src/pages/home/home-sessions-controller.tsx @@ -1,4 +1,4 @@ -import type { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { preloadMarkdown } from "@opencode-ai/session-ui/markdown-cache" import { useDialog } from "@opencode-ai/ui/context/dialog" import { useMarked } from "@opencode-ai/ui/context/marked" diff --git a/packages/app/src/pages/home/home-sessions-view.tsx b/packages/app/src/pages/home/home-sessions-view.tsx index df93c4a7141..13465d1992e 100644 --- a/packages/app/src/pages/home/home-sessions-view.tsx +++ b/packages/app/src/pages/home/home-sessions-view.tsx @@ -1,4 +1,4 @@ -import type { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { type Accessor, createMemo, For, Show } from "solid-js" import { Spinner } from "@opencode-ai/ui/spinner" import { ScrollView } from "@opencode-ai/ui/scroll-view" diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index b348b44d8a8..1dde8b59cb6 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -26,7 +26,7 @@ import { Tooltip } from "@opencode-ai/ui/tooltip" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" import { Dialog } from "@opencode-ai/ui/dialog" import { getFilename } from "@opencode-ai/core/util/path" -import { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { usePlatform } from "@/context/platform" import { useSettings } from "@/context/settings" import { createStore, produce, reconcile } from "solid-js/store" diff --git a/packages/app/src/pages/layout/helpers.test.ts b/packages/app/src/pages/layout/helpers.test.ts index df87ddfecd2..96105247eea 100644 --- a/packages/app/src/pages/layout/helpers.test.ts +++ b/packages/app/src/pages/layout/helpers.test.ts @@ -6,7 +6,7 @@ import { parseDeepLink, parseNewSessionDeepLink, } from "./deep-links" -import { type Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { childSessionOnPath, closeHomeProject, diff --git a/packages/app/src/pages/layout/helpers.ts b/packages/app/src/pages/layout/helpers.ts index ce793e282bd..dec03c6178c 100644 --- a/packages/app/src/pages/layout/helpers.ts +++ b/packages/app/src/pages/layout/helpers.ts @@ -1,5 +1,5 @@ import { getFilename } from "@opencode-ai/core/util/path" -import { type Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { pathKey } from "@/utils/path-key" import type { ServerConnection } from "@/context/server" import type { HomeProjectSelection } from "@/context/layout" diff --git a/packages/app/src/pages/layout/sidebar-items.tsx b/packages/app/src/pages/layout/sidebar-items.tsx index 7046484a60f..96a78fee570 100644 --- a/packages/app/src/pages/layout/sidebar-items.tsx +++ b/packages/app/src/pages/layout/sidebar-items.tsx @@ -1,4 +1,4 @@ -import type { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { Avatar } from "@opencode-ai/ui/avatar" import { Icon } from "@opencode-ai/ui/icon" import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" diff --git a/packages/app/src/pages/layout/sidebar-workspace.tsx b/packages/app/src/pages/layout/sidebar-workspace.tsx index fe34bdd402e..189d32d5dbf 100644 --- a/packages/app/src/pages/layout/sidebar-workspace.tsx +++ b/packages/app/src/pages/layout/sidebar-workspace.tsx @@ -14,7 +14,7 @@ import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2" import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon" import { Spinner } from "@opencode-ai/ui/spinner" import { Tooltip } from "@opencode-ai/ui/tooltip" -import { type Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { type LocalProject } from "@/context/layout" import { useServerSync, useQueryOptions } from "@/context/server-sync" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index c6e3a5fcbb7..3c2263feb4d 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1,4 +1,4 @@ -import type { FilePart, Project, UserMessage, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { FilePart, Project, UserMessage, VcsFileDiff } from "@/types" import { getFilename } from "@opencode-ai/core/util/path" import { useDialog } from "@opencode-ai/ui/context/dialog" import { createQuery, skipToken, useMutation, useQueryClient } from "@tanstack/solid-query" diff --git a/packages/app/src/pages/session/composer/session-composer-state.test.ts b/packages/app/src/pages/session/composer/session-composer-state.test.ts index 49efcc971a9..ddb0ddf65f5 100644 --- a/packages/app/src/pages/session/composer/session-composer-state.test.ts +++ b/packages/app/src/pages/session/composer/session-composer-state.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest, QuestionRequest, Session } from "@/types" import { todoDockAtBoundary, todoState } from "./session-composer-state" import { sessionPermissionRequest, sessionQuestionRequest } from "./session-request-tree" diff --git a/packages/app/src/pages/session/composer/session-composer-state.ts b/packages/app/src/pages/session/composer/session-composer-state.ts index f54e0c9e4f5..1b15d8f0335 100644 --- a/packages/app/src/pages/session/composer/session-composer-state.ts +++ b/packages/app/src/pages/session/composer/session-composer-state.ts @@ -1,6 +1,6 @@ import { createEffect, createMemo, on, onCleanup } from "solid-js" import { createStore } from "solid-js/store" -import type { PermissionRequest, QuestionRequest, Todo } from "@opencode-ai/sdk/v2" +import type { PermissionRequest, QuestionRequest, Todo } from "@/types" import { useParams } from "@solidjs/router" import { showToast } from "@/utils/toast" import { useServerSync } from "@/context/server-sync" diff --git a/packages/app/src/pages/session/composer/session-permission-dock.tsx b/packages/app/src/pages/session/composer/session-permission-dock.tsx index 35a62f75cfe..44a6ce9b003 100644 --- a/packages/app/src/pages/session/composer/session-permission-dock.tsx +++ b/packages/app/src/pages/session/composer/session-permission-dock.tsx @@ -1,5 +1,5 @@ import { For, Show } from "solid-js" -import type { PermissionRequest } from "@opencode-ai/sdk/v2" +import type { PermissionRequest } from "@/types" import { Button } from "@opencode-ai/ui/button" import { DockPrompt } from "@opencode-ai/session-ui/dock-prompt" import { Icon } from "@opencode-ai/ui/icon" diff --git a/packages/app/src/pages/session/composer/session-question-dock.tsx b/packages/app/src/pages/session/composer/session-question-dock.tsx index 941424e247c..5705e93d58b 100644 --- a/packages/app/src/pages/session/composer/session-question-dock.tsx +++ b/packages/app/src/pages/session/composer/session-question-dock.tsx @@ -6,7 +6,7 @@ import { DockPrompt } from "@opencode-ai/session-ui/dock-prompt" import { Icon } from "@opencode-ai/ui/icon" import { useSpring } from "@opencode-ai/ui/motion-spring" import { showToast } from "@/utils/toast" -import type { QuestionAnswer, QuestionRequest } from "@opencode-ai/sdk/v2" +import type { QuestionAnswer, QuestionRequest } from "@/types" import { useLanguage } from "@/context/language" import { useSDK } from "@/context/sdk" import { makeEventListener } from "@solid-primitives/event-listener" diff --git a/packages/app/src/pages/session/composer/session-request-tree.ts b/packages/app/src/pages/session/composer/session-request-tree.ts index 03872c091c0..1e6cf770fbc 100644 --- a/packages/app/src/pages/session/composer/session-request-tree.ts +++ b/packages/app/src/pages/session/composer/session-request-tree.ts @@ -1,4 +1,4 @@ -import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client" +import type { PermissionRequest, QuestionRequest, Session } from "@/types" function sessionTreeRequest( session: Session[], diff --git a/packages/app/src/pages/session/composer/session-todo-dock.tsx b/packages/app/src/pages/session/composer/session-todo-dock.tsx index d44b4902622..43b40c18a00 100644 --- a/packages/app/src/pages/session/composer/session-todo-dock.tsx +++ b/packages/app/src/pages/session/composer/session-todo-dock.tsx @@ -1,4 +1,4 @@ -import type { Todo } from "@opencode-ai/sdk/v2" +import type { Todo } from "@/types" import { AnimatedNumber } from "@opencode-ai/ui/animated-number" import { Checkbox } from "@opencode-ai/ui/checkbox" import { DockTray } from "@opencode-ai/ui/dock-surface" diff --git a/packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx b/packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx index 41d1f984bde..9eae5279650 100644 --- a/packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx +++ b/packages/app/src/pages/session/composer/todo-panel-motion.stories.tsx @@ -1,7 +1,7 @@ // @ts-nocheck import { createEffect, createMemo, onCleanup } from "solid-js" import { createStore } from "solid-js/store" -import type { Todo } from "@opencode-ai/sdk/v2" +import type { Todo } from "@/types" import { useServerSync } from "@/context/global-sync" import { PromptInput } from "@/components/prompt-input" import { usePrompt } from "@/context/prompt" diff --git a/packages/app/src/pages/session/review-tab.tsx b/packages/app/src/pages/session/review-tab.tsx index 1b65af7121a..880433016fc 100644 --- a/packages/app/src/pages/session/review-tab.tsx +++ b/packages/app/src/pages/session/review-tab.tsx @@ -1,6 +1,6 @@ import { createEffect, onCleanup, type JSX } from "solid-js" import { makeEventListener } from "@solid-primitives/event-listener" -import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff, VcsFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { SessionReview } from "@opencode-ai/session-ui/session-review" import type { diff --git a/packages/app/src/pages/session/session-model-helpers.test.ts b/packages/app/src/pages/session/session-model-helpers.test.ts index 201627b3691..b4e311ff505 100644 --- a/packages/app/src/pages/session/session-model-helpers.test.ts +++ b/packages/app/src/pages/session/session-model-helpers.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { UserMessage } from "@opencode-ai/sdk/v2" +import type { UserMessage } from "@/types" import { resetSessionModel, restorePromptModel, syncPromptModel, syncSessionModel } from "./session-model-helpers" const message = (input?: { agent?: string; model?: UserMessage["model"] }) => diff --git a/packages/app/src/pages/session/session-model-helpers.ts b/packages/app/src/pages/session/session-model-helpers.ts index f2aadff27d8..26210c9b404 100644 --- a/packages/app/src/pages/session/session-model-helpers.ts +++ b/packages/app/src/pages/session/session-model-helpers.ts @@ -1,4 +1,4 @@ -import type { UserMessage } from "@opencode-ai/sdk/v2" +import type { UserMessage } from "@/types" type Local = { session: { diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx index 22c52e73feb..0c57cd76e05 100644 --- a/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app/src/pages/session/session-side-panel.tsx @@ -23,7 +23,7 @@ import { Mark } from "@opencode-ai/ui/logo" import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2" import { KeybindV2 } from "@opencode-ai/ui/v2/keybind-v2" import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2" -import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff, VcsFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { ConstrainDragYAxis, getDraggableId } from "@/utils/solid-dnd" import { useDialog } from "@opencode-ai/ui/context/dialog" diff --git a/packages/app/src/pages/session/timeline/message-timeline.tsx b/packages/app/src/pages/session/timeline/message-timeline.tsx index 81c1a8f0228..23c85514764 100644 --- a/packages/app/src/pages/session/timeline/message-timeline.tsx +++ b/packages/app/src/pages/session/timeline/message-timeline.tsx @@ -51,7 +51,7 @@ import type { Part as PartType, ToolPart, UserMessage, -} from "@opencode-ai/sdk/v2" +} from "@/types" import { showToast } from "@/utils/toast" import { getDirectory, getFilename } from "@opencode-ai/core/util/path" import { Popover as KobaltePopover } from "@kobalte/core/popover" diff --git a/packages/app/src/pages/session/timeline/model.test.ts b/packages/app/src/pages/session/timeline/model.test.ts index 24612072c3d..ca98781c065 100644 --- a/packages/app/src/pages/session/timeline/model.test.ts +++ b/packages/app/src/pages/session/timeline/model.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { AssistantMessage, Message, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Message, UserMessage } from "@/types" import { isTimelineReady, loadOlderTimeline, selectUserMessages, selectVisibleUserMessages } from "./model" const user = (id: string) => ({ id, role: "user" }) as UserMessage diff --git a/packages/app/src/pages/session/timeline/model.ts b/packages/app/src/pages/session/timeline/model.ts index 7eebee60807..7ab03a0cd9a 100644 --- a/packages/app/src/pages/session/timeline/model.ts +++ b/packages/app/src/pages/session/timeline/model.ts @@ -1,4 +1,4 @@ -import type { Message, UserMessage } from "@opencode-ai/sdk/v2" +import type { Message, UserMessage } from "@/types" import { createMemo, createResource, onCleanup, untrack, type Accessor } from "solid-js" import { useServerSync } from "@/context/server-sync" import { useSync } from "@/context/sync" diff --git a/packages/app/src/pages/session/timeline/projection.ts b/packages/app/src/pages/session/timeline/projection.ts index e30c936d73c..3d3c0ba7eb8 100644 --- a/packages/app/src/pages/session/timeline/projection.ts +++ b/packages/app/src/pages/session/timeline/projection.ts @@ -1,5 +1,5 @@ import type { SessionMessageInfo } from "@opencode-ai/client/promise" -import type { AssistantMessage, Message, Part, SessionStatus, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Message, Part, SessionStatus, UserMessage } from "@/types" import { createMemo, type Accessor } from "solid-js" import { reuseTimelineRows } from "./row-reconciliation" import { Timeline, TimelineRow } from "./rows" diff --git a/packages/app/src/pages/session/timeline/rows.ts b/packages/app/src/pages/session/timeline/rows.ts index 25a5113344e..9bcd9e7df4b 100644 --- a/packages/app/src/pages/session/timeline/rows.ts +++ b/packages/app/src/pages/session/timeline/rows.ts @@ -1,6 +1,6 @@ import { parseCommentNote, readCommentMetadata } from "@/utils/comment-note" import type { SessionMessageInfo } from "@opencode-ai/client/promise" -import { AssistantMessage, Part, SessionStatus, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, Part, SessionStatus, UserMessage } from "@/types" import { groupParts, renderable, type PartGroup } from "@opencode-ai/session-ui/message-part" import { TimelineRow, type SummaryDiff } from "./timeline-row" import { uniqueSummaryDiffs } from "./summary-diffs" @@ -215,7 +215,7 @@ export namespace Timeline { } if (error) { - const data = error.data?.message + const data = error.data && "message" in error.data ? error.data.message : undefined rows.push( new TimelineRow.Error({ userMessageID: userMessage.id, diff --git a/packages/app/src/pages/session/timeline/summary-diffs.test.ts b/packages/app/src/pages/session/timeline/summary-diffs.test.ts index 9b66bf67719..38e20ede10e 100644 --- a/packages/app/src/pages/session/timeline/summary-diffs.test.ts +++ b/packages/app/src/pages/session/timeline/summary-diffs.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff } from "@/types" import { uniqueSummaryDiffs } from "./summary-diffs" const diff = (file: string, additions: number) => diff --git a/packages/app/src/pages/session/timeline/summary-diffs.ts b/packages/app/src/pages/session/timeline/summary-diffs.ts index 2df37af5a6f..2850c577b85 100644 --- a/packages/app/src/pages/session/timeline/summary-diffs.ts +++ b/packages/app/src/pages/session/timeline/summary-diffs.ts @@ -1,4 +1,4 @@ -import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff } from "@/types" import type { SummaryDiff } from "./timeline-row" export function uniqueSummaryDiffs(diffs: SnapshotFileDiff[] | undefined) { diff --git a/packages/app/src/pages/session/timeline/timeline-row.ts b/packages/app/src/pages/session/timeline/timeline-row.ts index 3905254b29b..f911e9dd419 100644 --- a/packages/app/src/pages/session/timeline/timeline-row.ts +++ b/packages/app/src/pages/session/timeline/timeline-row.ts @@ -1,4 +1,4 @@ -import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff } from "@/types" import type { PartGroup } from "@opencode-ai/session-ui/message-part" import { Data, Equal } from "effect" diff --git a/packages/app/src/pages/session/usage-exceeded-dialogs.tsx b/packages/app/src/pages/session/usage-exceeded-dialogs.tsx index d56fa3d1f48..194846e8476 100644 --- a/packages/app/src/pages/session/usage-exceeded-dialogs.tsx +++ b/packages/app/src/pages/session/usage-exceeded-dialogs.tsx @@ -1,6 +1,6 @@ import { useSDK } from "@/context/sdk" import { Persist, persisted } from "@/utils/persist" -import { SessionStatus } from "@opencode-ai/sdk/v2" +import type { SessionStatus } from "@/types" import { onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { useSessionLayout } from "./session-layout" diff --git a/packages/app/src/pages/session/use-session-commands.tsx b/packages/app/src/pages/session/use-session-commands.tsx index 12dd96a5e66..04638d53bfc 100644 --- a/packages/app/src/pages/session/use-session-commands.tsx +++ b/packages/app/src/pages/session/use-session-commands.tsx @@ -15,7 +15,7 @@ import { showToast } from "@/utils/toast" import { findLast } from "@opencode-ai/core/util/array" import { createSessionTabs } from "@/pages/session/helpers" import { extractPromptFromParts } from "@/utils/prompt" -import { UserMessage } from "@opencode-ai/sdk/v2" +import type { UserMessage } from "@/types" import { useSessionLayout } from "@/pages/session/session-layout" import { createSessionOwnership } from "./session-ownership" import { useLocal } from "@/context/local" diff --git a/packages/app/src/pages/session/use-session-hash-scroll.ts b/packages/app/src/pages/session/use-session-hash-scroll.ts index 65577abae22..c60a53b7961 100644 --- a/packages/app/src/pages/session/use-session-hash-scroll.ts +++ b/packages/app/src/pages/session/use-session-hash-scroll.ts @@ -1,4 +1,4 @@ -import type { UserMessage } from "@opencode-ai/sdk/v2" +import type { UserMessage } from "@/types" import { useLocation, useNavigate } from "@solidjs/router" import { createEffect, createMemo, onCleanup, onMount } from "solid-js" import { messageIdFromHash } from "./message-id-from-hash" diff --git a/packages/app/src/pages/session/v2/review-diff-kinds.ts b/packages/app/src/pages/session/v2/review-diff-kinds.ts index d3adb1f2fff..d8bb57dae70 100644 --- a/packages/app/src/pages/session/v2/review-diff-kinds.ts +++ b/packages/app/src/pages/session/v2/review-diff-kinds.ts @@ -1,4 +1,4 @@ -import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff, VcsFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import type { Kind } from "@/components/file-tree-v2" import { normalizeFileTreeV2Path } from "@/components/file-tree-v2-model" diff --git a/packages/app/src/pages/session/v2/review-panel-v2.tsx b/packages/app/src/pages/session/v2/review-panel-v2.tsx index fcd6bbb79fe..df3f22960df 100644 --- a/packages/app/src/pages/session/v2/review-panel-v2.tsx +++ b/packages/app/src/pages/session/v2/review-panel-v2.tsx @@ -1,5 +1,5 @@ import { createMemo, createResource, createSignal, Show, type JSX } from "solid-js" -import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff, VcsFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" import { SESSION_REVIEW_V2_SIDEBAR_WIDTH_MAX, diff --git a/packages/app/src/types.ts b/packages/app/src/types.ts new file mode 100644 index 00000000000..8c93a63bdc9 --- /dev/null +++ b/packages/app/src/types.ts @@ -0,0 +1,246 @@ +import type { + Agent, + Config, + Event, + FileContent, + FileNode, + LspStatus, + Path, + PermissionRequest, + Project, + Provider, + ProviderAuthResponse, + ProviderListResponse, + QuestionAnswer, + QuestionRequest, + ReferenceInfo, + Session, + SessionNotFoundError, + SessionStatus, + SessionV2Info, + SnapshotFileDiff, + Todo, + V2SessionListResponse, + VcsFileDiff, + VcsInfo, +} from "@opencode-ai/sdk/v2/client" + +export type { + Agent, + Config, + Event, + FileContent, + FileNode, + LspStatus, + Path, + PermissionRequest, + Project, + Provider, + ProviderAuthResponse, + ProviderListResponse, + QuestionAnswer, + QuestionRequest, + ReferenceInfo, + Session, + SessionNotFoundError, + SessionStatus, + SessionV2Info, + SnapshotFileDiff, + Todo, + V2SessionListResponse, + VcsFileDiff, + VcsInfo, +} + +export type EventSessionError = Extract + +type MessageError = + | { name: "ProviderAuthError"; data: { providerID: string; message: string } } + | { name: "UnknownError"; data: { message: string; ref?: string } } + | { name: "MessageOutputLengthError"; data: Record } + | { name: "MessageAbortedError"; data: { message: string } } + | { name: "StructuredOutputError"; data: { message: string; retries: number } } + | { name: "ContextOverflowError"; data: { message: string; responseBody?: string } } + | { name: "ContentFilterError"; data: { message: string } } + | { + name: "APIError" + data: { + message: string + statusCode?: number + isRetryable: boolean + responseHeaders?: Record + responseBody?: string + metadata?: Record + } + } + +export type UserMessage = { + id: string + sessionID: string + role: "user" + time: { created: number } + format?: { type: "text" } | { type: "json_schema"; schema: Record; retryCount?: number } + summary?: { title?: string; body?: string; diffs: SnapshotFileDiff[] } + agent: string + model: { providerID: string; modelID: string; variant?: string } + system?: string + tools?: Record +} + +export type AssistantMessage = { + id: string + sessionID: string + role: "assistant" + time: { created: number; completed?: number } + error?: MessageError + parentID: string + modelID: string + providerID: string + mode: string + agent: string + path: { cwd: string; root: string } + summary?: boolean + cost: number + tokens: { + total?: number + input: number + output: number + reasoning: number + cache: { read: number; write: number } + } + structured?: unknown + variant?: string + finish?: string +} + +export type Message = UserMessage | AssistantMessage + +type PartBase = { id: string; sessionID: string; messageID: string } + +export type TextPart = PartBase & { + type: "text" + text: string + synthetic?: boolean + ignored?: boolean + time?: { start: number; end?: number } + metadata?: Record +} + +type FilePartSourceText = { value: string; start: number; end: number } +type FileSource = { text: FilePartSourceText; type: "file"; path: string } +type SymbolSource = { + text: FilePartSourceText + type: "symbol" + path: string + range: { start: { line: number; character: number }; end: { line: number; character: number } } + name: string + kind: number +} +type ResourceSource = { text: FilePartSourceText; type: "resource"; clientName: string; uri: string } + +export type FilePartSource = FileSource | SymbolSource | ResourceSource + +export type FilePart = PartBase & { + type: "file" + mime: string + filename?: string + url: string + source?: FilePartSource +} + +export type ToolState = + | { status: "pending"; input: Record; raw: string } + | { + status: "running" + input: Record + title?: string + metadata?: Record + time: { start: number } + } + | { + status: "completed" + input: Record + output: string + title: string + metadata: Record + time: { start: number; end: number; compacted?: number } + attachments?: FilePart[] + } + | { + status: "error" + input: Record + error: string + metadata?: Record + time: { start: number; end: number } + } + +export type ToolPart = PartBase & { + type: "tool" + callID: string + tool: string + state: ToolState + metadata?: Record +} + +export type AgentPart = PartBase & { + type: "agent" + name: string + source?: { value: string; start: number; end: number } +} + +type ReasoningPart = PartBase & { + type: "reasoning" + text: string + metadata?: Record + time: { start: number; end?: number } +} + +type SubtaskPart = PartBase & { + type: "subtask" + prompt: string + description: string + agent: string + model?: { providerID: string; modelID: string } + command?: string +} + +type StepStartPart = PartBase & { type: "step-start"; snapshot?: string } +type StepFinishPart = PartBase & { + type: "step-finish" + reason: string + snapshot?: string + cost: number + tokens: AssistantMessage["tokens"] +} +type SnapshotPart = PartBase & { type: "snapshot"; snapshot: string } +type PatchPart = PartBase & { type: "patch"; hash: string; files: string[] } +type RetryPart = PartBase & { + type: "retry" + attempt: number + error: Extract + time: { created: number } +} +type CompactionPart = PartBase & { + type: "compaction" + auto: boolean + overflow?: boolean + tail_start_id?: string +} + +export type Part = + | TextPart + | SubtaskPart + | ReasoningPart + | FilePart + | ToolPart + | StepStartPart + | StepFinishPart + | SnapshotPart + | PatchPart + | AgentPart + | RetryPart + | CompactionPart + +export type TextPartInput = Omit & { id?: string } +export type FilePartInput = Omit & { id?: string } +export type AgentPartInput = Omit & { id?: string } diff --git a/packages/app/src/utils/diffs.test.ts b/packages/app/src/utils/diffs.test.ts index a3d25f42795..fae8559e133 100644 --- a/packages/app/src/utils/diffs.test.ts +++ b/packages/app/src/utils/diffs.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "bun:test" -import type { SnapshotFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" -import type { Message } from "@opencode-ai/sdk/v2/client" +import type { Message } from "@/types" import { diffs, message } from "./diffs" const item = { diff --git a/packages/app/src/utils/diffs.ts b/packages/app/src/utils/diffs.ts index a8eec75a9af..ccb64a8b518 100644 --- a/packages/app/src/utils/diffs.ts +++ b/packages/app/src/utils/diffs.ts @@ -1,6 +1,6 @@ -import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2" +import type { SnapshotFileDiff, VcsFileDiff } from "@/types" import type { FileDiffInfo } from "@opencode-ai/client/promise" -import type { Message } from "@opencode-ai/sdk/v2/client" +import type { Message } from "@/types" type Diff = FileDiffInfo | SnapshotFileDiff | VcsFileDiff diff --git a/packages/app/src/utils/prompt.test.ts b/packages/app/src/utils/prompt.test.ts index 1ecaf02c978..76676fd9b43 100644 --- a/packages/app/src/utils/prompt.test.ts +++ b/packages/app/src/utils/prompt.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { Part } from "@opencode-ai/sdk/v2" +import type { Part } from "@/types" import { extractPromptFromParts } from "./prompt" describe("extractPromptFromParts", () => { diff --git a/packages/app/src/utils/prompt.ts b/packages/app/src/utils/prompt.ts index 35aec0071aa..8aa48b2812f 100644 --- a/packages/app/src/utils/prompt.ts +++ b/packages/app/src/utils/prompt.ts @@ -1,4 +1,4 @@ -import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@opencode-ai/sdk/v2" +import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@/types" import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt" type Inline = diff --git a/packages/app/src/utils/server-compat.ts b/packages/app/src/utils/server-compat.ts index 8a2c42f198b..e0c49dfeb24 100644 --- a/packages/app/src/utils/server-compat.ts +++ b/packages/app/src/utils/server-compat.ts @@ -1,6 +1,7 @@ import type { ServerApi } from "./server" import type { ServerProtocol } from "./server-protocol" -import type { AgentPartInput, FilePartInput, OpencodeClient, Session, TextPartInput } from "@opencode-ai/sdk/v2/client" +import type { AgentPartInput, FilePartInput, Session, TextPartInput } from "@/types" +import type { OpencodeClient } from "@opencode-ai/sdk/v2/client" import type { Project, ProjectCurrent, diff --git a/packages/app/src/utils/server-errors.test.ts b/packages/app/src/utils/server-errors.test.ts index 9c735fe6891..02cb4392087 100644 --- a/packages/app/src/utils/server-errors.test.ts +++ b/packages/app/src/utils/server-errors.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import type { SessionNotFoundError } from "@opencode-ai/sdk/v2/client" +import type { SessionNotFoundError } from "@/types" import type { ConfigInvalidError, ProviderModelNotFoundError } from "./server-errors" import { formatServerError, isSessionNotFoundError, parseReadableConfigInvalidError } from "./server-errors" diff --git a/packages/app/src/utils/session-message.ts b/packages/app/src/utils/session-message.ts index 8de3ea816e1..9cadf780e0b 100644 --- a/packages/app/src/utils/session-message.ts +++ b/packages/app/src/utils/session-message.ts @@ -5,7 +5,7 @@ import type { SessionMessageShell, SessionMessageUser, } from "@opencode-ai/client/promise" -import type { AssistantMessage, FilePart, Message, Part, ToolPart, UserMessage } from "@opencode-ai/sdk/v2" +import type { AssistantMessage, FilePart, Message, Part, ToolPart, UserMessage } from "@/types" import { Option, Schema } from "effect" const emptyTokens = { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } } diff --git a/packages/app/src/utils/session.ts b/packages/app/src/utils/session.ts index 833dbb923de..de015411316 100644 --- a/packages/app/src/utils/session.ts +++ b/packages/app/src/utils/session.ts @@ -1,5 +1,5 @@ import type { SessionApi, SessionInfo, SessionListInput } from "@opencode-ai/client/promise" -import type { Session } from "@opencode-ai/sdk/v2/client" +import type { Session } from "@/types" import { withTimestampedFallback } from "@opencode-ai/util/session-title-fallback" export function normalizeSessionInfo(input: SessionInfo | Session): Session {