Răsfoiți Sursa

fix(sdk): use local v2 type owners

Aiden Cline 2 săptămâni în urmă
părinte
comite
5bb0fb580f
31 a modificat fișierele cu 77 adăugiri și 82 ștergeri
  1. 1 0
      bun.lock
  2. 1 1
      packages/app/src/context/global-sync/event-reducer.ts
  3. 1 1
      packages/app/src/context/global-sync/session-cache.test.ts
  4. 1 1
      packages/app/src/context/global-sync/session-cache.ts
  5. 1 1
      packages/app/src/context/global-sync/types.ts
  6. 1 1
      packages/app/src/context/server-session.ts
  7. 2 1
      packages/app/src/pages/session/review-tab.tsx
  8. 2 1
      packages/app/src/pages/session/session-side-panel.tsx
  9. 2 1
      packages/app/src/pages/session/v2/review-diff-kinds.ts
  10. 2 1
      packages/app/src/pages/session/v2/review-panel-v2.tsx
  11. 1 1
      packages/app/src/utils/diffs.test.ts
  12. 1 1
      packages/app/src/utils/diffs.ts
  13. 2 2
      packages/core/src/plugin/host.ts
  14. 2 2
      packages/core/src/plugin/provider/opencode.ts
  15. 8 8
      packages/core/test/plugin/host.ts
  16. 1 0
      packages/enterprise/package.json
  17. 2 1
      packages/enterprise/src/core/share.ts
  18. 2 1
      packages/enterprise/src/routes/share/[shareID].tsx
  19. 1 1
      packages/plugin/src/v2/effect/agent.ts
  20. 1 1
      packages/plugin/src/v2/effect/catalog.ts
  21. 1 1
      packages/plugin/src/v2/effect/command.ts
  22. 1 1
      packages/plugin/src/v2/effect/filesystem.ts
  23. 19 28
      packages/plugin/src/v2/effect/integration.ts
  24. 3 3
      packages/plugin/src/v2/effect/reference.ts
  25. 3 3
      packages/plugin/src/v2/effect/skill.ts
  26. 6 14
      packages/plugin/src/v2/promise/integration.ts
  27. 2 1
      packages/session-ui/src/components/session-diff.ts
  28. 2 1
      packages/session-ui/src/components/session-review.tsx
  29. 1 1
      packages/session-ui/src/components/session-turn.tsx
  30. 2 1
      packages/session-ui/src/context/data.tsx
  31. 2 1
      packages/session-ui/src/v2/components/session-review-file-preview-v2.tsx

+ 1 - 0
bun.lock

