mirror of
https://github.com/anomalyco/opencode.git
synced 2026-08-09 22:23:20 +00:00
fix(app): resolve parity plurals, stream lifecycle, and menu state bugs
This commit is contained in:
parent
b6b6f87969
commit
627e640c69
35 changed files with 837 additions and 112 deletions
|
|
@ -170,6 +170,7 @@ beforeAll(async () => {
|
|||
|
||||
mock.module("@opencode-ai/ui/toast", () => ({
|
||||
Toast: { Region: () => null },
|
||||
toaster: { create: () => undefined, show: () => undefined, dismiss: () => undefined },
|
||||
showToast: () => 0,
|
||||
}))
|
||||
|
||||
|
|
@ -794,6 +795,7 @@ describe("prompt submit worktree selection", () => {
|
|||
})
|
||||
|
||||
await submit.handleSubmit({ preventDefault: () => undefined } as unknown as Event)
|
||||
await settle()
|
||||
|
||||
expect(sentCommands).toEqual([
|
||||
{
|
||||
|
|
|
|||
|
|
@ -61,53 +61,57 @@ export function SessionWorkspaceMenu(props: {
|
|||
const source = props.directory
|
||||
setStore("selected", selection)
|
||||
|
||||
const destination =
|
||||
selection === "create"
|
||||
? await createWorkspace(root, sessionID, messageID, sdk, (message) => fail(scope, sessionID, message), {
|
||||
createFailed: language.t("prompt.toast.worktreeCreateFailed.title"),
|
||||
stillPreparing: language.t("workspace.error.stillPreparing"),
|
||||
})
|
||||
: selection
|
||||
if (!destination) return
|
||||
try {
|
||||
const destination =
|
||||
selection === "create"
|
||||
? await createWorkspace(root, sessionID, messageID, sdk, (message) => fail(scope, sessionID, message), {
|
||||
createFailed: language.t("prompt.toast.worktreeCreateFailed.title"),
|
||||
stillPreparing: language.t("workspace.error.stillPreparing"),
|
||||
})
|
||||
: selection
|
||||
if (!destination) return
|
||||
|
||||
WorkspaceOperation.start(scope, sessionID, selection === "create" ? "create" : "move", destination, messageID)
|
||||
if (sync.session.data.session_working(sessionID)) {
|
||||
fail(scope, sessionID, language.t("workspace.move.failed"))
|
||||
return
|
||||
}
|
||||
await workspaceRequestWithTimeout(
|
||||
(signal) =>
|
||||
sdk.client.experimental.controlPlane.moveSession(
|
||||
{
|
||||
sessionID,
|
||||
destination: { directory: destination },
|
||||
moveChanges: true,
|
||||
},
|
||||
{ signal },
|
||||
),
|
||||
language.t("workspace.move.failed"),
|
||||
WORKSPACE_PREPARATION_TIMEOUT_MS,
|
||||
)
|
||||
.then(async () => {
|
||||
for (const attempt of Array.from({ length: 20 }, (_, index) => index)) {
|
||||
const session = await workspaceRequestWithTimeout(
|
||||
(signal) => sync.session.resolve(sessionID, { force: true, signal }),
|
||||
language.t("workspace.move.failed"),
|
||||
WORKSPACE_PLACEMENT_REFRESH_TIMEOUT_MS,
|
||||
).catch(() => undefined)
|
||||
if (session && pathKey(session.directory) === pathKey(destination)) {
|
||||
WorkspaceOperation.complete(scope, sessionID, destination)
|
||||
sync.reindexSession(sessionID, source)
|
||||
return
|
||||
}
|
||||
if (WorkspaceOperation.get(scope, sessionID)?.status === "complete") return
|
||||
await new Promise((resolve) => setTimeout(resolve, Math.min(250 + attempt * 50, 1_000)))
|
||||
}
|
||||
WorkspaceOperation.start(scope, sessionID, selection === "create" ? "create" : "move", destination, messageID)
|
||||
if (sync.session.data.session_working(sessionID)) {
|
||||
fail(scope, sessionID, language.t("workspace.move.failed"))
|
||||
})
|
||||
.catch((error) =>
|
||||
fail(scope, sessionID, error instanceof Error ? error.message : language.t("common.requestFailed")),
|
||||
return
|
||||
}
|
||||
await workspaceRequestWithTimeout(
|
||||
(signal) =>
|
||||
sdk.client.experimental.controlPlane.moveSession(
|
||||
{
|
||||
sessionID,
|
||||
destination: { directory: destination },
|
||||
moveChanges: true,
|
||||
},
|
||||
{ signal },
|
||||
),
|
||||
language.t("workspace.move.failed"),
|
||||
WORKSPACE_PREPARATION_TIMEOUT_MS,
|
||||
)
|
||||
.then(async () => {
|
||||
for (const attempt of Array.from({ length: 20 }, (_, index) => index)) {
|
||||
const session = await workspaceRequestWithTimeout(
|
||||
(signal) => sync.session.resolve(sessionID, { force: true, signal }),
|
||||
language.t("workspace.move.failed"),
|
||||
WORKSPACE_PLACEMENT_REFRESH_TIMEOUT_MS,
|
||||
).catch(() => undefined)
|
||||
if (session && pathKey(session.directory) === pathKey(destination)) {
|
||||
WorkspaceOperation.complete(scope, sessionID, destination)
|
||||
sync.reindexSession(sessionID, source)
|
||||
return
|
||||
}
|
||||
if (WorkspaceOperation.get(scope, sessionID)?.status === "complete") return
|
||||
await new Promise((resolve) => setTimeout(resolve, Math.min(250 + attempt * 50, 1_000)))
|
||||
}
|
||||
fail(scope, sessionID, language.t("workspace.move.failed"))
|
||||
})
|
||||
.catch((error) =>
|
||||
fail(scope, sessionID, error instanceof Error ? error.message : language.t("common.requestFailed")),
|
||||
)
|
||||
} finally {
|
||||
setStore("selected", undefined)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -141,7 +145,7 @@ export function SessionWorkspaceMenu(props: {
|
|||
{language.t("session.new.workspace.existing").replace(/(…|\.{3})$/, "")}
|
||||
</MenuV2.SubTrigger>
|
||||
<MenuV2.Portal>
|
||||
<MenuV2.SubContent class="w-[200px]">
|
||||
<MenuV2.SubContent class="max-h-[calc(100dvh-16px)] w-[200px] overflow-y-auto">
|
||||
<For each={workspaces()}>
|
||||
{(workspace) => (
|
||||
<MenuV2.Item disabled={!!store.selected || blocked()} onSelect={() => void move(workspace)}>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Component, createMemo, createSignal, startTransition } from "solid-js"
|
||||
import { Dialog } from "@opencode-ai/ui/v2/dialog-v2"
|
||||
import { TabsV2 } from "@opencode-ai/ui/v2/tabs-v2"
|
||||
import { Icon } from "@opencode-ai/ui/icon"
|
||||
import { Icon } from "@opencode-ai/ui/v2/icon"
|
||||
import { useLanguage } from "@/context/language"
|
||||
import { usePlatform } from "@/context/platform"
|
||||
import { SettingsGeneralV2 } from "./general"
|
||||
|
|
@ -70,7 +70,7 @@ export const DialogSettings: Component<{
|
|||
<TabsV2.SectionTitle>{language.t("settings.section.server")}</TabsV2.SectionTitle>
|
||||
<div class="flex flex-col gap-1.5 w-full">
|
||||
<TabsV2.Trigger value="workspaces">
|
||||
<Icon name="fork" />
|
||||
<Icon name="workspace-isolated" />
|
||||
{language.t("settings.tab.workspaces")}
|
||||
</TabsV2.Trigger>
|
||||
<TabsV2.Trigger value="servers">
|
||||
|
|
|
|||
|
|
@ -291,57 +291,12 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS
|
|||
}
|
||||
|
||||
let streamErrorLogged = false
|
||||
let worktreeStreamErrorLogged = false
|
||||
const wait = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms))
|
||||
let attempt: AbortController | undefined
|
||||
let worktreeAttempt: AbortController | undefined
|
||||
let run: Promise<void> | undefined
|
||||
let started = false
|
||||
let generation = 0
|
||||
|
||||
const consumeWorktreeEvents = async (active: number) => {
|
||||
// Current worktree lifecycle events are still emitted only on the global compatibility stream.
|
||||
while (!abort.signal.aborted && started && generation === active) {
|
||||
const controller = new AbortController()
|
||||
worktreeAttempt = controller
|
||||
const onAbort = () => controller.abort()
|
||||
abort.signal.addEventListener("abort", onAbort)
|
||||
try {
|
||||
const events = (await eventSdk.global.event({ signal: controller.signal })).stream
|
||||
let yielded = Date.now()
|
||||
for await (const event of events) {
|
||||
const queued = adaptWorktreeCompatibilityEvent({
|
||||
directory: event.directory,
|
||||
payload: event.payload as Event,
|
||||
})
|
||||
if (queued) {
|
||||
worktreeStreamErrorLogged = false
|
||||
if (enqueueServerEvent(queue, queued)) schedule()
|
||||
}
|
||||
|
||||
if (Date.now() - yielded < STREAM_YIELD_MS) continue
|
||||
yielded = Date.now()
|
||||
await wait(0)
|
||||
}
|
||||
} catch (error) {
|
||||
if (!isStreamClosed(error, controller.signal) && !worktreeStreamErrorLogged) {
|
||||
worktreeStreamErrorLogged = true
|
||||
console.error("[global-sdk] worktree event stream failed", {
|
||||
url: server.http.url,
|
||||
fetch: eventFetch ? "platform" : "webview",
|
||||
error,
|
||||
})
|
||||
}
|
||||
} finally {
|
||||
abort.signal.removeEventListener("abort", onAbort)
|
||||
if (worktreeAttempt === controller) worktreeAttempt = undefined
|
||||
}
|
||||
|
||||
if (abort.signal.aborted || !started || generation !== active) return
|
||||
await wait(RECONNECT_DELAY_MS)
|
||||
}
|
||||
}
|
||||
|
||||
const start = () => {
|
||||
if (started) return run
|
||||
started = true
|
||||
|
|
@ -350,7 +305,6 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS
|
|||
const current = (async () => {
|
||||
if (previous) await previous
|
||||
const kind = await protocol
|
||||
if (kind === "v2") void consumeWorktreeEvents(active)
|
||||
// oxlint-disable-next-line no-unmodified-loop-condition -- `started` is set to false by stop() which also aborts; both flags are checked to allow graceful exit
|
||||
while (!abort.signal.aborted && started && generation === active) {
|
||||
attempt = new AbortController()
|
||||
|
|
@ -406,7 +360,6 @@ function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerS
|
|||
started = false
|
||||
generation++
|
||||
attempt?.abort()
|
||||
worktreeAttempt?.abort()
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
|
|
|
|||
|
|
@ -1042,10 +1042,18 @@ export const dict = {
|
|||
"settings.tab.workspaces": "مساحات العمل",
|
||||
"settings.workspaces.filter.all": "جميع المشاريع",
|
||||
"settings.workspaces.empty": "لا توجد مساحات عمل",
|
||||
"settings.workspaces.count.zero": "لا توجد مساحات عمل ({{count}})",
|
||||
"settings.workspaces.count.one": "{{count}} مساحة عمل",
|
||||
"settings.workspaces.count.other": "{{count}} مساحات عمل",
|
||||
"settings.workspaces.count.two": "مساحتا عمل ({{count}})",
|
||||
"settings.workspaces.count.few": "{{count}} مساحات عمل",
|
||||
"settings.workspaces.count.many": "{{count}} مساحة عمل",
|
||||
"settings.workspaces.count.other": "{{count}} مساحة عمل",
|
||||
"settings.workspaces.sessions.zero": "لا توجد جلسات ({{count}}) في {{project}}",
|
||||
"settings.workspaces.sessions.one": "{{count}} جلسة في {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} جلسات في {{project}}",
|
||||
"settings.workspaces.sessions.two": "جلستان ({{count}}) في {{project}}",
|
||||
"settings.workspaces.sessions.few": "{{count}} جلسات في {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} جلسة في {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} جلسة في {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "آخر جلسة نشطة",
|
||||
"settings.workspaces.deleteAll": "حذف جميع مساحات العمل",
|
||||
"settings.workspaces.deleteAll.confirm": "حذف جميع مساحات العمل البالغ عددها {{count}}؟",
|
||||
|
|
@ -1061,11 +1069,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "دليل محلي",
|
||||
"settings.workspaces.default.new": "مساحة عمل جديدة",
|
||||
"workspace.move.title": "نقل إلى مساحة العمل",
|
||||
"workspace.move.menu.title": "نقل الجلسة إلى",
|
||||
"workspace.move.failed": "تعذّر نقل الجلسة",
|
||||
"workspace.lifecycle.creating": "جارٍ إنشاء مساحة العمل",
|
||||
"workspace.lifecycle.created": "تم إنشاء مساحة العمل",
|
||||
"workspace.lifecycle.starting": "جارٍ بدء الجلسة",
|
||||
"workspace.onboarding.title": "عزل الجلسات باستخدام مساحات العمل",
|
||||
"workspace.onboarding.description": "تحصل كل جلسة على نسختها الخاصة، حتى لا يتداخل أي شيء مع مستودعك المحلي",
|
||||
"workspace.lifecycle.moving": "جارٍ النقل إلى مساحة العمل",
|
||||
"workspace.lifecycle.set": "تم تعيين مساحة العمل",
|
||||
"session.summary.title": "تفاصيل الجلسة",
|
||||
"session.summary.noBranch": "لا يوجد فرع",
|
||||
"session.summary.basedOn": "بناءً على {{branch}}",
|
||||
"workspace.type.local": "محلي",
|
||||
"workspace.type.sandbox": "بيئة معزولة",
|
||||
"workspace.create.failed.title": "فشل إنشاء مساحة العمل",
|
||||
|
|
@ -1188,4 +1203,13 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "فشل إنشاء أيقونة المشروع الدائمة",
|
||||
"error.childStore.storeCreateFailed": "فشل إنشاء المخزن",
|
||||
"terminal.connectionLost.abnormalClose": "تم إغلاق WebSocket بشكل غير طبيعي: {{code}}",
|
||||
|
||||
"command.session.export": "تصدير الجلسة",
|
||||
"command.session.export.description": "تصدير بيانات الجلسة",
|
||||
"context.export.session": "تصدير الجلسة",
|
||||
"toast.session.export.success.title": "تم تصدير الجلسة",
|
||||
"toast.session.export.success.description": "تم حفظ {{filename}} بنجاح",
|
||||
"toast.session.export.failed.title": "فشل تصدير الجلسة",
|
||||
"toast.session.export.failed.description": "حدث خطأ أثناء تصدير الجلسة",
|
||||
"common.export": "تصدير",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1152,4 +1152,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 sessiya arxivlənəcək.",
|
||||
"workspace.reset.archived.many": "{{count}} sessiya arxivlənəcək.",
|
||||
"workspace.reset.note": "Bu iş sahəsini standart branch ilə uyğunlaşdırmaq üçün sıfırlayacaq.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1051,8 +1051,10 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Todos os projetos",
|
||||
"settings.workspaces.empty": "Nenhum espaço de trabalho",
|
||||
"settings.workspaces.count.one": "{{count}} espaço de trabalho",
|
||||
"settings.workspaces.count.many": "{{count}} espaços de trabalho",
|
||||
"settings.workspaces.count.other": "{{count}} espaços de trabalho",
|
||||
"settings.workspaces.sessions.one": "{{count}} sessão em {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} sessões em {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessões em {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Última sessão ativa",
|
||||
"settings.workspaces.deleteAll": "Excluir todos os espaços de trabalho",
|
||||
|
|
@ -1070,11 +1072,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Diretório local",
|
||||
"settings.workspaces.default.new": "Novo espaço de trabalho",
|
||||
"workspace.move.title": "Mover para o espaço de trabalho",
|
||||
"workspace.move.menu.title": "Mover sessão para",
|
||||
"workspace.move.failed": "Não foi possível mover a sessão",
|
||||
"workspace.lifecycle.creating": "Criando espaço de trabalho",
|
||||
"workspace.lifecycle.created": "Espaço de trabalho criado",
|
||||
"workspace.lifecycle.starting": "Iniciando sessão",
|
||||
"workspace.onboarding.title": "Isole sessões com espaços de trabalho",
|
||||
"workspace.onboarding.description": "Cada um recebe seu próprio checkout, para não interferir com seu repositório local",
|
||||
"workspace.lifecycle.moving": "Movendo para o espaço de trabalho",
|
||||
"workspace.lifecycle.set": "Espaço de trabalho definido",
|
||||
"session.summary.title": "Detalhes da sessão",
|
||||
"session.summary.noBranch": "Nenhum branch",
|
||||
"session.summary.basedOn": "Com base em {{branch}}",
|
||||
"workspace.type.local": "local",
|
||||
"workspace.type.sandbox": "sandbox",
|
||||
"workspace.create.failed.title": "Falha ao criar espaço de trabalho",
|
||||
|
|
@ -1199,4 +1208,13 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Falha ao criar ícone de projeto persistente",
|
||||
"error.childStore.storeCreateFailed": "Falha ao criar armazenamento",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket fechado anormalmente: {{code}}",
|
||||
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1127,8 +1127,10 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Svi projekti",
|
||||
"settings.workspaces.empty": "Nema radnih prostora",
|
||||
"settings.workspaces.count.one": "{{count}} radni prostor",
|
||||
"settings.workspaces.count.few": "{{count}} radna prostora",
|
||||
"settings.workspaces.count.other": "{{count}} radnih prostora",
|
||||
"settings.workspaces.sessions.one": "{{count}} sesija u projektu {{project}}",
|
||||
"settings.workspaces.sessions.few": "{{count}} sesije u projektu {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sesija u projektu {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Posljednja aktivna sesija",
|
||||
"settings.workspaces.deleteAll": "Izbriši sve radne prostore",
|
||||
|
|
@ -1145,11 +1147,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Lokalni direktorij",
|
||||
"settings.workspaces.default.new": "Novi radni prostor",
|
||||
"workspace.move.title": "Premjesti u radni prostor",
|
||||
"workspace.move.menu.title": "Premjesti sesiju u",
|
||||
"workspace.move.failed": "Premještanje sesije nije uspjelo",
|
||||
"workspace.lifecycle.creating": "Kreiranje radnog prostora",
|
||||
"workspace.lifecycle.created": "Radni prostor je kreiran",
|
||||
"workspace.lifecycle.starting": "Pokretanje sesije",
|
||||
"workspace.onboarding.title": "Izolujte sesije pomoću radnih prostora",
|
||||
"workspace.onboarding.description": "Svaki dobija vlastiti checkout, tako da ništa ne ometa vaš lokalni repozitorij",
|
||||
"workspace.lifecycle.moving": "Premještanje u radni prostor",
|
||||
"workspace.lifecycle.set": "Radni prostor je postavljen",
|
||||
"session.summary.title": "Detalji sesije",
|
||||
"session.summary.noBranch": "Nema grane",
|
||||
"session.summary.basedOn": "Na osnovu {{branch}}",
|
||||
"workspace.type.local": "lokalno",
|
||||
"workspace.type.sandbox": "sandbox",
|
||||
"workspace.create.failed.title": "Neuspješno kreiranje radnog prostora",
|
||||
|
|
@ -1274,4 +1283,12 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Nije uspjelo kreiranje trajne ikone projekta",
|
||||
"error.childStore.storeCreateFailed": "Nije uspjelo kreiranje skladišta",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket zatvoren nenormalno: {{code}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1265,4 +1265,19 @@ export const dict = {
|
|||
"help.tabs.persistence": "Dine faner er stadig åbne, når du åbner appen igen.",
|
||||
"help.tabs.worktrees":
|
||||
"Det nye design understøtter endnu ikke Git Worktrees, men understøttelsen kommer snart. Hvis du foretrækker at fortsætte med det tidligere layout, kan du skifte mellem layoutene under Indstillinger. Bemærk, at det nye layout bliver permanent om nogle få uger.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1203,4 +1203,19 @@ export const dict = {
|
|||
"help.tabs.persistence": "Wenn Sie die App erneut öffnen, sind Ihre Tabs weiterhin geöffnet.",
|
||||
"help.tabs.worktrees":
|
||||
"Das neue Design unterstützt Git-Worktrees noch nicht. Diese Funktion folgt in Kürze. Wenn Sie das bisherige Layout vorerst weiterverwenden möchten, können Sie in den Einstellungen zwischen den Layouts wechseln. Beachten Sie jedoch, dass das neue Layout in einigen Wochen dauerhaft verwendet wird.",
|
||||
} satisfies Partial<Record<Keys, string>>
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1135,8 +1135,10 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Todos los proyectos",
|
||||
"settings.workspaces.empty": "No hay espacios de trabajo",
|
||||
"settings.workspaces.count.one": "{{count}} espacio de trabajo",
|
||||
"settings.workspaces.count.many": "{{count}} espacios de trabajo",
|
||||
"settings.workspaces.count.other": "{{count}} espacios de trabajo",
|
||||
"settings.workspaces.sessions.one": "{{count}} sesión en {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} sesiones en {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sesiones en {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Última sesión activa",
|
||||
"settings.workspaces.deleteAll": "Eliminar todos los espacios de trabajo",
|
||||
|
|
@ -1154,11 +1156,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Directorio local",
|
||||
"settings.workspaces.default.new": "Nuevo espacio de trabajo",
|
||||
"workspace.move.title": "Mover al espacio de trabajo",
|
||||
"workspace.move.menu.title": "Mover sesión a",
|
||||
"workspace.move.failed": "No se pudo mover la sesión",
|
||||
"workspace.lifecycle.creating": "Creando espacio de trabajo",
|
||||
"workspace.lifecycle.created": "Espacio de trabajo creado",
|
||||
"workspace.lifecycle.starting": "Iniciando sesión",
|
||||
"workspace.onboarding.title": "Aísla sesiones con espacios de trabajo",
|
||||
"workspace.onboarding.description": "Cada uno obtiene su propio checkout, para no interferir con tu repositorio local",
|
||||
"workspace.lifecycle.moving": "Moviendo al espacio de trabajo",
|
||||
"workspace.lifecycle.set": "Espacio de trabajo establecido",
|
||||
"session.summary.title": "Detalles de la sesión",
|
||||
"session.summary.noBranch": "Sin rama",
|
||||
"session.summary.basedOn": "Basado en {{branch}}",
|
||||
"workspace.type.local": "local",
|
||||
"workspace.type.sandbox": "sandbox",
|
||||
"workspace.create.failed.title": "Fallo al crear espacio de trabajo",
|
||||
|
|
@ -1283,4 +1292,12 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Error al crear icono de proyecto persistente",
|
||||
"error.childStore.storeCreateFailed": "Error al crear almacén",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket cerrado anormalmente: {{code}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1152,4 +1152,50 @@ export const dict = {
|
|||
"help.tabs.persistence": "Kun avaat sovelluksen uudelleen, välilehtesi ovat yhä avoinna.",
|
||||
"help.tabs.worktrees":
|
||||
"Uusi ulkoasu ei vielä tue Git-työpuita, mutta tuki on tulossa pian. Jos haluat jatkaa aiemman ulkoasun käyttöä, voit vaihtaa ulkoasua asetuksissa. Huomaa kuitenkin, että uudesta ulkoasusta tulee pysyvä muutaman viikon kuluttua.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1061,8 +1061,10 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Tous les projets",
|
||||
"settings.workspaces.empty": "Aucun espace de travail",
|
||||
"settings.workspaces.count.one": "{{count}} espace de travail",
|
||||
"settings.workspaces.count.many": "{{count}} espaces de travail",
|
||||
"settings.workspaces.count.other": "{{count}} espaces de travail",
|
||||
"settings.workspaces.sessions.one": "{{count}} session dans {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} sessions dans {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions dans {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Dernière session active",
|
||||
"settings.workspaces.deleteAll": "Supprimer tous les espaces de travail",
|
||||
|
|
@ -1080,11 +1082,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Dossier local",
|
||||
"settings.workspaces.default.new": "Nouvel espace de travail",
|
||||
"workspace.move.title": "Déplacer vers l’espace de travail",
|
||||
"workspace.move.menu.title": "Déplacer la session vers",
|
||||
"workspace.move.failed": "Impossible de déplacer la session",
|
||||
"workspace.lifecycle.creating": "Création de l’espace de travail",
|
||||
"workspace.lifecycle.created": "Espace de travail créé",
|
||||
"workspace.lifecycle.starting": "Démarrage de la session",
|
||||
"workspace.onboarding.title": "Isolez vos sessions avec les espaces de travail",
|
||||
"workspace.onboarding.description": "Chacun dispose de son propre checkout pour ne pas interférer avec votre dépôt local",
|
||||
"workspace.lifecycle.moving": "Déplacement vers l’espace de travail",
|
||||
"workspace.lifecycle.set": "Espace de travail défini",
|
||||
"session.summary.title": "Détails de la session",
|
||||
"session.summary.noBranch": "Aucune branche",
|
||||
"session.summary.basedOn": "Basé sur {{branch}}",
|
||||
"workspace.type.local": "local",
|
||||
"workspace.type.sandbox": "bac à sable",
|
||||
"workspace.create.failed.title": "Échec de la création de l'espace de travail",
|
||||
|
|
@ -1217,4 +1226,12 @@ export const dict = {
|
|||
|
||||
"titlebar.update": "Mettre à jour",
|
||||
"titlebar.updateVersion": "Mettre à jour {{version}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1147,4 +1147,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 सेशन संग्रहित किया जाएगा।",
|
||||
"workspace.reset.archived.many": "{{count}} सेशन संग्रहित किए जाएँगे।",
|
||||
"workspace.reset.note": "यह डिफ़ॉल्ट शाखा से मिलान करने के लिए वर्कस्पेस को रीसेट कर देगा।",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1234,4 +1234,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 sesi akan diarsipkan.",
|
||||
"workspace.reset.archived.many": "{{count}} sesi akan diarsipkan.",
|
||||
"workspace.reset.note": "Ini akan mengatur ulang ruang kerja agar cocok dengan cabang bawaan.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1160,4 +1160,55 @@ export const dict = {
|
|||
"desktop.wsl.error.failedPort": "Impossibile ottenere la porta",
|
||||
"desktop.picker.error.notSelected": "Il file non è stato selezionato nella finestra di selezione",
|
||||
"desktop.picker.error.sizeLimit": "Gli allegati selezionati superano il limite di {{limit}} MB",
|
||||
|
||||
"common.viewAll": "Mostra tutto",
|
||||
"session.new.workspace.local.tooltip": "Usa il checkout corrente",
|
||||
"session.new.workspace.new.tooltip": "Crea un checkout isolato",
|
||||
"session.new.workspace.fromBranch": "da {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Seleziona dove eseguire la sessione",
|
||||
"session.new.workspace.search.placeholder": "Cerca aree di lavoro",
|
||||
"settings.tab.workspaces": "Aree di lavoro",
|
||||
"settings.workspaces.filter.all": "Tutti i progetti",
|
||||
"settings.workspaces.empty": "Nessuna area di lavoro",
|
||||
"settings.workspaces.count.one": "{{count}} area di lavoro",
|
||||
"settings.workspaces.count.many": "{{count}} aree di lavoro",
|
||||
"settings.workspaces.count.other": "{{count}} aree di lavoro",
|
||||
"settings.workspaces.sessions.one": "{{count}} sessione in {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} sessioni in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessioni in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Ultima sessione attiva",
|
||||
"settings.workspaces.deleteAll": "Elimina tutte le aree di lavoro",
|
||||
"settings.workspaces.deleteAll.confirm": "Eliminare tutte le {{count}} aree di lavoro?",
|
||||
"settings.workspaces.delete.warning":
|
||||
"La directory e il branch dell'area di lavoro verranno rimossi definitivamente. L'eliminazione procede solo se l'area è pulita, inattiva e non ha sessioni collegate.",
|
||||
"settings.workspaces.deleteAll.warning":
|
||||
"Le {{count}} aree di lavoro selezionate in {{project}} verranno rimosse definitivamente solo se ciascuna è pulita, inattiva e non ha sessioni collegate.",
|
||||
"settings.workspaces.delete.blocked.active": "L'area di lavoro attiva non può essere eliminata.",
|
||||
"settings.workspaces.delete.blocked.linked": "Questa area di lavoro ha sessioni collegate e non può essere eliminata.",
|
||||
"settings.workspaces.default.title": "Ambiente predefinito",
|
||||
"settings.workspaces.default.description": "Scegli dove avviare le nuove sessioni",
|
||||
"settings.workspaces.default.lastUsed": "Ultimo usato per progetto",
|
||||
"settings.workspaces.default.local": "Directory locale",
|
||||
"settings.workspaces.default.new": "Nuova area di lavoro",
|
||||
"workspace.move.title": "Sposta nell'area di lavoro",
|
||||
"workspace.move.menu.title": "Sposta la sessione in",
|
||||
"workspace.move.failed": "Impossibile spostare la sessione",
|
||||
"workspace.lifecycle.creating": "Creazione dell'area di lavoro",
|
||||
"workspace.lifecycle.created": "Area di lavoro creata",
|
||||
"workspace.lifecycle.starting": "Avvio sessione",
|
||||
"workspace.onboarding.title": "Isola le sessioni con le aree di lavoro",
|
||||
"workspace.onboarding.description": "Ognuna ottiene il proprio checkout per non interferire con il repository locale",
|
||||
"workspace.lifecycle.moving": "Spostamento nell'area di lavoro",
|
||||
"workspace.lifecycle.set": "Area di lavoro impostata",
|
||||
"session.summary.title": "Dettagli della sessione",
|
||||
"session.summary.noBranch": "Nessun branch",
|
||||
"session.summary.basedOn": "Basato su {{branch}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1186,4 +1186,19 @@ export const dict = {
|
|||
|
||||
"titlebar.update": "アップデート",
|
||||
"titlebar.updateVersion": "アップデート {{version}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1184,4 +1184,19 @@ export const dict = {
|
|||
|
||||
"desktop.picker.error.notSelected": "선택기에서 파일을 선택하지 않았습니다",
|
||||
"desktop.picker.error.sizeLimit": "선택한 첨부 파일이 {{limit}} MB 제한을 초과합니다",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1155,4 +1155,50 @@ export const dict = {
|
|||
"workspace.reset.archived.many": "{{count}} sessies worden gearchiveerd.",
|
||||
"workspace.reset.note":
|
||||
"Hierdoor wordt de werkruimte opnieuw ingesteld zodat deze overeenkomt met de standaardbranch.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1284,4 +1284,19 @@ export const dict = {
|
|||
"settings.general.row.pinchZoom.description": "Tillat knipebevegelser på styreflaten og Ctrl-rulling for å zoome",
|
||||
"settings.updates.action.downloading": "Laster ned...",
|
||||
"settings.updates.action.installing": "Installerer...",
|
||||
} satisfies Partial<Record<Keys, string>>
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1145,4 +1145,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 سیشن آرکائیو کیتا جائے گا۔",
|
||||
"workspace.reset.archived.many": "{{count}} سیشن آرکائیو کیتے جان گے۔",
|
||||
"workspace.reset.note": "ایہ ورک اسپیس نو ڈیفالٹ برانچ نال ملاون لئی ری سیٹ کرے گا۔",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1053,8 +1053,12 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Wszystkie projekty",
|
||||
"settings.workspaces.empty": "Brak obszarów roboczych",
|
||||
"settings.workspaces.count.one": "{{count}} obszar roboczy",
|
||||
"settings.workspaces.count.few": "{{count}} obszary robocze",
|
||||
"settings.workspaces.count.many": "{{count}} obszarów roboczych",
|
||||
"settings.workspaces.count.other": "{{count}} obszarów roboczych",
|
||||
"settings.workspaces.sessions.one": "{{count}} sesja w {{project}}",
|
||||
"settings.workspaces.sessions.few": "{{count}} sesje w {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} sesji w {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sesji w {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Ostatnia aktywna sesja",
|
||||
"settings.workspaces.deleteAll": "Usuń wszystkie obszary robocze",
|
||||
|
|
@ -1071,11 +1075,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Katalog lokalny",
|
||||
"settings.workspaces.default.new": "Nowy obszar roboczy",
|
||||
"workspace.move.title": "Przenieś do obszaru roboczego",
|
||||
"workspace.move.menu.title": "Przenieś sesję do",
|
||||
"workspace.move.failed": "Nie udało się przenieść sesji",
|
||||
"workspace.lifecycle.creating": "Tworzenie obszaru roboczego",
|
||||
"workspace.lifecycle.created": "Utworzono obszar roboczy",
|
||||
"workspace.lifecycle.starting": "Uruchamianie sesji",
|
||||
"workspace.onboarding.title": "Izoluj sesje za pomocą przestrzeni roboczych",
|
||||
"workspace.onboarding.description": "Każda otrzymuje własny checkout, więc nic nie zakłóca Twojego lokalnego repozytorium",
|
||||
"workspace.lifecycle.moving": "Przenoszenie do obszaru roboczego",
|
||||
"workspace.lifecycle.set": "Ustawiono obszar roboczy",
|
||||
"session.summary.title": "Szczegóły sesji",
|
||||
"session.summary.noBranch": "Brak gałęzi",
|
||||
"session.summary.basedOn": "Na podstawie {{branch}}",
|
||||
"workspace.type.local": "lokalna",
|
||||
"workspace.type.sandbox": "piaskownica",
|
||||
"workspace.create.failed.title": "Nie udało się utworzyć przestrzeni roboczej",
|
||||
|
|
@ -1201,4 +1212,12 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Nie udało się utworzyć trwałej ikony projektu",
|
||||
"error.childStore.storeCreateFailed": "Nie udało się utworzyć magazynu",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket zamknięty nieprawidłowo: {{code}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1132,8 +1132,12 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Все проекты",
|
||||
"settings.workspaces.empty": "Нет рабочих пространств",
|
||||
"settings.workspaces.count.one": "{{count}} рабочее пространство",
|
||||
"settings.workspaces.count.few": "{{count}} рабочих пространства",
|
||||
"settings.workspaces.count.many": "{{count}} рабочих пространств",
|
||||
"settings.workspaces.count.other": "{{count}} рабочих пространств",
|
||||
"settings.workspaces.sessions.one": "{{count}} сессия в {{project}}",
|
||||
"settings.workspaces.sessions.few": "{{count}} сессии в {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} сессий в {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} сессий в {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Последний активный сеанс",
|
||||
"settings.workspaces.deleteAll": "Удалить все рабочие пространства",
|
||||
|
|
@ -1151,11 +1155,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Локальный каталог",
|
||||
"settings.workspaces.default.new": "Новое рабочее пространство",
|
||||
"workspace.move.title": "Переместить в рабочую область",
|
||||
"workspace.move.menu.title": "Переместить сессию в",
|
||||
"workspace.move.failed": "Не удалось переместить сеанс",
|
||||
"workspace.lifecycle.creating": "Создание рабочей области",
|
||||
"workspace.lifecycle.created": "Рабочая область создана",
|
||||
"workspace.lifecycle.starting": "Запуск сессии",
|
||||
"workspace.onboarding.title": "Изолируйте сессии с помощью рабочих пространств",
|
||||
"workspace.onboarding.description": "Каждая получает отдельную копию, чтобы не влиять на ваш локальный репозиторий",
|
||||
"workspace.lifecycle.moving": "Перемещение в рабочую область",
|
||||
"workspace.lifecycle.set": "Рабочая область задана",
|
||||
"session.summary.title": "Сведения о сеансе",
|
||||
"session.summary.noBranch": "Нет ветки",
|
||||
"session.summary.basedOn": "На основе {{branch}}",
|
||||
"workspace.type.local": "локальное",
|
||||
"workspace.type.sandbox": "песочница",
|
||||
"workspace.create.failed.title": "Не удалось создать рабочее пространство",
|
||||
|
|
@ -1280,4 +1291,12 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Не удалось создать постоянный значок проекта",
|
||||
"error.childStore.storeCreateFailed": "Не удалось создать хранилище",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket закрыт аварийно: {{code}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1144,4 +1144,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 session kommer att arkiveras.",
|
||||
"workspace.reset.archived.many": "{{count}} sessioner kommer att arkiveras.",
|
||||
"workspace.reset.note": "Detta kommer att återställa arbetsytan så att den matchar standardgrenen.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1255,4 +1255,19 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "ไม่สามารถสร้างไอคอนโปรเจกต์ถาวร",
|
||||
"error.childStore.storeCreateFailed": "ไม่สามารถสร้างที่เก็บ",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket ปิดอย่างผิดปกติ: {{code}}",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1277,4 +1277,19 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "Kalıcı proje simgesi oluşturulamadı",
|
||||
"error.childStore.storeCreateFailed": "Depo oluşturulamadı",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket anormal şekilde kapandı: {{code}}",
|
||||
} satisfies Partial<Record<Keys, string>>
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1237,8 +1237,12 @@ export const dict = {
|
|||
"settings.workspaces.filter.all": "Усі проєкти",
|
||||
"settings.workspaces.empty": "Немає робочих просторів",
|
||||
"settings.workspaces.count.one": "{{count}} робочий простір",
|
||||
"settings.workspaces.count.few": "{{count}} робочі простори",
|
||||
"settings.workspaces.count.many": "{{count}} робочих просторів",
|
||||
"settings.workspaces.count.other": "{{count}} робочих просторів",
|
||||
"settings.workspaces.sessions.one": "{{count}} сесія в {{project}}",
|
||||
"settings.workspaces.sessions.few": "{{count}} сесії в {{project}}",
|
||||
"settings.workspaces.sessions.many": "{{count}} сесій у {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} сесій у {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Останній активний сеанс",
|
||||
"settings.workspaces.deleteAll": "Видалити всі робочі простори",
|
||||
|
|
@ -1255,11 +1259,18 @@ export const dict = {
|
|||
"settings.workspaces.default.local": "Локальний каталог",
|
||||
"settings.workspaces.default.new": "Новий робочий простір",
|
||||
"workspace.move.title": "Перемістити до робочого простору",
|
||||
"workspace.move.menu.title": "Перемістити сесію до",
|
||||
"workspace.move.failed": "Не вдалося перемістити сеанс",
|
||||
"workspace.lifecycle.creating": "Створення робочого простору",
|
||||
"workspace.lifecycle.created": "Робочий простір створено",
|
||||
"workspace.lifecycle.starting": "Запуск сесії",
|
||||
"workspace.onboarding.title": "Ізолюйте сесії за допомогою робочих просторів",
|
||||
"workspace.onboarding.description": "Кожен отримує власний checkout, тому ніщо не заважає вашому локальному репозиторію",
|
||||
"workspace.lifecycle.moving": "Переміщення до робочого простору",
|
||||
"workspace.lifecycle.set": "Робочий простір установлено",
|
||||
"session.summary.title": "Відомості про сеанс",
|
||||
"session.summary.noBranch": "Немає гілки",
|
||||
"session.summary.basedOn": "На основі {{branch}}",
|
||||
"workspace.type.local": "локальна",
|
||||
"workspace.type.sandbox": "пісочниця",
|
||||
"workspace.create.failed.title": "Не вдалося створити робочу область",
|
||||
|
|
@ -1284,4 +1295,12 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 сесію буде заархівовано.",
|
||||
"workspace.reset.archived.many": "{{count}} сесій буде заархівовано.",
|
||||
"workspace.reset.note": "Це скине робочу область, щоб вона відповідала гілці за замовчуванням.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1148,4 +1148,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 سیشن آرکائیو کیا جائے گا۔",
|
||||
"workspace.reset.archived.many": "{{count}} سیشنز آرکائیو کیے جائیں گے۔",
|
||||
"workspace.reset.note": "یہ ڈیفالٹ برانچ سے ملنے کے لیے ورک اسپیس کو دوبارہ ترتیب دے گا۔",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1153,4 +1153,50 @@ export const dict = {
|
|||
"workspace.reset.archived.one": "1 phiên sẽ được lưu trữ.",
|
||||
"workspace.reset.archived.many": "{{count}} phiên sẽ được lưu trữ.",
|
||||
"workspace.reset.note": "Điều này sẽ thiết lập lại không gian làm việc để phù hợp với nhánh mặc định.",
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"common.viewAll": "View all",
|
||||
"session.new.workspace.local.tooltip": "Use current checkout",
|
||||
"session.new.workspace.new.tooltip": "Create isolated checkout",
|
||||
"session.new.workspace.fromBranch": "from {{branch}}",
|
||||
"session.new.workspace.trigger.tooltip": "Select where to run session",
|
||||
"session.new.workspace.search.placeholder": "Search workspaces",
|
||||
"settings.tab.workspaces": "Workspaces",
|
||||
"settings.workspaces.filter.all": "All projects",
|
||||
"settings.workspaces.empty": "No workspaces",
|
||||
"settings.workspaces.count.one": "{{count}} workspace",
|
||||
"settings.workspaces.count.other": "{{count}} workspaces",
|
||||
"settings.workspaces.sessions.one": "{{count}} session in {{project}}",
|
||||
"settings.workspaces.sessions.other": "{{count}} sessions in {{project}}",
|
||||
"settings.workspaces.lastActiveSession": "Last active session",
|
||||
"settings.workspaces.deleteAll": "Delete all workspaces",
|
||||
"settings.workspaces.deleteAll.confirm": "Delete all {{count}} workspaces?",
|
||||
"settings.workspaces.delete.warning": "The workspace directory and branch will be permanently removed. Deletion proceeds only if it is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.deleteAll.warning": "The {{count}} selected workspaces in {{project}} will be permanently removed only if each is clean, inactive, and has no linked sessions.",
|
||||
"settings.workspaces.delete.blocked.active": "The active workspace cannot be deleted.",
|
||||
"settings.workspaces.delete.blocked.linked": "This workspace has linked sessions and cannot be deleted.",
|
||||
"settings.workspaces.default.title": "Default environment",
|
||||
"settings.workspaces.default.description": "Choose where new sessions start",
|
||||
"settings.workspaces.default.lastUsed": "Last used per project",
|
||||
"settings.workspaces.default.local": "Local directory",
|
||||
"settings.workspaces.default.new": "New workspace",
|
||||
"workspace.move.title": "Move to workspace",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.move.failed": "Failed to move session",
|
||||
"workspace.lifecycle.creating": "Creating workspace",
|
||||
"workspace.lifecycle.created": "Workspace created",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"workspace.lifecycle.moving": "Moving to workspace",
|
||||
"workspace.lifecycle.set": "Workspace set",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1244,4 +1244,19 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "创建持久化项目图标失败",
|
||||
"error.childStore.storeCreateFailed": "创建存储失败",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket 异常关闭:{{code}}",
|
||||
} satisfies Partial<Record<Keys, string>>
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1240,4 +1240,19 @@ export const dict = {
|
|||
"error.childStore.persistedProjectIconCreateFailed": "建立持續性專案圖示失敗",
|
||||
"error.childStore.storeCreateFailed": "建立儲存區失敗",
|
||||
"terminal.connectionLost.abnormalClose": "WebSocket 異常關閉:{{code}}",
|
||||
} satisfies Partial<Record<Keys, string>>
|
||||
"command.session.export": "Export session",
|
||||
"command.session.export.description": "Export the full session transcript as JSON",
|
||||
"context.export.session": "Export session",
|
||||
"toast.session.export.success.title": "Session exported",
|
||||
"toast.session.export.success.description": "Saved session to {{filename}}",
|
||||
"toast.session.export.failed.title": "Failed to export session",
|
||||
"toast.session.export.failed.description": "An error occurred while exporting the session",
|
||||
"common.export": "Export",
|
||||
"workspace.move.menu.title": "Move session to",
|
||||
"workspace.lifecycle.starting": "Starting session",
|
||||
"workspace.onboarding.title": "Isolate sessions with workspaces",
|
||||
"workspace.onboarding.description": "Each gets its own checkout, so nothing interferes with your local repository",
|
||||
"session.summary.title": "Session details",
|
||||
"session.summary.noBranch": "No branch",
|
||||
"session.summary.basedOn": "Based on {{branch}}",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { useDialog } from "@opencode-ai/ui/context/dialog"
|
||||
import { Tooltip } from "@opencode-ai/ui/tooltip"
|
||||
import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon"
|
||||
import { Icon } from "@opencode-ai/ui/v2/icon"
|
||||
import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2"
|
||||
import { WordmarkV2 } from "@opencode-ai/ui/v2/wordmark-v2"
|
||||
import { Show, createMemo, createSignal, type Accessor } from "solid-js"
|
||||
|
|
@ -33,10 +33,7 @@ export function NewSessionView(props: {
|
|||
}) {
|
||||
const [onboarding, setOnboarding, , onboardingReady] = persisted(
|
||||
Persist.global("workspace-onboarding"),
|
||||
createStore({ cardDismissed: false, used: false }),
|
||||
)
|
||||
const showCard = createMemo(
|
||||
() => onboardingReady() && props.workspace.bar.visible() && !onboarding.cardDismissed && !onboarding.used,
|
||||
createStore({ used: false }),
|
||||
)
|
||||
const select = (value: string) => {
|
||||
props.workspace.selection.set(value)
|
||||
|
|
@ -151,7 +148,7 @@ function ProviderTip() {
|
|||
>
|
||||
<span class="truncate">{language.t("home.providerTip")}</span>
|
||||
<span class="flex size-6 shrink-0 items-center justify-center" aria-hidden="true">
|
||||
<IconV2 name="chevron-down" size="small" class="-rotate-90" />
|
||||
<Icon name="chevron-down" size="small" class="-rotate-90" />
|
||||
</span>
|
||||
</button>
|
||||
<TooltipV2
|
||||
|
|
@ -166,7 +163,7 @@ function ProviderTip() {
|
|||
aria-label={language.t("common.dismiss")}
|
||||
onClick={() => setPersistedState("dismissedAt", Date.now())}
|
||||
>
|
||||
<IconV2 name="xmark-small" />
|
||||
<Icon name="xmark-small" />
|
||||
</button>
|
||||
</TooltipV2>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ function WorkspaceMoveAction(props: {
|
|||
: "flex h-[46px] w-full items-center gap-2 rounded-b-[6px] px-3 pr-9 pt-2.5 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted focus-visible:outline-none"
|
||||
}
|
||||
>
|
||||
<IconV2 name={inline() ? "workspace-new" : "workspace-new"} class="shrink-0 text-v2-icon-icon-muted" />
|
||||
<IconV2 name="workspace-new" class="shrink-0 text-v2-icon-icon-muted" />
|
||||
<span class="min-w-0 truncate">{language.t("workspace.move.title")}</span>
|
||||
</SessionWorkspaceMenu>
|
||||
<button
|
||||
|
|
@ -337,7 +337,7 @@ function SessionSummaryPanel(props: {
|
|||
data-component="session-summary-panel"
|
||||
class="w-[280px]"
|
||||
>
|
||||
<div class="relative z-[70] flex flex-col gap-1 overflow-hidden rounded-[6px] bg-v2-background-bg-base px-0.5 py-1.5 shadow-[var(--v2-elevation-raised)]">
|
||||
<div class="relative z-10 flex flex-col gap-1 overflow-hidden rounded-[6px] bg-v2-background-bg-base px-0.5 py-1.5 shadow-[var(--v2-elevation-raised)]">
|
||||
<div class={row}>
|
||||
<ProjectAvatar
|
||||
fallback={displayName(props.project)}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ describe("isWorkspaceDirectory", () => {
|
|||
expect(isWorkspaceDirectory(project, "C:\\repo")).toBe(false)
|
||||
expect(isWorkspaceDirectory(project, "C:\\repo-workspaces\\feature")).toBe(true)
|
||||
expect(isWorkspaceDirectory(project, "c:\\repo-workspaces\\feature\\packages\\app")).toBe(true)
|
||||
expect(
|
||||
isWorkspaceDirectory(
|
||||
{ worktree: "/repo", sandboxes: ["/repo/.worktrees/feature"] },
|
||||
"/repo/.worktrees/feature",
|
||||
),
|
||||
).toBe(true)
|
||||
})
|
||||
|
||||
test("does not classify unknown directories", () => {
|
||||
|
|
@ -156,6 +162,13 @@ test("blocks unsafe workspace deletion", () => {
|
|||
expect(inspectWorkspaceDeletion({ workspace: "/workspace", sessions: [], status: "dirty" })).toBe("dirty")
|
||||
expect(inspectWorkspaceDeletion({ workspace: "/workspace", sessions: [], status: "unknown" })).toBe("unknown")
|
||||
expect(inspectWorkspaceDeletion({ workspace: "/workspace", sessions: [], status: "clean" })).toBe("safe")
|
||||
expect(
|
||||
inspectWorkspaceDeletion({
|
||||
workspace: "/workspace",
|
||||
sessions: [{ directory: "/workspace", time: { created: 1, updated: 1, archived: 2 } } as Session],
|
||||
status: "clean",
|
||||
}),
|
||||
).toBe("safe")
|
||||
})
|
||||
|
||||
test("groups nested non-archived workspace sessions by latest activity", () => {
|
||||
|
|
|
|||
|
|
@ -73,14 +73,20 @@ export function inspectWorkspaceDeletion(input: {
|
|||
status: "clean" | "dirty" | "unknown"
|
||||
}): WorkspaceDeleteInspection {
|
||||
if (input.activeDirectory && containsDirectory(input.workspace, input.activeDirectory)) return "active"
|
||||
if (input.sessions.some((session) => containsDirectory(input.workspace, session.directory))) return "linked"
|
||||
if (
|
||||
input.sessions.some(
|
||||
(session) => session.time?.archived === undefined && containsDirectory(input.workspace, session.directory),
|
||||
)
|
||||
)
|
||||
return "linked"
|
||||
if (input.status === "unknown") return "unknown"
|
||||
if (input.status === "dirty") return "dirty"
|
||||
return "safe"
|
||||
}
|
||||
|
||||
export function isWorkspaceDirectory(project: WorkspaceProject | undefined, directory: string) {
|
||||
if (!project || containsDirectory(project.worktree, directory)) return false
|
||||
if (!project || (containsDirectory(project.worktree, directory) && containsDirectory(directory, project.worktree)))
|
||||
return false
|
||||
return workspaceDirectories(project).some((workspace) => containsDirectory(workspace, directory))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue