diff --git a/packages/opencode/src/cli/cmd/import.ts b/packages/opencode/src/cli/cmd/import.ts index 2fcf286f46..569aa309a4 100644 --- a/packages/opencode/src/cli/cmd/import.ts +++ b/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(), )