@@ -499,6 +499,7 @@
       "version": "1.18.4",
       "dependencies": {
         "@hono/standard-validator": "catalog:",
+        "@opencode-ai/client": "workspace:*",
         "@opencode-ai/core": "workspace:*",
         "@opencode-ai/session-ui": "workspace:*",
         "@opencode-ai/ui": "workspace:*",

+ 1 - 1
packages/app/src/context/global-sync/event-reducer.ts

@@ -8,8 +8,8 @@ import type {
   QuestionRequest,
   Session,
   SessionStatus,
-  FileDiffInfo,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import type { State, VcsCache } from "./types"
 import { trimSessions } from "./session-trim"
 import { dropSessionCaches } from "./session-cache"

+ 1 - 1
packages/app/src/context/global-sync/session-cache.test.ts

@@ -5,8 +5,8 @@ import type {
   PermissionRequest,
   QuestionRequest,
   SessionStatus,
-  FileDiffInfo,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import { dropSessionCaches, pickSessionCacheEvictions } from "./session-cache"
 
 const msg = (id: string, sessionID: string) =>

+ 1 - 1
packages/app/src/context/global-sync/session-cache.ts

@@ -4,8 +4,8 @@ import type {
   PermissionRequest,
   QuestionRequest,
   SessionStatus,
-  FileDiffInfo,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 
 export const SESSION_CACHE_LIMIT = 40
 

+ 1 - 1
packages/app/src/context/global-sync/types.ts

@@ -13,9 +13,9 @@ import type {
   ReferenceInfo,
   Session,
   SessionStatus,
-  FileDiffInfo,
   VcsInfo,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import { NormalizedProviderListResponse } from "@opencode-ai/session-ui/context"
 import type { Accessor } from "solid-js"
 import type { SetStoreFunction, Store } from "solid-js/store"

+ 1 - 1
packages/app/src/context/server-session.ts

@@ -8,8 +8,8 @@ import type {
   QuestionRequest,
   Session,
   SessionStatus,
-  FileDiffInfo,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import { batch } from "solid-js"
 import { createStore, produce, reconcile } from "solid-js/store"
 import { diffs as cleanDiffs, message as cleanMessage } from "@/utils/diffs"

+ 2 - 1
packages/app/src/pages/session/review-tab.tsx

@@ -1,6 +1,7 @@
 import { createEffect, onCleanup, type JSX } from "solid-js"
 import { makeEventListener } from "@solid-primitives/event-listener"
-import type { FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { VcsFileDiff } from "@opencode-ai/sdk/v2"
 import { SessionReview } from "@opencode-ai/session-ui/session-review"
 import type {
   SessionReviewCommentActions,

+ 2 - 1
packages/app/src/pages/session/session-side-panel.tsx

@@ -23,7 +23,8 @@ 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 { FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { VcsFileDiff } from "@opencode-ai/sdk/v2"
 import { ConstrainDragYAxis, getDraggableId } from "@/utils/solid-dnd"
 import { useDialog } from "@opencode-ai/ui/context/dialog"
 

+ 2 - 1
packages/app/src/pages/session/v2/review-diff-kinds.ts

@@ -1,4 +1,5 @@
-import type { FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { VcsFileDiff } from "@opencode-ai/sdk/v2"
 import type { Kind } from "@/components/file-tree-v2"
 import { normalizeFileTreeV2Path } from "@/components/file-tree-v2-model"
 

+ 2 - 1
packages/app/src/pages/session/v2/review-panel-v2.tsx

@@ -1,5 +1,6 @@
 import { createMemo, createResource, createSignal, Show, type JSX } from "solid-js"
-import type { FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { VcsFileDiff } from "@opencode-ai/sdk/v2"
 import {
   SESSION_REVIEW_V2_SIDEBAR_WIDTH_MAX,
   SESSION_REVIEW_V2_SIDEBAR_WIDTH_MIN,

+ 1 - 1
packages/app/src/utils/diffs.test.ts

@@ -1,5 +1,5 @@
 import { describe, expect, test } from "bun:test"
-import type { FileDiffInfo } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import type { Message } from "@opencode-ai/sdk/v2/client"
 import { diffs, message } from "./diffs"
 

+ 1 - 1
packages/app/src/utils/diffs.ts

@@ -1,4 +1,4 @@
-import type { FileDiffInfo } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import type { Message } from "@opencode-ai/sdk/v2/client"
 
 type Diff = FileDiffInfo

+ 2 - 2
packages/core/src/plugin/host.ts

@@ -2,7 +2,7 @@ export * as PluginHost from "./host"
 
 import { Plugin } from "@opencode-ai/plugin/v2/effect"
 import type { IntegrationMethodRegistration } from "@opencode-ai/plugin/v2/effect/integration"
-import type { CredentialOAuth } from "@opencode-ai/sdk/v2/types"
+import type { Credential } from "@opencode-ai/schema/credential"
 import { EventManifest } from "@opencode-ai/schema/event-manifest"
 import { App } from "../app"
 import { Effect, Schema, Stream } from "effect"
@@ -451,6 +451,6 @@ function methodImplementation(input: IntegrationMethodRegistration): Integration
   }
 }
 
-function credential(value: CredentialOAuth) {
+function credential(value: Credential.OAuth) {
   return Credential.OAuth.make({ ...value, methodID: Integration.MethodID.make(value.methodID) })
 }

+ 2 - 2
packages/core/src/plugin/provider/opencode.ts

@@ -2,7 +2,7 @@ import { Duration, Effect, Schema, Semaphore, Stream } from "effect"
 import type { Scope } from "effect"
 import type { IntegrationOAuthMethodRegistration } from "@opencode-ai/plugin/v2/effect/integration"
 import { define } from "@opencode-ai/plugin/v2/effect/plugin"
-import type { CredentialValue } from "@opencode-ai/sdk/v2/types"
+import type { Credential } from "@opencode-ai/schema/credential"
 import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
 import { EventV2 } from "../../event"
 import { Credential } from "../../credential"
@@ -198,7 +198,7 @@ export const OpencodePlugin = define<HttpClient.HttpClient | EventV2.Service | S
   }),
 })
 
-function fetchProviders(http: HttpClient.HttpClient, value: CredentialValue) {
+function fetchProviders(http: HttpClient.HttpClient, value: Credential.Value) {
   const metadata = value.metadata
   const server = typeof metadata?.server === "string" ? metadata.server : defaultServer
   const orgID = typeof metadata?.orgID === "string" ? metadata.orgID : undefined

+ 8 - 8
packages/core/test/plugin/host.ts

@@ -10,12 +10,12 @@ import { ProviderV2 } from "@opencode-ai/core/provider"
 import { AbsolutePath } from "@opencode-ai/core/schema"
 import { WebSearch } from "@opencode-ai/core/websearch"
 import type {
-  CredentialOAuth,
-  IntegrationCommandMethod,
-  IntegrationEnvMethod,
-  IntegrationKeyMethod,
-  IntegrationOAuthMethod,
-} from "@opencode-ai/sdk/v2/types"
+  CommandMethod,
+  EnvMethod,
+  KeyMethod,
+  OAuthMethod,
+} from "@opencode-ai/schema/integration"
+import type { OAuth } from "@opencode-ai/schema/credential"
 import { Effect, Stream } from "effect"
 
 type Overrides = Partial<Omit<Plugin.Context, "options" | "session">> & {
@@ -370,7 +370,7 @@ export function webSearchHost(websearch: WebSearch.Interface): Plugin.Context["w
   }
 }
 
-function oauthCredential(value: CredentialOAuth) {
+function oauthCredential(value: OAuth) {
   return Credential.OAuth.make({ ...value, methodID: Integration.MethodID.make(value.methodID) })
 }
 
@@ -390,7 +390,7 @@ function method(value: Integration.Method) {
 }
 
 function internalMethod(
-  value: IntegrationOAuthMethod | IntegrationCommandMethod | IntegrationKeyMethod | IntegrationEnvMethod,
+  value: OAuthMethod | CommandMethod | KeyMethod | EnvMethod,
 ): Integration.Method {
   if (value.type === "env") return value
   if (value.type === "key") return value

+ 1 - 0
packages/enterprise/package.json

@@ -13,6 +13,7 @@
     "shell-prod": "sst shell --target Teams --stage production"
   },
   "dependencies": {
+    "@opencode-ai/client": "workspace:*",
     "@opencode-ai/core": "workspace:*",
     "@opencode-ai/session-ui": "workspace:*",
     "@opencode-ai/ui": "workspace:*",

+ 2 - 1
packages/enterprise/src/core/share.ts

@@ -1,4 +1,5 @@
-import { FileDiffInfo, Message, Model, Part, Session } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import { Message, Model, Part, Session } from "@opencode-ai/sdk/v2"
 import { iife } from "@opencode-ai/core/util/iife"
 import z from "zod"
 import { Storage } from "./storage"

+ 2 - 1
packages/enterprise/src/routes/share/[shareID].tsx

@@ -1,4 +1,5 @@
-import { FileDiffInfo, Message, Model, Part, Session, SessionStatus, UserMessage } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import { Message, Model, Part, Session, SessionStatus, UserMessage } from "@opencode-ai/sdk/v2"
 import { SessionTurn } from "@opencode-ai/session-ui/session-turn"
 import { SessionReview } from "@opencode-ai/session-ui/session-review"
 import { DataProvider } from "@opencode-ai/session-ui/context"

+ 1 - 1
packages/plugin/src/v2/effect/agent.ts

@@ -1,5 +1,5 @@
 import type { AgentApi } from "@opencode-ai/client/effect/api"
-import type { AgentInfo } from "@opencode-ai/sdk/v2/types"
+import type { AgentInfo } from "@opencode-ai/client/effect"
 import type { Effect } from "effect"
 import type { Transform } from "./registration.js"
 

+ 1 - 1
packages/plugin/src/v2/effect/catalog.ts

@@ -1,4 +1,4 @@
-import type { ModelInfo, ProviderV2Info } from "@opencode-ai/sdk/v2/types"
+import type { ModelInfo, ProviderV2Info } from "@opencode-ai/client/effect"
 import type { CatalogApi } from "@opencode-ai/client/effect/api"
 import type { Model } from "@opencode-ai/schema/model"
 import type { Effect } from "effect"

+ 1 - 1
packages/plugin/src/v2/effect/command.ts

@@ -1,4 +1,4 @@
-import type { CommandInfo } from "@opencode-ai/sdk/v2/types"
+import type { CommandInfo } from "@opencode-ai/client/effect"
 import type { CommandApi } from "@opencode-ai/client/effect/api"
 import type { Effect } from "effect"
 import type { Transform } from "./registration.js"

+ 1 - 1
packages/plugin/src/v2/effect/filesystem.ts

@@ -1,4 +1,4 @@
-import type { FileSystemEntry } from "@opencode-ai/sdk/v2/types"
+import type { FileSystemEntry } from "@opencode-ai/client/effect"
 import type { Effect } from "effect"
 
 export interface FileSystem {

+ 19 - 28
packages/plugin/src/v2/effect/integration.ts

@@ -1,15 +1,6 @@
-import type {
-  ConnectionInfo,
-  CredentialOAuth,
-  CredentialValue,
-  IntegrationCommandMethod,
-  IntegrationEnvMethod,
-  IntegrationInputs,
-  IntegrationKeyMethod,
-  IntegrationMethod,
-  IntegrationOAuthMethod,
-  IntegrationRef,
-} from "@opencode-ai/sdk/v2/types"
+import type { Connection } from "@opencode-ai/schema/connection"
+import type { Credential } from "@opencode-ai/schema/credential"
+import type { Integration } from "@opencode-ai/schema/integration"
 import type { IntegrationApi } from "@opencode-ai/client/effect/api"
 import type { Effect, Scope } from "effect"
 import type { Transform } from "./registration.js"
@@ -21,44 +12,44 @@ export type IntegrationOAuthAuthorization = {
 } & (
   | {
       readonly mode: "auto"
-      readonly callback: Effect.Effect<CredentialOAuth, unknown>
+      readonly callback: Effect.Effect<Credential.OAuth, unknown>
     }
   | {
       readonly mode: "code"
-      readonly callback: (code: string) => Effect.Effect<CredentialOAuth, unknown>
+      readonly callback: (code: string) => Effect.Effect<Credential.OAuth, unknown>
     }
 )
 export type IntegrationOAuthMethodRegistration = {
   readonly integrationID: string
-  readonly method: IntegrationOAuthMethod
-  readonly authorize: (inputs: IntegrationInputs) => Effect.Effect<IntegrationOAuthAuthorization, unknown, Scope.Scope>
-  readonly refresh?: (credential: CredentialOAuth) => Effect.Effect<CredentialOAuth, unknown>
-  readonly label?: (credential: CredentialOAuth) => string | undefined
+  readonly method: Integration.OAuthMethod
+  readonly authorize: (inputs: Integration.Inputs) => Effect.Effect<IntegrationOAuthAuthorization, unknown, Scope.Scope>
+  readonly refresh?: (credential: Credential.OAuth) => Effect.Effect<Credential.OAuth, unknown>
+  readonly label?: (credential: Credential.OAuth) => string | undefined
 }
 export type IntegrationMethodRegistration =
   | IntegrationOAuthMethodRegistration
   | {
       readonly integrationID: string
-      readonly method: IntegrationCommandMethod
+      readonly method: Integration.CommandMethod
     }
   | {
       readonly integrationID: string
-      readonly method: IntegrationKeyMethod
+      readonly method: Integration.KeyMethod
     }
   | {
       readonly integrationID: string
-      readonly method: IntegrationEnvMethod
+      readonly method: Integration.EnvMethod
     }
 
 export interface IntegrationDraft {
-  list(): readonly IntegrationRef[]
-  get(id: string): IntegrationRef | undefined
-  update(id: string, update: (integration: IntegrationRef) => void): void
+  list(): readonly Integration.Ref[]
+  get(id: string): Integration.Ref | undefined
+  update(id: string, update: (integration: Integration.Ref) => void): void
   remove(id: string): void
   readonly method: {
-    list(integrationID: string): readonly IntegrationMethod[]
+    list(integrationID: string): readonly Integration.Method[]
     update(input: IntegrationMethodRegistration): void
-    remove(integrationID: string, method: IntegrationMethod): void
+    remove(integrationID: string, method: Integration.Method): void
   }
 }
 
@@ -66,7 +57,7 @@ export interface IntegrationDomain extends Omit<IntegrationApi<unknown>, "wellkn
   readonly transform: Transform<IntegrationDraft>
   readonly reload: () => Effect.Effect<void>
   readonly connection: {
-    readonly active: (integrationID: string) => Effect.Effect<ConnectionInfo | undefined>
-    readonly resolve: (connection: ConnectionInfo) => Effect.Effect<CredentialValue | undefined, unknown>
+    readonly active: (integrationID: string) => Effect.Effect<Connection.Info | undefined>
+    readonly resolve: (connection: Connection.Info) => Effect.Effect<Credential.Value | undefined, unknown>
   }
 }

+ 3 - 3
packages/plugin/src/v2/effect/reference.ts

@@ -1,12 +1,12 @@
-import type { ReferenceGitSource, ReferenceLocalSource } from "@opencode-ai/sdk/v2/types"
+import type { Reference } from "@opencode-ai/schema/reference"
 import type { ReferenceApi } from "@opencode-ai/client/effect/api"
 import type { Effect } from "effect"
 import type { Transform } from "./registration.js"
 
 export interface ReferenceDraft {
-  add(name: string, source: ReferenceLocalSource | ReferenceGitSource): void
+  add(name: string, source: Reference.LocalSource | Reference.GitSource): void
   remove(name: string): void
-  list(): readonly (readonly [string, ReferenceLocalSource | ReferenceGitSource])[]
+  list(): readonly (readonly [string, Reference.LocalSource | Reference.GitSource])[]
 }
 
 export interface ReferenceDomain extends ReferenceApi<unknown> {

+ 3 - 3
packages/plugin/src/v2/effect/skill.ts

@@ -1,11 +1,11 @@
-import type { SkillSource } from "@opencode-ai/sdk/v2/types"
+import type { Skill } from "@opencode-ai/schema/skill"
 import type { SkillApi } from "@opencode-ai/client/effect/api"
 import type { Effect } from "effect"
 import type { Transform } from "./registration.js"
 
 export interface SkillDraft {
-  source(source: SkillSource): void
-  list(): readonly SkillSource[]
+  source(source: Skill.Source): void
+  list(): readonly Skill.Source[]
 }
 
 export interface SkillDomain extends SkillApi<unknown> {

+ 6 - 14
packages/plugin/src/v2/promise/integration.ts

@@ -1,13 +1,7 @@
 import type { IntegrationApi } from "@opencode-ai/client/promise/api"
 import type { IntegrationDraft, IntegrationMethodRegistration } from "../effect/integration.js"
-import type {
-  CredentialOAuth,
-  CredentialValue,
-  IntegrationEnvMethod,
-  IntegrationInputs,
-  IntegrationKeyMethod,
-  IntegrationOAuthMethod,
-} from "@opencode-ai/sdk/v2/types"
+import type { Connection } from "@opencode-ai/schema/connection"
+import type { Credential } from "@opencode-ai/schema/credential"
 import type { Transform } from "./registration.js"
 
 export type { IntegrationDraft, IntegrationMethodRegistration }
@@ -19,11 +13,11 @@ export type IntegrationOAuthAuthorization = {
 } & (
   | {
       readonly mode: "auto"
-      readonly callback: Promise<CredentialOAuth>
+      readonly callback: Promise<Credential.OAuth>
     }
   | {
       readonly mode: "code"
-      readonly callback: (code: string) => Promise<CredentialOAuth>
+      readonly callback: (code: string) => Promise<Credential.OAuth>
     }
 )
 
@@ -31,9 +25,7 @@ export interface IntegrationDomain extends Omit<IntegrationApi, "wellknown"> {
   readonly transform: Transform<IntegrationDraft>
   readonly reload: () => Promise<void>
   readonly connection: {
-    readonly active: (integrationID: string) => Promise<import("@opencode-ai/sdk/v2/types").ConnectionInfo | undefined>
-    readonly resolve: (
-      connection: import("@opencode-ai/sdk/v2/types").ConnectionInfo,
-    ) => Promise<CredentialValue | undefined>
+    readonly active: (integrationID: string) => Promise<Connection.Info | undefined>
+    readonly resolve: (connection: Connection.Info) => Promise<Credential.Value | undefined>
   }
 }

+ 2 - 1
packages/session-ui/src/components/session-diff.ts

@@ -1,6 +1,7 @@
 import { parseDiffFromFile, parsePatchFiles, type FileDiffMetadata } from "@pierre/diffs"
 import { parsePatch } from "diff"
-import type { FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { VcsFileDiff } from "@opencode-ai/sdk/v2"
 
 type LegacyDiff = {
   file: string

+ 2 - 1
packages/session-ui/src/components/session-review.tsx

@@ -15,7 +15,8 @@ import { getDirectory, getFilename } from "@opencode-ai/core/util/path"
 import { checksum } from "@opencode-ai/core/util/encode"
 import { createEffect, createMemo, For, Match, onCleanup, Show, Switch, untrack, type JSX } from "solid-js"
 import { createStore } from "solid-js/store"
-import { type FileContent, type FileDiffInfo, type VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import { type FileContent, type VcsFileDiff } from "@opencode-ai/sdk/v2"
 import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
 import { type SelectedLineRange } from "@pierre/diffs"
 import { Dynamic } from "solid-js/web"

+ 1 - 1
packages/session-ui/src/components/session-turn.tsx

@@ -1,10 +1,10 @@
 import {
   AssistantMessage,
-  type FileDiffInfo,
   Message as MessageType,
   Part as PartType,
   type UserMessage,
 } from "@opencode-ai/sdk/v2/client"
+import type { FileDiffInfo } from "@opencode-ai/client"
 import type { SessionStatus } from "@opencode-ai/sdk/v2"
 import { useData } from "../context"
 import { useFileComponent } from "@opencode-ai/ui/context/file"

+ 2 - 1
packages/session-ui/src/context/data.tsx

@@ -1,4 +1,5 @@
-import type { FileDiffInfo, Message, Part, Provider, Session, SessionStatus } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { Message, Part, Provider, Session, SessionStatus } from "@opencode-ai/sdk/v2"
 import { createSimpleContext } from "@opencode-ai/ui/context"
 import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr"
 

+ 2 - 1
packages/session-ui/src/v2/components/session-review-file-preview-v2.tsx

@@ -6,7 +6,8 @@ import { useFileComponent } from "@opencode-ai/ui/context/file"
 import { useI18n } from "@opencode-ai/ui/context/i18n"
 import { mediaKindFromPath } from "../../pierre/media"
 import { cloneSelectedLineRange, previewSelectedLines } from "../../pierre/selection-bridge"
-import type { FileContent, FileDiffInfo, VcsFileDiff } from "@opencode-ai/sdk/v2"
+import type { FileDiffInfo } from "@opencode-ai/client"
+import type { FileContent, VcsFileDiff } from "@opencode-ai/sdk/v2"
 import { createEffect, createMemo, onCleanup, Show, untrack } from "solid-js"
 import { createStore } from "solid-js/store"
 import { Dynamic } from "solid-js/web"