From 0f6393dab12be3762c22fa8ea1e4fa9e5c8971ee Mon Sep 17 00:00:00 2001 From: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Date: Thu, 3 Sep 2026 15:14:40 +0200 Subject: [PATCH] feat(app): add desktop session import (#46416) Co-authored-by: Brendan Allan --- packages/app/src/home/model.ts | 16 +++++++++- packages/app/src/home/projects/controller.tsx | 30 +++++++++++++++++++ packages/app/src/home/projects/region.tsx | 2 ++ packages/app/src/home/projects/view.tsx | 7 +++++ packages/app/src/runtime/i18n/am.ts | 1 + packages/app/src/runtime/i18n/ar.ts | 1 + packages/app/src/runtime/i18n/az.ts | 1 + packages/app/src/runtime/i18n/bg.ts | 1 + packages/app/src/runtime/i18n/bn.ts | 1 + packages/app/src/runtime/i18n/br.ts | 1 + packages/app/src/runtime/i18n/bs.ts | 1 + packages/app/src/runtime/i18n/ca.ts | 1 + packages/app/src/runtime/i18n/cs.ts | 1 + packages/app/src/runtime/i18n/da.ts | 1 + packages/app/src/runtime/i18n/de.ts | 1 + packages/app/src/runtime/i18n/dv.ts | 1 + packages/app/src/runtime/i18n/dz.ts | 1 + packages/app/src/runtime/i18n/el.ts | 1 + packages/app/src/runtime/i18n/en.ts | 1 + packages/app/src/runtime/i18n/es.ts | 1 + packages/app/src/runtime/i18n/et.ts | 1 + packages/app/src/runtime/i18n/fa.ts | 1 + packages/app/src/runtime/i18n/fi.ts | 1 + packages/app/src/runtime/i18n/fo.ts | 1 + packages/app/src/runtime/i18n/fr.ts | 1 + packages/app/src/runtime/i18n/he.ts | 1 + packages/app/src/runtime/i18n/hi.ts | 1 + packages/app/src/runtime/i18n/hr.ts | 1 + packages/app/src/runtime/i18n/hu.ts | 1 + packages/app/src/runtime/i18n/hy.ts | 1 + packages/app/src/runtime/i18n/id.ts | 1 + packages/app/src/runtime/i18n/is.ts | 1 + packages/app/src/runtime/i18n/it.ts | 1 + packages/app/src/runtime/i18n/ja.ts | 1 + packages/app/src/runtime/i18n/ka.ts | 1 + packages/app/src/runtime/i18n/km.ts | 1 + packages/app/src/runtime/i18n/ko.ts | 1 + packages/app/src/runtime/i18n/lo.ts | 1 + packages/app/src/runtime/i18n/lt.ts | 1 + packages/app/src/runtime/i18n/lv.ts | 1 + packages/app/src/runtime/i18n/mk.ts | 1 + packages/app/src/runtime/i18n/mn.ts | 1 + packages/app/src/runtime/i18n/ms.ts | 1 + packages/app/src/runtime/i18n/my.ts | 1 + packages/app/src/runtime/i18n/ne.ts | 1 + packages/app/src/runtime/i18n/nl.ts | 1 + packages/app/src/runtime/i18n/no.ts | 1 + packages/app/src/runtime/i18n/pa.ts | 1 + packages/app/src/runtime/i18n/pl.ts | 1 + packages/app/src/runtime/i18n/ro.ts | 1 + packages/app/src/runtime/i18n/ru.ts | 1 + packages/app/src/runtime/i18n/si.ts | 1 + packages/app/src/runtime/i18n/sk.ts | 1 + packages/app/src/runtime/i18n/sl.ts | 1 + packages/app/src/runtime/i18n/sq.ts | 1 + packages/app/src/runtime/i18n/sr.ts | 1 + packages/app/src/runtime/i18n/sv.ts | 1 + packages/app/src/runtime/i18n/tg.ts | 1 + packages/app/src/runtime/i18n/th.ts | 1 + packages/app/src/runtime/i18n/tk.ts | 1 + packages/app/src/runtime/i18n/tr.ts | 1 + packages/app/src/runtime/i18n/uk.ts | 1 + packages/app/src/runtime/i18n/ur.ts | 1 + packages/app/src/runtime/i18n/uz.ts | 1 + packages/app/src/runtime/i18n/vi.ts | 1 + packages/app/src/runtime/i18n/zh.ts | 1 + packages/app/src/runtime/i18n/zht.ts | 1 + packages/core/src/session/transfer.ts | 5 ++-- packages/core/test/session-create.test.ts | 9 +++++- packages/desktop/src/shared/ipc-rpc/files.ts | 16 +++++----- 70 files changed, 136 insertions(+), 12 deletions(-) diff --git a/packages/app/src/home/model.ts b/packages/app/src/home/model.ts index b9d42704f83..c29dc89a9e8 100644 --- a/packages/app/src/home/model.ts +++ b/packages/app/src/home/model.ts @@ -3,7 +3,8 @@ import { type HomeProjectSelection, useLayout } from "@/shell/state/layout" import { ServerConnection, useServers } from "@/runtime/server/registry" import { useTabs } from "@/shell/tabs/tabs" import { toggleHomeProjectSelection } from "@/shell/layout/helpers" -import { createEffect, createMemo } from "solid-js" +import { createEffect, createMemo, startTransition } from "solid-js" +import type { SessionInfo } from "@opencode-ai/client/promise" export function createHomeController() { const layout = useLayout() @@ -45,6 +46,18 @@ export function createHomeController() { void tabs.newDraft({ server: ServerConnection.key(conn), directory }) } + function openProjectSession(conn: ServerConnection.Any, directory: string, session: SessionInfo) { + const ctx = global.ensureServerCtx(conn) + void ctx.data.session.message.sync(session.id).catch(() => undefined) + void startTransition(() => { + const tab = tabs.addSessionTab({ server: ServerConnection.key(conn), sessionId: session.id }) + tabs.select(tab) + ctx.data.session.remember(session) + ctx.projects.open(directory) + ctx.projects.touch(directory) + }) + } + return { selection: { value: selection, @@ -105,6 +118,7 @@ export function createHomeController() { openProjectNewSession(conn, project.worktree) }, openProjectNewSession, + openProjectSession, }, } } diff --git a/packages/app/src/home/projects/controller.tsx b/packages/app/src/home/projects/controller.tsx index e10002e4537..f3b239d4ffb 100644 --- a/packages/app/src/home/projects/controller.tsx +++ b/packages/app/src/home/projects/controller.tsx @@ -14,6 +14,7 @@ import { Schema } from "effect" import { Persistence } from "@/runtime/persistence/schema" import type { HomeController } from "../model" import { useGlobal } from "@/runtime/server/runtime" +import { SessionTransfer } from "@opencode-ai/schema/session-transfer" export const HomeServersSchema = Schema.Struct({ collapsed: Persistence.record(Persistence.fallback(Schema.Boolean, () => false)), @@ -79,6 +80,35 @@ export function createHomeProjectsController(home: HomeController) { select: home.project.select, add: home.project.add, openNewSession: home.project.openProjectNewSession, + canImportSession: !!platform.openAttachmentPickerDialog, + importSession: (conn: ServerConnection.Any, project: LocalProject) => { + if (!platform.openAttachmentPickerDialog) return + void platform + .openAttachmentPickerDialog( + { + title: language.t("command.session.import"), + accept: ["application/json"], + extensions: ["json"], + }, + async (file) => { + const data = await Schema.decodeUnknownPromise(Schema.fromJsonString(SessionTransfer.Data))( + await file.text(), + ) + const api = home.server.context(conn).sdk.api.session + const imported = await api.import({ + ...Schema.encodeSync(SessionTransfer.Data)(data), + location: { directory: project.worktree }, + } as Parameters[0]) + home.project.openProjectSession(conn, project.worktree, imported) + }, + ) + .catch((cause: unknown) => { + showToast({ + title: language.t("common.requestFailed"), + description: errorMessage(cause, language.t("common.requestFailed")), + }) + }) + }, edit: (conn: ServerConnection.Any, project: LocalProject) => { void import("@/settings/workspaces/project-dialog").then(({ DialogEditProject }) => { void dialog.show(() => ) diff --git a/packages/app/src/home/projects/region.tsx b/packages/app/src/home/projects/region.tsx index 8c969636126..e0c997f18bb 100644 --- a/packages/app/src/home/projects/region.tsx +++ b/packages/app/src/home/projects/region.tsx @@ -37,6 +37,8 @@ export function HomeProjects(props: { onSelectProject={props.projects.project.select} onAddProjects={props.projects.project.add} onOpenProjectNewSession={props.projects.project.openNewSession} + canImportSession={props.projects.project.canImportSession} + onImportSession={props.projects.project.importSession} onEditProject={props.projects.project.edit} onRevealProject={props.projects.project.reveal} onClearNotifications={props.projects.project.clearNotifications} diff --git a/packages/app/src/home/projects/view.tsx b/packages/app/src/home/projects/view.tsx index 85198bfd900..e4bf678325e 100644 --- a/packages/app/src/home/projects/view.tsx +++ b/packages/app/src/home/projects/view.tsx @@ -57,6 +57,8 @@ export type HomeProjectsViewProps = { onSelectProject: (server: ServerConnection.Any, directory: string) => void onAddProjects: (server: ServerConnection.Any, directories: string[]) => void onOpenProjectNewSession: (server: ServerConnection.Any, directory: string) => void + canImportSession: boolean + onImportSession: (server: ServerConnection.Any, project: LocalProject) => void onEditProject: (server: ServerConnection.Any, project: LocalProject) => void onRevealProject: (server: ServerConnection.Any, project: LocalProject) => void onClearNotifications: (server: ServerConnection.Any, project: LocalProject) => void @@ -670,6 +672,11 @@ function HomeProjectRow( props.onOpenProjectNewSession(props.server, props.project.worktree)}> {props.language.t("command.session.new")} + + props.onImportSession(props.server, props.project)}> + {props.language.t("command.session.import")} + + props.onEditProject(props.server, props.project)}> {props.language.t("dialog.project.edit.title")} diff --git a/packages/app/src/runtime/i18n/am.ts b/packages/app/src/runtime/i18n/am.ts index 1cfa7288acb..d1b67eaab41 100644 --- a/packages/app/src/runtime/i18n/am.ts +++ b/packages/app/src/runtime/i18n/am.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "ሳይክል ቋንቋ", "command.language.set": "ቋንቋን ተጠቀም፡ {{language}}", "command.session.new": "አዲስ ክፍለ ጊዜ", + "command.session.import": "ክፍለ ጊዜ ማስመጣት", "command.file.open": "ክፍት ፋይል", "command.tab.close": "ትርፉን ዝጋ", "command.tab.reopenClosed": "የተዘጋውን ትር እንደገና ክፈት", diff --git a/packages/app/src/runtime/i18n/ar.ts b/packages/app/src/runtime/i18n/ar.ts index 0539bac972f..5dc0572a840 100644 --- a/packages/app/src/runtime/i18n/ar.ts +++ b/packages/app/src/runtime/i18n/ar.ts @@ -139,6 +139,7 @@ export const dict = { "command.language.cycle": "تغيير اللغة", "command.language.set": "استخدام اللغة: {{language}}", "command.session.new": "جلسة جديدة", + "command.session.import": "استيراد جلسة", "command.file.open": "فتح ملف", "command.tab.close": "إغلاق علامة التبويب", "command.tab.reopenClosed": "إعادة فتح علامة التبويب المغلقة", diff --git a/packages/app/src/runtime/i18n/az.ts b/packages/app/src/runtime/i18n/az.ts index 413501940d1..79fe09efdd3 100644 --- a/packages/app/src/runtime/i18n/az.ts +++ b/packages/app/src/runtime/i18n/az.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Dili dəyiş", "command.language.set": "Dildən istifadə et: {{language}}", "command.session.new": "Yeni sessiya", + "command.session.import": "Sessiyanı idxal et", "command.file.open": "Faylı aç", "command.tab.close": "Tabı bağla", "command.tab.reopenClosed": "Bağlanmış tabı yenidən aç", diff --git a/packages/app/src/runtime/i18n/bg.ts b/packages/app/src/runtime/i18n/bg.ts index 6903cae0edf..aa4c4c8160a 100644 --- a/packages/app/src/runtime/i18n/bg.ts +++ b/packages/app/src/runtime/i18n/bg.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Цикличен език", "command.language.set": "Използвайте език: {{language}}", "command.session.new": "Нова сесия", + "command.session.import": "Импортиране на сесия", "command.file.open": "Отворете файла", "command.tab.close": "Затваряне на раздела", "command.tab.reopenClosed": "Повторно отваряне на затворен раздел", diff --git a/packages/app/src/runtime/i18n/bn.ts b/packages/app/src/runtime/i18n/bn.ts index b04fdb4171b..17316951ed1 100644 --- a/packages/app/src/runtime/i18n/bn.ts +++ b/packages/app/src/runtime/i18n/bn.ts @@ -134,6 +134,7 @@ export const dict: Record = { "command.language.cycle": "সাইকেল ভাষা", "command.language.set": "ভাষা ব্যবহার করুন: {{language}}", "command.session.new": "নতুন সেশন", + "command.session.import": "সেশন আমদানি করুন", "command.file.open": "ফাইল খুলুন", "command.tab.close": "ট্যাব বন্ধ করুন", "command.tab.reopenClosed": "বন্ধ ট্যাব আবার খুলুন", diff --git a/packages/app/src/runtime/i18n/br.ts b/packages/app/src/runtime/i18n/br.ts index 5c95e3afb84..d25f469a8c6 100644 --- a/packages/app/src/runtime/i18n/br.ts +++ b/packages/app/src/runtime/i18n/br.ts @@ -141,6 +141,7 @@ export const dict = { "command.language.cycle": "Alternar idioma", "command.language.set": "Usar idioma: {{language}}", "command.session.new": "Nova sessão", + "command.session.import": "Importar sessão", "command.file.open": "Abrir arquivo", "command.tab.close": "Fechar aba", "command.tab.reopenClosed": "Reabrir aba fechada", diff --git a/packages/app/src/runtime/i18n/bs.ts b/packages/app/src/runtime/i18n/bs.ts index e75595267d3..dc3ee600a47 100644 --- a/packages/app/src/runtime/i18n/bs.ts +++ b/packages/app/src/runtime/i18n/bs.ts @@ -147,6 +147,7 @@ export const dict = { "command.language.set": "Koristi jezik: {{language}}", "command.session.new": "Nova sesija", + "command.session.import": "Uvezi sesiju", "command.file.open": "Otvori datoteku", "command.tab.close": "Zatvori karticu", "command.tab.reopenClosed": "Ponovo otvori zatvorenu karticu", diff --git a/packages/app/src/runtime/i18n/ca.ts b/packages/app/src/runtime/i18n/ca.ts index 31cd8340159..2a12ca3e945 100644 --- a/packages/app/src/runtime/i18n/ca.ts +++ b/packages/app/src/runtime/i18n/ca.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Llenguatge de cicle", "command.language.set": "Utilitza l'idioma: {{language}}", "command.session.new": "Nova sessió", + "command.session.import": "Importa la sessió", "command.file.open": "Obre el fitxer", "command.tab.close": "Tanca la pestanya", "command.tab.reopenClosed": "Torneu a obrir la pestanya tancada", diff --git a/packages/app/src/runtime/i18n/cs.ts b/packages/app/src/runtime/i18n/cs.ts index 46eed4a2abf..3adc097cbe3 100644 --- a/packages/app/src/runtime/i18n/cs.ts +++ b/packages/app/src/runtime/i18n/cs.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Jazyk cyklu", "command.language.set": "Použít jazyk: {{language}}", "command.session.new": "Nová relace", + "command.session.import": "Importovat relaci", "command.file.open": "Otevřít soubor", "command.tab.close": "Zavřít kartu", "command.tab.reopenClosed": "Znovu otevřete zavřenou kartu", diff --git a/packages/app/src/runtime/i18n/da.ts b/packages/app/src/runtime/i18n/da.ts index 049830b5f02..544144a577d 100644 --- a/packages/app/src/runtime/i18n/da.ts +++ b/packages/app/src/runtime/i18n/da.ts @@ -46,6 +46,7 @@ export const dict = { "command.language.set": "Brug sprog: {{language}}", "command.session.new": "Ny session", + "command.session.import": "Importer session", "command.file.open": "Åbn fil", "command.tab.close": "Luk fane", "command.tab.reopenClosed": "Åbn lukket fane igen", diff --git a/packages/app/src/runtime/i18n/de.ts b/packages/app/src/runtime/i18n/de.ts index b6f547282a4..e93b9e388c4 100644 --- a/packages/app/src/runtime/i18n/de.ts +++ b/packages/app/src/runtime/i18n/de.ts @@ -44,6 +44,7 @@ export const dict = { "command.language.cycle": "Sprache wechseln", "command.language.set": "Sprache verwenden: {{language}}", "command.session.new": "Neue Sitzung", + "command.session.import": "Sitzung importieren", "command.file.open": "Datei öffnen", "command.tab.close": "Tab schließen", "command.tab.reopenClosed": "Geschlossenen Tab wieder öffnen", diff --git a/packages/app/src/runtime/i18n/dv.ts b/packages/app/src/runtime/i18n/dv.ts index 718604f0c66..462f03e174c 100644 --- a/packages/app/src/runtime/i18n/dv.ts +++ b/packages/app/src/runtime/i18n/dv.ts @@ -136,6 +136,7 @@ export const dict = { "command.language.cycle": "ސައިކަލް ބަސް", "command.language.set": "ބަސް ބޭނުންކުރުން: {{language}}", "command.session.new": "އާ ޖަލްސާއެއް", + "command.session.import": "ޖަލްސާ އިމްޕޯޓް ކުރައްވާ", "command.file.open": "ފައިލް ހުޅުވާލާށެވެ", "command.tab.close": "ޓެބް ބަންދުކުރުން", "command.tab.reopenClosed": "ބަންދުކޮށްފައިވާ ޓެބް އަލުން ހުޅުވާލާށެވެ", diff --git a/packages/app/src/runtime/i18n/dz.ts b/packages/app/src/runtime/i18n/dz.ts index 4571e9a910b..1748dfbe8ef 100644 --- a/packages/app/src/runtime/i18n/dz.ts +++ b/packages/app/src/runtime/i18n/dz.ts @@ -136,6 +136,7 @@ export const dict: Record = { "command.language.cycle": "འཁོར་བའི་སྐད་ཡིག།", "command.language.set": "སྐད་ཡིག་ལག་ལེན་འཐབ།: {{language}}", "command.session.new": "ལཱ་ཡུན་གསརཔ།", + "command.session.import": "ལཱ་ཡུན་ནང་འདྲེན།", "command.file.open": "ཡིག་སྣོད་ཁ་ཕྱེ།", "command.tab.close": "མཆོང་ལྡེ་ཁ་བསྡམས།", "command.tab.reopenClosed": "ཁ་བསྡམས་ཡོད་པའི་མཆོང་ལྡེ་ལོག་ཁ་ཕྱེ།", diff --git a/packages/app/src/runtime/i18n/el.ts b/packages/app/src/runtime/i18n/el.ts index 16a01445259..466ac81b941 100644 --- a/packages/app/src/runtime/i18n/el.ts +++ b/packages/app/src/runtime/i18n/el.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Γλώσσα κύκλου", "command.language.set": "Γλώσσα χρήσης: {{language}}", "command.session.new": "Νέα συνεδρία", + "command.session.import": "Εισαγωγή συνεδρίας", "command.file.open": "Άνοιγμα αρχείου", "command.tab.close": "Κλείσιμο καρτέλας", "command.tab.reopenClosed": "Άνοιγμα ξανά κλειστής καρτέλας", diff --git a/packages/app/src/runtime/i18n/en.ts b/packages/app/src/runtime/i18n/en.ts index 40e4f407ff4..c0874d34d48 100644 --- a/packages/app/src/runtime/i18n/en.ts +++ b/packages/app/src/runtime/i18n/en.ts @@ -100,6 +100,7 @@ export const dict = { "command.session.fork.description": "Create a new session from a previous message", "command.session.export": "Export session", "command.session.export.description": "Export the full session transcript as JSON", + "command.session.import": "Import session", "command.session.copyID": "Copy Session ID", "palette.search.placeholder": "Search files, commands, and sessions", diff --git a/packages/app/src/runtime/i18n/es.ts b/packages/app/src/runtime/i18n/es.ts index 92a5227ac65..874788a0828 100644 --- a/packages/app/src/runtime/i18n/es.ts +++ b/packages/app/src/runtime/i18n/es.ts @@ -147,6 +147,7 @@ export const dict = { "command.language.set": "Usar idioma: {{language}}", "command.session.new": "Nueva sesión", + "command.session.import": "Importar sesión", "command.file.open": "Abrir archivo", "command.tab.close": "Cerrar pestaña", "command.tab.reopenClosed": "Reabrir pestaña cerrada", diff --git a/packages/app/src/runtime/i18n/et.ts b/packages/app/src/runtime/i18n/et.ts index 77d0bf54ce6..12512be0cba 100644 --- a/packages/app/src/runtime/i18n/et.ts +++ b/packages/app/src/runtime/i18n/et.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Tsükli keel", "command.language.set": "Kasuta keelt: {{language}}", "command.session.new": "Uus seanss", + "command.session.import": "Impordi seanss", "command.file.open": "Ava fail", "command.tab.close": "Sule vahekaart", "command.tab.reopenClosed": "Ava suletud vaheleht uuesti", diff --git a/packages/app/src/runtime/i18n/fa.ts b/packages/app/src/runtime/i18n/fa.ts index b3c2a4963cc..dfe777f91fb 100644 --- a/packages/app/src/runtime/i18n/fa.ts +++ b/packages/app/src/runtime/i18n/fa.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "زبان چرخه", "command.language.set": "استفاده از زبان: {{language}}", "command.session.new": "جلسه جدید", + "command.session.import": "وارد کردن جلسه", "command.file.open": "باز کردن فایل", "command.tab.close": "بستن برگه", "command.tab.reopenClosed": "برگه بسته را دوباره باز کنید", diff --git a/packages/app/src/runtime/i18n/fi.ts b/packages/app/src/runtime/i18n/fi.ts index 7d7e96e7540..10839166341 100644 --- a/packages/app/src/runtime/i18n/fi.ts +++ b/packages/app/src/runtime/i18n/fi.ts @@ -40,6 +40,7 @@ export const dict = { "command.language.cycle": "Vaihda kieltä", "command.language.set": "Käytä kieltä: {{language}}", "command.session.new": "Uusi istunto", + "command.session.import": "Tuo istunto", "command.file.open": "Avaa tiedosto", "command.tab.close": "Sulje välilehti", "command.tab.reopenClosed": "Avaa suljettu välilehti uudelleen", diff --git a/packages/app/src/runtime/i18n/fo.ts b/packages/app/src/runtime/i18n/fo.ts index e7c917accf6..40a8bfebd10 100644 --- a/packages/app/src/runtime/i18n/fo.ts +++ b/packages/app/src/runtime/i18n/fo.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Súkklumál", "command.language.set": "Brúka mál: {{language}}", "command.session.new": "Nýggj setan", + "command.session.import": "Innflyt setan", "command.file.open": "Opna fíluna", "command.tab.close": "Lat flipan aftur", "command.tab.reopenClosed": "Opna aftur stongdan flipan", diff --git a/packages/app/src/runtime/i18n/fr.ts b/packages/app/src/runtime/i18n/fr.ts index 43412e4509f..3487df519b1 100644 --- a/packages/app/src/runtime/i18n/fr.ts +++ b/packages/app/src/runtime/i18n/fr.ts @@ -141,6 +141,7 @@ export const dict = { "command.language.cycle": "Changer de langue", "command.language.set": "Utiliser la langue : {{language}}", "command.session.new": "Nouvelle session", + "command.session.import": "Importer une session", "command.file.open": "Ouvrir un fichier", "command.tab.close": "Fermer l'onglet", "command.tab.reopenClosed": "Rouvrir l'onglet fermé", diff --git a/packages/app/src/runtime/i18n/he.ts b/packages/app/src/runtime/i18n/he.ts index 7230ace1a97..ef40fdb8b14 100644 --- a/packages/app/src/runtime/i18n/he.ts +++ b/packages/app/src/runtime/i18n/he.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "מעבר לשפה הבאה", "command.language.set": "השתמש בשפה: {{language}}", "command.session.new": "הפעלה חדשה", + "command.session.import": "ייבוא הפעלה", "command.file.open": "פתח את הקובץ", "command.tab.close": "סגור כרטיסייה", "command.tab.reopenClosed": "פתח מחדש את הכרטיסייה הסגורה", diff --git a/packages/app/src/runtime/i18n/hi.ts b/packages/app/src/runtime/i18n/hi.ts index 2a6b243412f..4e9f5e60ae6 100644 --- a/packages/app/src/runtime/i18n/hi.ts +++ b/packages/app/src/runtime/i18n/hi.ts @@ -140,6 +140,7 @@ export const dict = { "command.language.cycle": "भाषा बदलें", "command.language.set": "भाषा का प्रयोग करें: {{language}}", "command.session.new": "नया सेशन", + "command.session.import": "सेशन आयात करें", "command.file.open": "फ़ाइल खोलें", "command.tab.close": "टैब बंद करें", "command.tab.reopenClosed": "बंद टैब पुनः खोलें", diff --git a/packages/app/src/runtime/i18n/hr.ts b/packages/app/src/runtime/i18n/hr.ts index 4974bd040a6..8ffb9712d52 100644 --- a/packages/app/src/runtime/i18n/hr.ts +++ b/packages/app/src/runtime/i18n/hr.ts @@ -137,6 +137,7 @@ export const dict = { "command.language.cycle": "Promijeni jezik", "command.language.set": "Koristite jezik: {{language}}", "command.session.new": "Nova sesija", + "command.session.import": "Uvezi sesiju", "command.file.open": "Otvori datoteku", "command.tab.close": "Zatvori karticu", "command.tab.reopenClosed": "Ponovno otvori zatvorenu karticu", diff --git a/packages/app/src/runtime/i18n/hu.ts b/packages/app/src/runtime/i18n/hu.ts index 4b8d03f08b5..b641db2e2d3 100644 --- a/packages/app/src/runtime/i18n/hu.ts +++ b/packages/app/src/runtime/i18n/hu.ts @@ -137,6 +137,7 @@ export const dict = { "command.language.cycle": "Nyelv váltása", "command.language.set": "Nyelv használata: {{language}}", "command.session.new": "Új munkamenet", + "command.session.import": "Munkamenet importálása", "command.file.open": "Nyissa meg a fájlt", "command.tab.close": "Lap bezárása", "command.tab.reopenClosed": "Nyissa meg újra a bezárt lapot", diff --git a/packages/app/src/runtime/i18n/hy.ts b/packages/app/src/runtime/i18n/hy.ts index 5ba72a61446..ef06d344b1b 100644 --- a/packages/app/src/runtime/i18n/hy.ts +++ b/packages/app/src/runtime/i18n/hy.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Ցիկլի լեզու", "command.language.set": "Օգտագործել լեզուն՝ {{language}}", "command.session.new": "Նոր նիստ", + "command.session.import": "Ներմուծել նիստը", "command.file.open": "Բացել ֆայլ", "command.tab.close": "Փակել ներդիրը", "command.tab.reopenClosed": "Վերաբացել փակ ներդիրը", diff --git a/packages/app/src/runtime/i18n/id.ts b/packages/app/src/runtime/i18n/id.ts index 29cc83f9085..3bc7936a64b 100644 --- a/packages/app/src/runtime/i18n/id.ts +++ b/packages/app/src/runtime/i18n/id.ts @@ -147,6 +147,7 @@ export const dict = { "command.language.set": "Gunakan bahasa: {{language}}", "command.session.new": "Sesi baru", + "command.session.import": "Impor sesi", "command.file.open": "Buka berkas", "command.tab.close": "Tutup tab", "command.tab.reopenClosed": "Buka kembali tab yang ditutup", diff --git a/packages/app/src/runtime/i18n/is.ts b/packages/app/src/runtime/i18n/is.ts index b980cb9c7b9..5e6d5feaf50 100644 --- a/packages/app/src/runtime/i18n/is.ts +++ b/packages/app/src/runtime/i18n/is.ts @@ -137,6 +137,7 @@ export const dict = { "command.language.cycle": "Skipta um tungumál", "command.language.set": "Notaðu tungumál: {{language}}", "command.session.new": "Ný seta", + "command.session.import": "Flytja inn setu", "command.file.open": "Opna skrá", "command.tab.close": "Loka flipa", "command.tab.reopenClosed": "Opnaðu aftur lokaðan flipa", diff --git a/packages/app/src/runtime/i18n/it.ts b/packages/app/src/runtime/i18n/it.ts index 0fb7fbe03b6..30ccf5f35a1 100644 --- a/packages/app/src/runtime/i18n/it.ts +++ b/packages/app/src/runtime/i18n/it.ts @@ -41,6 +41,7 @@ export const dict = { "command.language.cycle": "Cambia lingua", "command.language.set": "Usa la lingua: {{language}}", "command.session.new": "Nuova sessione", + "command.session.import": "Importa sessione", "command.file.open": "Apri file", "command.tab.close": "Chiudi scheda", "command.tab.reopenClosed": "Riapri la scheda chiusa", diff --git a/packages/app/src/runtime/i18n/ja.ts b/packages/app/src/runtime/i18n/ja.ts index c1e6eea54e0..1e8b1c2767c 100644 --- a/packages/app/src/runtime/i18n/ja.ts +++ b/packages/app/src/runtime/i18n/ja.ts @@ -139,6 +139,7 @@ export const dict = { "command.language.cycle": "言語の切り替え", "command.language.set": "言語を使用: {{language}}", "command.session.new": "新しいセッション", + "command.session.import": "セッションをインポート", "command.file.open": "ファイルを開く", "command.tab.close": "タブを閉じる", "command.tab.reopenClosed": "閉じたタブを再度開く", diff --git a/packages/app/src/runtime/i18n/ka.ts b/packages/app/src/runtime/i18n/ka.ts index de351cc921a..ce9de389f4c 100644 --- a/packages/app/src/runtime/i18n/ka.ts +++ b/packages/app/src/runtime/i18n/ka.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "ციკლის ენა", "command.language.set": "გამოიყენე ენა: {{language}}", "command.session.new": "ახალი სესია", + "command.session.import": "სესიის იმპორტი", "command.file.open": "გახსენით ფაილი", "command.tab.close": "ჩანართის დახურვა", "command.tab.reopenClosed": "დახურული ჩანართის ხელახლა გახსნა", diff --git a/packages/app/src/runtime/i18n/km.ts b/packages/app/src/runtime/i18n/km.ts index 6ef0c52cf7f..408069c04d3 100644 --- a/packages/app/src/runtime/i18n/km.ts +++ b/packages/app/src/runtime/i18n/km.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "ភាសាវដ្ត", "command.language.set": "ប្រើភាសា៖ {{language}}", "command.session.new": "សម័យថ្មី។", + "command.session.import": "នាំចូលសម័យ", "command.file.open": "បើកឯកសារ", "command.tab.close": "បិទផ្ទាំង", "command.tab.reopenClosed": "បើកផ្ទាំងបិទឡើងវិញ", diff --git a/packages/app/src/runtime/i18n/ko.ts b/packages/app/src/runtime/i18n/ko.ts index 27ec65c0438..3cafc4bc5b3 100644 --- a/packages/app/src/runtime/i18n/ko.ts +++ b/packages/app/src/runtime/i18n/ko.ts @@ -37,6 +37,7 @@ export const dict = { "command.language.cycle": "언어 순환", "command.language.set": "언어 사용: {{language}}", "command.session.new": "새 세션", + "command.session.import": "세션 가져오기", "command.file.open": "파일 열기", "command.tab.close": "탭 닫기", "command.context.addSelection": "선택 영역을 컨텍스트에 추가", diff --git a/packages/app/src/runtime/i18n/lo.ts b/packages/app/src/runtime/i18n/lo.ts index df6dbe152f6..0144da1e1b9 100644 --- a/packages/app/src/runtime/i18n/lo.ts +++ b/packages/app/src/runtime/i18n/lo.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "ພາສາຮອບວຽນ", "command.language.set": "ໃຊ້ພາສາ: {{language}}", "command.session.new": "ເຊດຊັນໃໝ່", + "command.session.import": "ນຳເຂົ້າເຊດຊັນ", "command.file.open": "ເປີດໄຟລ໌", "command.tab.close": "ປິດແຖບ", "command.tab.reopenClosed": "ເປີດແຖບປິດຄືນໃໝ່", diff --git a/packages/app/src/runtime/i18n/lt.ts b/packages/app/src/runtime/i18n/lt.ts index 58ecf228a20..a9741a2668e 100644 --- a/packages/app/src/runtime/i18n/lt.ts +++ b/packages/app/src/runtime/i18n/lt.ts @@ -137,6 +137,7 @@ export const dict = { "command.language.cycle": "Perjungti kalbą", "command.language.set": "Naudokite kalbą: {{language}}", "command.session.new": "Naujas seansas", + "command.session.import": "Importuoti seansą", "command.file.open": "Atidaryti failą", "command.tab.close": "Uždaryti skirtuką", "command.tab.reopenClosed": "Iš naujo atidaryti uždarytą skirtuką", diff --git a/packages/app/src/runtime/i18n/lv.ts b/packages/app/src/runtime/i18n/lv.ts index e98826fe13e..588a7249ccd 100644 --- a/packages/app/src/runtime/i18n/lv.ts +++ b/packages/app/src/runtime/i18n/lv.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Mainīt valodu", "command.language.set": "Izmantot valodu: {{language}}", "command.session.new": "Jauna sesija", + "command.session.import": "Importēt sesiju", "command.file.open": "Atvērt failu", "command.tab.close": "Aizvērt cilni", "command.tab.reopenClosed": "Atvērt aizvērtu cilni", diff --git a/packages/app/src/runtime/i18n/mk.ts b/packages/app/src/runtime/i18n/mk.ts index 46322253905..8e4a484cbad 100644 --- a/packages/app/src/runtime/i18n/mk.ts +++ b/packages/app/src/runtime/i18n/mk.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Јазик на циклус", "command.language.set": "Користете јазик: {{language}}", "command.session.new": "Нова сесија", + "command.session.import": "Увези сесија", "command.file.open": "Отворете ја датотеката", "command.tab.close": "Затвори ја картичката", "command.tab.reopenClosed": "Повторно отворете го затворениот таб", diff --git a/packages/app/src/runtime/i18n/mn.ts b/packages/app/src/runtime/i18n/mn.ts index 8563df4e3de..eaf64a41007 100644 --- a/packages/app/src/runtime/i18n/mn.ts +++ b/packages/app/src/runtime/i18n/mn.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Циклийн хэл", "command.language.set": "Хэл ашиглах: {{language}}", "command.session.new": "Шинэ сесс", + "command.session.import": "Сесс импортлох", "command.file.open": "Файлыг нээх", "command.tab.close": "Табыг хаах", "command.tab.reopenClosed": "Хаагдсан табыг дахин нээнэ үү", diff --git a/packages/app/src/runtime/i18n/ms.ts b/packages/app/src/runtime/i18n/ms.ts index 0e002391433..024819a4150 100644 --- a/packages/app/src/runtime/i18n/ms.ts +++ b/packages/app/src/runtime/i18n/ms.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Tukar bahasa", "command.language.set": "Guna bahasa: {{language}}", "command.session.new": "Sesi baharu", + "command.session.import": "Import sesi", "command.file.open": "Buka fail", "command.tab.close": "Tutup tab", "command.tab.reopenClosed": "Buka semula tab tertutup", diff --git a/packages/app/src/runtime/i18n/my.ts b/packages/app/src/runtime/i18n/my.ts index 044a0b36d16..7ea2d45aa7a 100644 --- a/packages/app/src/runtime/i18n/my.ts +++ b/packages/app/src/runtime/i18n/my.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "စက်ဝိုင်းဘာသာစကား", "command.language.set": "ဘာသာစကားကို အသုံးပြုပါ- {{language}}", "command.session.new": "စက်ရှင်အသစ်", + "command.session.import": "စက်ရှင် တင်သွင်းရန်", "command.file.open": "ဖိုင်ကိုဖွင့်ပါ။", "command.tab.close": "တဘ်ကို ပိတ်ပါ။", "command.tab.reopenClosed": "ပိတ်ထားသော တက်ဘ်ကို ပြန်ဖွင့်ပါ။", diff --git a/packages/app/src/runtime/i18n/ne.ts b/packages/app/src/runtime/i18n/ne.ts index 1b2948e9f22..122c015f23f 100644 --- a/packages/app/src/runtime/i18n/ne.ts +++ b/packages/app/src/runtime/i18n/ne.ts @@ -134,6 +134,7 @@ export const dict: Record = { "command.language.cycle": "साइकल भाषा", "command.language.set": "भाषा प्रयोग गर्नुहोस्: {{language}}", "command.session.new": "नयाँ सत्र", + "command.session.import": "सत्र आयात गर्नुहोस्", "command.file.open": "फाइल खोल्नुहोस्", "command.tab.close": "ट्याब बन्द गर्नुहोस्", "command.tab.reopenClosed": "बन्द ट्याब पुन: खोल्नुहोस्", diff --git a/packages/app/src/runtime/i18n/nl.ts b/packages/app/src/runtime/i18n/nl.ts index c439c346814..16a243c5653 100644 --- a/packages/app/src/runtime/i18n/nl.ts +++ b/packages/app/src/runtime/i18n/nl.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Volgende taal", "command.language.set": "Gebruik taal: {{language}}", "command.session.new": "Nieuwe sessie", + "command.session.import": "Sessie importeren", "command.file.open": "Bestand openen", "command.tab.close": "Tabblad sluiten", "command.tab.reopenClosed": "Gesloten tabblad opnieuw openen", diff --git a/packages/app/src/runtime/i18n/no.ts b/packages/app/src/runtime/i18n/no.ts index 3039b92db34..83776c638fc 100644 --- a/packages/app/src/runtime/i18n/no.ts +++ b/packages/app/src/runtime/i18n/no.ts @@ -146,6 +146,7 @@ export const dict = { "command.language.set": "Bruk språk: {{language}}", "command.session.new": "Ny sesjon", + "command.session.import": "Importer sesjon", "command.file.open": "Åpne fil", "command.tab.close": "Lukk fane", "command.context.addSelection": "Legg til markering i kontekst", diff --git a/packages/app/src/runtime/i18n/pa.ts b/packages/app/src/runtime/i18n/pa.ts index 18dc3614982..8e1e9eddfbd 100644 --- a/packages/app/src/runtime/i18n/pa.ts +++ b/packages/app/src/runtime/i18n/pa.ts @@ -139,6 +139,7 @@ export const dict = { "command.language.cycle": "اگلی بولی ورتو", "command.language.set": "بولی ورتو: {{language}}", "command.session.new": "نواں سیشن", + "command.session.import": "سیشن درآمد کرو", "command.file.open": "فائل کھولو", "command.tab.close": "ٹیب بند کرو", "command.tab.reopenClosed": "بند ٹیب دوبارہ کھولو", diff --git a/packages/app/src/runtime/i18n/pl.ts b/packages/app/src/runtime/i18n/pl.ts index c7d42090f80..62e6ae61947 100644 --- a/packages/app/src/runtime/i18n/pl.ts +++ b/packages/app/src/runtime/i18n/pl.ts @@ -140,6 +140,7 @@ export const dict = { "command.language.cycle": "Przełącz język", "command.language.set": "Użyj języka: {{language}}", "command.session.new": "Nowa sesja", + "command.session.import": "Importuj sesję", "command.file.open": "Otwórz plik", "command.tab.close": "Zamknij kartę", "command.tab.reopenClosed": "Otwórz ponownie zamkniętą kartę", diff --git a/packages/app/src/runtime/i18n/ro.ts b/packages/app/src/runtime/i18n/ro.ts index 9393b34a29b..64b21287d87 100644 --- a/packages/app/src/runtime/i18n/ro.ts +++ b/packages/app/src/runtime/i18n/ro.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Schimbă limba", "command.language.set": "Folosește limba: {{language}}", "command.session.new": "Sesiune nouă", + "command.session.import": "Importă sesiunea", "command.file.open": "Deschide fișier", "command.tab.close": "Închide fila", "command.tab.reopenClosed": "Redeschide fila închisă", diff --git a/packages/app/src/runtime/i18n/ru.ts b/packages/app/src/runtime/i18n/ru.ts index 3d17aac8beb..a667bc126cd 100644 --- a/packages/app/src/runtime/i18n/ru.ts +++ b/packages/app/src/runtime/i18n/ru.ts @@ -146,6 +146,7 @@ export const dict = { "command.language.set": "Использовать язык: {{language}}", "command.session.new": "Новая сессия", + "command.session.import": "Импортировать сессию", "command.file.open": "Открыть файл", "command.tab.close": "Закрыть вкладку", "command.tab.reopenClosed": "Повторно открыть закрытую вкладку", diff --git a/packages/app/src/runtime/i18n/si.ts b/packages/app/src/runtime/i18n/si.ts index cae54f83460..aba8428b4d4 100644 --- a/packages/app/src/runtime/i18n/si.ts +++ b/packages/app/src/runtime/i18n/si.ts @@ -133,6 +133,7 @@ export const dict: Record = { "command.language.cycle": "චක්‍ර භාෂාව", "command.language.set": "භාෂාව භාවිතා කරන්න: {{language}}", "command.session.new": "නව සැසිය", + "command.session.import": "සැසිය ආනයනය කරන්න", "command.file.open": "ගොනුව විවෘත කරන්න", "command.tab.close": "ටැබ් එක වසන්න", "command.tab.reopenClosed": "වසා දැමූ ටැබය නැවත විවෘත කරන්න", diff --git a/packages/app/src/runtime/i18n/sk.ts b/packages/app/src/runtime/i18n/sk.ts index ec823428333..601e47e2911 100644 --- a/packages/app/src/runtime/i18n/sk.ts +++ b/packages/app/src/runtime/i18n/sk.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Prepnúť jazyk", "command.language.set": "Použiť jazyk: {{language}}", "command.session.new": "Nová relácia", + "command.session.import": "Importovať reláciu", "command.file.open": "Otvoriť súbor", "command.tab.close": "Zavrieť kartu", "command.tab.reopenClosed": "Obnoviť zatvorenú kartu", diff --git a/packages/app/src/runtime/i18n/sl.ts b/packages/app/src/runtime/i18n/sl.ts index 1aae5047167..1977f19ba74 100644 --- a/packages/app/src/runtime/i18n/sl.ts +++ b/packages/app/src/runtime/i18n/sl.ts @@ -133,6 +133,7 @@ export const dict = { "command.language.cycle": "Jezik cikla", "command.language.set": "Uporabi jezik: {{language}}", "command.session.new": "Nova seja", + "command.session.import": "Uvozi sejo", "command.file.open": "Odpri datoteko", "command.tab.close": "Zapri zavihek", "command.tab.reopenClosed": "Ponovno odpri zaprt zavihek", diff --git a/packages/app/src/runtime/i18n/sq.ts b/packages/app/src/runtime/i18n/sq.ts index 40ea10035f3..7ffa5871dd7 100644 --- a/packages/app/src/runtime/i18n/sq.ts +++ b/packages/app/src/runtime/i18n/sq.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Gjuha e ciklit", "command.language.set": "Përdorni gjuhën: {{language}}", "command.session.new": "Sesion i ri", + "command.session.import": "Importo sesionin", "command.file.open": "Hap skedarin", "command.tab.close": "Mbyll skedën", "command.tab.reopenClosed": "Rihap skedën e mbyllur", diff --git a/packages/app/src/runtime/i18n/sr.ts b/packages/app/src/runtime/i18n/sr.ts index 7c242e0e26f..89ad4bc48b9 100644 --- a/packages/app/src/runtime/i18n/sr.ts +++ b/packages/app/src/runtime/i18n/sr.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "језик циклуса", "command.language.set": "Користи језик: {{language}}", "command.session.new": "Нова сесија", + "command.session.import": "Увези сесију", "command.file.open": "Отворите датотеку", "command.tab.close": "Затвори картицу", "command.tab.reopenClosed": "Поново отворите затворену картицу", diff --git a/packages/app/src/runtime/i18n/sv.ts b/packages/app/src/runtime/i18n/sv.ts index 811ed56f949..b2ad5bafda8 100644 --- a/packages/app/src/runtime/i18n/sv.ts +++ b/packages/app/src/runtime/i18n/sv.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Växla språk", "command.language.set": "Använd språk: {{language}}", "command.session.new": "Ny session", + "command.session.import": "Importera session", "command.file.open": "Öppna filen", "command.tab.close": "Stäng fliken", "command.tab.reopenClosed": "Öppna stängd flik igen", diff --git a/packages/app/src/runtime/i18n/tg.ts b/packages/app/src/runtime/i18n/tg.ts index 73d7fb970cf..679d56aecd0 100644 --- a/packages/app/src/runtime/i18n/tg.ts +++ b/packages/app/src/runtime/i18n/tg.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Забони даврӣ", "command.language.set": "Истифодаи забон: {{language}}", "command.session.new": "Сеанси нав", + "command.session.import": "Воридоти сеанс", "command.file.open": "Файлро кушоед", "command.tab.close": "Варақаро пӯшед", "command.tab.reopenClosed": "Варақаи пӯшидаро аз нав кушоед", diff --git a/packages/app/src/runtime/i18n/th.ts b/packages/app/src/runtime/i18n/th.ts index 6ea791e14c4..c585c50027e 100644 --- a/packages/app/src/runtime/i18n/th.ts +++ b/packages/app/src/runtime/i18n/th.ts @@ -145,6 +145,7 @@ export const dict = { "command.language.set": "ใช้ภาษา: {{language}}", "command.session.new": "เซสชันใหม่", + "command.session.import": "นำเข้าเซสชัน", "command.file.open": "เปิดไฟล์", "command.tab.close": "ปิดแท็บ", "command.tab.reopenClosed": "เปิดแท็บที่ปิดไปอีกครั้ง", diff --git a/packages/app/src/runtime/i18n/tk.ts b/packages/app/src/runtime/i18n/tk.ts index 64b59ce3704..0a24412b852 100644 --- a/packages/app/src/runtime/i18n/tk.ts +++ b/packages/app/src/runtime/i18n/tk.ts @@ -134,6 +134,7 @@ export const dict = { "command.language.cycle": "Sikl dili", "command.language.set": "Dil ulanyň: {{language}}", "command.session.new": "Täze sessiýa", + "command.session.import": "Sessiýany import et", "command.file.open": "Faýl açyň", "command.tab.close": "Salgy ýapyň", "command.tab.reopenClosed": "Closedapyk goýmany açyň", diff --git a/packages/app/src/runtime/i18n/tr.ts b/packages/app/src/runtime/i18n/tr.ts index effb7c05f8a..64266970a1d 100644 --- a/packages/app/src/runtime/i18n/tr.ts +++ b/packages/app/src/runtime/i18n/tr.ts @@ -151,6 +151,7 @@ export const dict = { "command.language.set": "Dil kullan: {{language}}", "command.session.new": "Yeni oturum", + "command.session.import": "Oturumu içe aktar", "command.file.open": "Dosya aç", "command.tab.close": "Sekmeyi kapat", "command.tab.reopenClosed": "Kapatılan sekmeyi yeniden aç", diff --git a/packages/app/src/runtime/i18n/uk.ts b/packages/app/src/runtime/i18n/uk.ts index d38fba1021b..99ba7a64e5b 100644 --- a/packages/app/src/runtime/i18n/uk.ts +++ b/packages/app/src/runtime/i18n/uk.ts @@ -147,6 +147,7 @@ export const dict = { "command.language.set": "Використати мову: {{language}}", "command.session.new": "Нова сесія", + "command.session.import": "Імпортувати сесію", "command.file.open": "Відкрити файл", "command.tab.close": "Закрити вкладку", "command.tab.reopenClosed": "Повторно відкрити закриту вкладку", diff --git a/packages/app/src/runtime/i18n/ur.ts b/packages/app/src/runtime/i18n/ur.ts index bd3287f73bc..3cdf0c942b4 100644 --- a/packages/app/src/runtime/i18n/ur.ts +++ b/packages/app/src/runtime/i18n/ur.ts @@ -141,6 +141,7 @@ export const dict = { "command.language.cycle": "اگلی زبان منتخب کریں", "command.language.set": "زبان استعمال کریں: {{language}}", "command.session.new": "نیا سیشن", + "command.session.import": "سیشن درآمد کریں", "command.file.open": "فائل کھولیں۔", "command.tab.close": "ٹیب بند کریں۔", "command.tab.reopenClosed": "بند ٹیب کو دوبارہ کھولیں۔", diff --git a/packages/app/src/runtime/i18n/uz.ts b/packages/app/src/runtime/i18n/uz.ts index cff21c42773..ad101eac4a8 100644 --- a/packages/app/src/runtime/i18n/uz.ts +++ b/packages/app/src/runtime/i18n/uz.ts @@ -135,6 +135,7 @@ export const dict = { "command.language.cycle": "Keyingi til", "command.language.set": "Tildan foydalaning: {{language}}", "command.session.new": "Yangi sessiya", + "command.session.import": "Sessiyani import qilish", "command.file.open": "Faylni ochish", "command.tab.close": "Tabni yoping", "command.tab.reopenClosed": "Yopiq tabni qayta oching", diff --git a/packages/app/src/runtime/i18n/vi.ts b/packages/app/src/runtime/i18n/vi.ts index c99eb965102..221843e1e29 100644 --- a/packages/app/src/runtime/i18n/vi.ts +++ b/packages/app/src/runtime/i18n/vi.ts @@ -140,6 +140,7 @@ export const dict = { "command.language.cycle": "Chuyển ngôn ngữ", "command.language.set": "Sử dụng ngôn ngữ: {{language}}", "command.session.new": "Phiên mới", + "command.session.import": "Nhập phiên", "command.file.open": "Mở tệp", "command.tab.close": "Đóng tab", "command.tab.reopenClosed": "Mở lại tab đã đóng", diff --git a/packages/app/src/runtime/i18n/zh.ts b/packages/app/src/runtime/i18n/zh.ts index 4b2d68c34cd..e646d0e2a22 100644 --- a/packages/app/src/runtime/i18n/zh.ts +++ b/packages/app/src/runtime/i18n/zh.ts @@ -154,6 +154,7 @@ export const dict = { "command.language.set": "使用语言:{{language}}", "command.session.new": "新建会话", + "command.session.import": "导入会话", "command.file.open": "打开文件", diff --git a/packages/app/src/runtime/i18n/zht.ts b/packages/app/src/runtime/i18n/zht.ts index 53571b5ea3e..40cb629670b 100644 --- a/packages/app/src/runtime/i18n/zht.ts +++ b/packages/app/src/runtime/i18n/zht.ts @@ -149,6 +149,7 @@ export const dict = { "command.language.set": "使用語言: {{language}}", "command.session.new": "新增工作階段", + "command.session.import": "匯入工作階段", "command.file.open": "開啟檔案", "command.tab.close": "關閉分頁", "command.tab.reopenClosed": "重新開啟已關閉的分頁", diff --git a/packages/core/src/session/transfer.ts b/packages/core/src/session/transfer.ts index 1cfcb7ef72a..83816ba5121 100644 --- a/packages/core/src/session/transfer.ts +++ b/packages/core/src/session/transfer.ts @@ -4,7 +4,7 @@ import { SessionTransfer } from "@opencode-ai/schema/session-transfer" import { Tool } from "@opencode-ai/schema/tool" import { Skill } from "@opencode-ai/schema/skill" import { eq } from "drizzle-orm" -import { Context, DateTime, Effect, Layer, Schema } from "effect" +import { Clock, Context, DateTime, Effect, Layer, Schema } from "effect" import { map } from "effect/Array" import path from "path" import { makeGlobalNode } from "@opencode-ai/util/effect/app-node" @@ -73,6 +73,7 @@ const layer = Layer.effect( if (input.data.info.parentID) yield* sessions.get(input.data.info.parentID) const project = yield* projects.resolve(input.location.directory) yield* upsertProject(db, project).pipe(Effect.orDie) + const importedAt = yield* Clock.currentTimeMillis const messages = input.data.messages.filter(isSettled).map((message, index) => { const encoded = encodeMessage(message) const { id: _, type, ...data } = encoded @@ -121,7 +122,7 @@ const layer = Layer.effect( tokens_cache_read: input.data.info.tokens.cache.read, tokens_cache_write: input.data.info.tokens.cache.write, time_created: DateTime.toEpochMillis(input.data.info.time.created), - time_updated: DateTime.toEpochMillis(input.data.info.time.updated), + time_updated: importedAt, time_idle: input.data.info.time.idle ? DateTime.toEpochMillis(input.data.info.time.idle) : null, time_viewed: input.data.info.time.idle && input.data.info.time.viewed diff --git a/packages/core/test/session-create.test.ts b/packages/core/test/session-create.test.ts index ab49cbfae70..ac2c2ab09b5 100644 --- a/packages/core/test/session-create.test.ts +++ b/packages/core/test/session-create.test.ts @@ -3,6 +3,7 @@ import { $ } from "bun" import fs from "fs/promises" import path from "path" import { DateTime, Effect, Layer, Stream } from "effect" +import { TestClock } from "effect/testing" import { Money } from "@opencode-ai/schema/money" import { Shell } from "@opencode-ai/schema/shell" import { Skill } from "@opencode-ai/schema/skill" @@ -1325,6 +1326,7 @@ describe("SessionTransfer", () => { const sessionID = Session.ID.create() const sourceMessageID = SessionMessage.ID.create() const errorMessageID = SessionMessage.ID.create() + yield* TestClock.setTime(1_000) const imported = yield* transfer.import({ data: { @@ -1333,6 +1335,7 @@ describe("SessionTransfer", () => { id: sessionID, time: { ...template.time, + updated: DateTime.makeUnsafe(100), idle: DateTime.makeUnsafe(200), viewed: DateTime.makeUnsafe(150), }, @@ -1366,7 +1369,11 @@ describe("SessionTransfer", () => { const messages = yield* session.messages({ sessionID, order: "asc" }) expect(imported).toMatchObject({ id: sessionID, title: "Exported", location, metadata: { channel: "C123" } }) - expect(imported.time).toMatchObject({ idle: DateTime.makeUnsafe(200), viewed: DateTime.makeUnsafe(150) }) + expect(imported.time).toMatchObject({ + updated: DateTime.makeUnsafe(1_000), + idle: DateTime.makeUnsafe(200), + viewed: DateTime.makeUnsafe(150), + }) expect(messages).toMatchObject([ { id: sourceMessageID, ...Expected.user("Imported message") }, { id: errorMessageID, type: "compaction", error: { type: "test_error", message: "Original error" } }, diff --git a/packages/desktop/src/shared/ipc-rpc/files.ts b/packages/desktop/src/shared/ipc-rpc/files.ts index b587049236e..5885faf26b1 100644 --- a/packages/desktop/src/shared/ipc-rpc/files.ts +++ b/packages/desktop/src/shared/ipc-rpc/files.ts @@ -1,17 +1,17 @@ import { Schema } from "effect" import { Rpc, RpcGroup } from "effect/unstable/rpc" -const OptionalString = Schema.optionalKey(Schema.String) +const OptionalString = Schema.optional(Schema.String) const PickerOptions = Schema.Struct({ - multiple: Schema.optionalKey(Schema.Boolean), + multiple: Schema.optional(Schema.Boolean), title: OptionalString, defaultPath: OptionalString, }) const FilePickerOptions = Schema.Struct({ - multiple: Schema.optionalKey(Schema.Boolean), + multiple: Schema.optional(Schema.Boolean), title: OptionalString, defaultPath: OptionalString, - extensions: Schema.optionalKey(Schema.Array(Schema.String)), + extensions: Schema.optional(Schema.Array(Schema.String)), }) const SavePickerOptions = Schema.Struct({ title: OptionalString, defaultPath: OptionalString }) const PickedFiles = Schema.Struct({ @@ -21,11 +21,11 @@ const PickedFiles = Schema.Struct({ const ClipboardImage = Schema.Struct({ buffer: Schema.Uint8Array, width: Schema.Number, height: Schema.Number }) export const FilesOpenDirectoryPicker = Rpc.make("FilesOpenDirectoryPicker", { - payload: { options: Schema.optionalKey(PickerOptions) }, + payload: { options: Schema.optional(PickerOptions) }, success: Schema.NullOr(Schema.Union([Schema.String, Schema.Array(Schema.String)])), }) export const FilesOpenFilePicker = Rpc.make("FilesOpenFilePicker", { - payload: { options: Schema.optionalKey(FilePickerOptions) }, + payload: { options: Schema.optional(FilePickerOptions) }, success: Schema.NullOr(PickedFiles), }) export const FilesReadPickedFile = Rpc.make("FilesReadPickedFile", { @@ -36,7 +36,7 @@ export const FilesReleasePickedFiles = Rpc.make("FilesReleasePickedFiles", { payload: { token: Schema.String }, }) export const FilesSaveFilePicker = Rpc.make("FilesSaveFilePicker", { - payload: { options: Schema.optionalKey(SavePickerOptions) }, + payload: { options: Schema.optional(SavePickerOptions) }, success: Schema.NullOr(Schema.String), }) export const FilesOpenExternal = Rpc.make("FilesOpenExternal", { @@ -46,7 +46,7 @@ export const FilesOpenLocalFile = Rpc.make("FilesOpenLocalFile", { payload: { url: Schema.String }, }) export const FilesOpenPath = Rpc.make("FilesOpenPath", { - payload: { path: Schema.String, application: Schema.optionalKey(Schema.String) }, + payload: { path: Schema.String, application: Schema.optional(Schema.String) }, success: Schema.NullOr(Schema.String), }) export const FilesRevealPath = Rpc.make("FilesRevealPath", {