Просмотр исходного кода

fix(opencode): Update directory and path fields of imported session (#27516)

OpeOginni 3 месяцев назад
Родитель
Сommit
66d409d679
1 измененных файлов с 11 добавлено и 4 удалено
  1. 11 4
      packages/opencode/src/cli/cmd/import.ts

+ 11 - 4
packages/opencode/src/cli/cmd/import.ts

@@ -7,8 +7,10 @@ import { SessionTable, MessageTable, PartTable } from "../../session/session.sql
 import { InstanceRef } from "@/effect/instance-ref"
 import { ShareNext } from "@/share/share-next"
 import { EOL } from "os"
+import path from "path"
 import { AppFileSystem } from "@opencode-ai/core/filesystem"
 import { Effect, Schema } from "effect"
+import type { InstanceContext } from "@/project/instance-context"
 
 const decodeMessageInfo = Schema.decodeUnknownSync(MessageV2.Info)
 const decodePart = Schema.decodeUnknownSync(MessageV2.Part)
@@ -89,11 +91,11 @@ export const ImportCommand = effectCmd({
   handler: Effect.fn("Cli.import")(function* (args) {
     const ctx = yield* InstanceRef
     if (!ctx) return yield* Effect.die("InstanceRef not provided")
-    return yield* runImport(args.file, ctx.project.id)
+    return yield* runImport(args.file, ctx)
   }),
 })
 
-const runImport = Effect.fn("Cli.import.body")(function* (file: string, projectID: string) {
+const runImport = Effect.fn("Cli.import.body")(function* (file: string, ctx: InstanceContext) {
   const share = yield* ShareNext.Service
   const fs = yield* AppFileSystem.Service
 
@@ -168,14 +170,19 @@ const runImport = Effect.fn("Cli.import.body")(function* (file: string, projectI
 
   const info = Schema.decodeUnknownSync(Session.Info)({
     ...exportData.info,
-    projectID,
+    projectID: ctx.project.id,
+    directory: ctx.directory,
+    path: path.relative(path.resolve(ctx.worktree), ctx.directory).replaceAll("\\", "/"),
   }) as Session.Info
   const row = Session.toRow(info)
   Database.use((db) =>
     db
       .insert(SessionTable)
       .values(row)
-      .onConflictDoUpdate({ target: SessionTable.id, set: { project_id: row.project_id } })
+      .onConflictDoUpdate({
+        target: SessionTable.id,
+        set: { project_id: row.project_id, directory: row.directory, path: row.path },
+      })
       .run(),
   )