add opencode import command to restore sessions from JSON exports

This commit is contained in:
Dax Raad
2025-11-05 18:04:31 -05:00
parent e006e3355c
commit 306f45f04a
2 changed files with 53 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
import type { Argv } from "yargs"
import { Session } from "../../session"
import { cmd } from "./cmd"
import { bootstrap } from "../bootstrap"
import { UI } from "../ui"
import { Storage } from "../../storage/storage"
import { Instance } from "../../project/instance"
import { EOL } from "os"
export const ImportCommand = cmd({
command: "import <file>",
describe: "import session data from JSON file",
builder: (yargs: Argv) => {
return yargs.positional("file", {
describe: "path to JSON file to import",
type: "string",
demandOption: true,
})
},
handler: async (args) => {
await bootstrap(process.cwd(), async () => {
const file = Bun.file(args.file as string)
const exists = await file.exists()
if (!exists) {
UI.error(`File not found: ${args.file}`)
process.exit(1)
}
const exportData = (await file.json()) as {
info: Session.Info
messages: Array<{
info: any
parts: any[]
}>
}
await Storage.write(["session", Instance.project.id, exportData.info.id], exportData.info)
for (const msg of exportData.messages) {
await Storage.write(["message", exportData.info.id, msg.info.id], msg.info)
for (const part of msg.parts) {
await Storage.write(["part", msg.info.id, part.id], part)
}
}
process.stdout.write(`Imported session: ${exportData.info.id}`)
process.stdout.write(EOL)
})
},
})