|
|
@@ -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)
|
|
|
+ })
|
|
|
+ },
|
|
|
+})
|