fix(ui): gate control ui raw copy

This commit is contained in:
Vincent Koc
2026-04-29 13:05:52 -07:00
parent c9156cd9a8
commit 60c2a90550
44 changed files with 9522 additions and 432 deletions

View File

@@ -1,11 +1,12 @@
import { spawn } from "node:child_process";
import { createHash } from "node:crypto";
import { existsSync } from "node:fs";
import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
import { homedir } from "node:os";
import path from "node:path";
import { createInterface } from "node:readline";
import { fileURLToPath, pathToFileURL } from "node:url";
import * as ts from "typescript";
import { formatErrorMessage } from "../src/infra/errors.ts";
interface TranslationMap {
@@ -57,6 +58,27 @@ type TranslationBatchItem = {
textHash: string;
};
type RawCopyFinding = {
kind: "html-attribute" | "html-text" | "object-property";
line: number;
name: string;
path: string;
text: string;
};
type RawCopyBaselineEntry = {
count: number;
kind: RawCopyFinding["kind"];
name: string;
path: string;
text: string;
};
type RawCopyBaseline = {
version: number;
entries: RawCopyBaselineEntry[];
};
const CONTROL_UI_I18N_WORKFLOW = 1;
const DEFAULT_OPENAI_MODEL = "gpt-5.5";
const DEFAULT_ANTHROPIC_MODEL = "claude-opus-4-6";
@@ -68,6 +90,9 @@ const LOCALES_DIR = path.join(ROOT, "ui", "src", "i18n", "locales");
const I18N_ASSETS_DIR = path.join(ROOT, "ui", "src", "i18n", ".i18n");
const SOURCE_LOCALE_PATH = path.join(LOCALES_DIR, "en.ts");
const SOURCE_LOCALE = "en";
const CONTROL_UI_SOURCE_DIR = path.join(ROOT, "ui", "src", "ui");
const RAW_COPY_BASELINE_PATH = path.join(I18N_ASSETS_DIR, "raw-copy-baseline.json");
const RAW_COPY_BASELINE_VERSION = 1;
const MAX_BATCH_ITEMS = 20;
const DEFAULT_BATCH_CHAR_BUDGET = 2_000;
const TRANSLATE_MAX_ATTEMPTS = 2;
@@ -422,6 +447,20 @@ function renderTranslationMemory(entries: Map<string, TranslationMemoryEntry>):
return `${ordered.map((entry) => JSON.stringify(entry)).join("\n")}\n`;
}
function buildTranslationMemoryByTextHash(
entries: Map<string, TranslationMemoryEntry>,
locale: string,
): Map<string, TranslationMemoryEntry> {
const byTextHash = new Map<string, TranslationMemoryEntry>();
for (const entry of entries.values()) {
if (entry.tgt_lang !== locale || !entry.text_hash || !entry.translated.trim()) {
continue;
}
byTextHash.set(entry.text_hash, entry);
}
return byTextHash;
}
function buildGlossaryPrompt(glossary: readonly GlossaryEntry[]): string {
if (glossary.length === 0) {
return "";
@@ -488,6 +527,283 @@ function logProgress(message: string) {
process.stdout.write(`control-ui-i18n: ${message}\n`);
}
function toRepoPath(filePath: string): string {
return path.relative(ROOT, filePath).split(path.sep).join("/");
}
function normalizeRawCopyText(raw: string): string {
return raw
.replace(/\\n/g, " ")
.replace(/\s+/g, " ")
.replace(/&middot;/giu, "·")
.trim();
}
function hasHumanLetters(text: string): boolean {
return /\p{L}/u.test(text);
}
function lineNumberForOffset(source: string, offset: number): number {
let line = 1;
for (let index = 0; index < offset && index < source.length; index += 1) {
if (source.charCodeAt(index) === 10) {
line += 1;
}
}
return line;
}
function parseDoubleQuotedString(raw: string): string {
try {
return JSON.parse(`"${raw}"`) as string;
} catch {
return raw;
}
}
function pushRawCopyFinding(
findings: RawCopyFinding[],
params: Omit<RawCopyFinding, "text"> & { text: string },
) {
const text = normalizeRawCopyText(params.text);
if (!text || !hasHumanLetters(text)) {
return;
}
findings.push({
...params,
text,
});
}
async function walkControlUiSourceFiles(dir: string): Promise<string[]> {
const entries = await readdir(dir, { withFileTypes: true });
const files: string[] = [];
for (const entry of entries) {
if (entry.name === "test-helpers") {
continue;
}
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
files.push(...(await walkControlUiSourceFiles(fullPath)));
continue;
}
if (!entry.isFile() || !/\.tsx?$/u.test(entry.name)) {
continue;
}
if (/\.(?:test|browser\.test|node\.test)\.tsx?$/u.test(entry.name)) {
continue;
}
files.push(fullPath);
}
return files;
}
function collectRawCopyFromSource(params: {
filePath: string;
source: string;
sourceFile: ts.SourceFile;
}): RawCopyFinding[] {
const { filePath, source, sourceFile } = params;
const repoPath = toRepoPath(filePath);
const findings: RawCopyFinding[] = [];
const attrPattern =
/\b(aria-label|placeholder|title)\s*=\s*"((?:(?!\$\{)[^"\\]|\\.)*?\p{L}(?:(?!\$\{)[^"\\]|\\.)*?)"/gu;
for (const match of source.matchAll(attrPattern)) {
const rawText = match[2];
if (!rawText) {
continue;
}
pushRawCopyFinding(findings, {
kind: "html-attribute",
line: lineNumberForOffset(source, match.index ?? 0),
name: match[1] ?? "attribute",
path: repoPath,
text: parseDoubleQuotedString(rawText),
});
}
const propertyPattern =
/\b(label|title|subtitle|description|help|placeholder)\s*:\s*"((?:[^"\\]|\\.)*?\p{L}(?:[^"\\]|\\.)*?)"/gu;
for (const match of source.matchAll(propertyPattern)) {
const rawText = match[2];
if (!rawText) {
continue;
}
pushRawCopyFinding(findings, {
kind: "object-property",
line: lineNumberForOffset(source, match.index ?? 0),
name: match[1] ?? "property",
path: repoPath,
text: parseDoubleQuotedString(rawText),
});
}
const textPattern = />\s*([^<>{}]*?\p{L}[^<>{}]*?)\s*</gu;
const visit = (node: ts.Node) => {
if (ts.isTaggedTemplateExpression(node) && node.tag.getText(sourceFile) === "html") {
const template = node.template;
const chunks: Array<{ offset: number; text: string }> = [];
if (ts.isNoSubstitutionTemplateLiteral(template)) {
chunks.push({
offset: template.getStart(sourceFile) + 1,
text: template.text,
});
} else {
chunks.push({
offset: template.head.getStart(sourceFile) + 1,
text: template.head.text,
});
for (const span of template.templateSpans) {
chunks.push({
offset: span.literal.getStart(sourceFile) + 1,
text: span.literal.text,
});
}
}
for (const chunk of chunks) {
for (const match of chunk.text.matchAll(textPattern)) {
const rawText = match[1];
if (!rawText) {
continue;
}
pushRawCopyFinding(findings, {
kind: "html-text",
line: lineNumberForOffset(source, chunk.offset + (match.index ?? 0)),
name: "text",
path: repoPath,
text: rawText,
});
}
}
}
ts.forEachChild(node, visit);
};
visit(sourceFile);
return findings;
}
async function collectControlUiRawCopyFindings(): Promise<RawCopyFinding[]> {
const files = await walkControlUiSourceFiles(CONTROL_UI_SOURCE_DIR);
const findings: RawCopyFinding[] = [];
for (const filePath of files.toSorted((left, right) => left.localeCompare(right))) {
const source = await readFile(filePath, "utf8");
const sourceFile = ts.createSourceFile(
filePath,
source,
ts.ScriptTarget.Latest,
true,
filePath.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS,
);
findings.push(...collectRawCopyFromSource({ filePath, source, sourceFile }));
}
return findings;
}
function summarizeRawCopyFindings(findings: RawCopyFinding[]): RawCopyBaselineEntry[] {
const counts = new Map<string, RawCopyBaselineEntry>();
for (const finding of findings) {
const key = [finding.path, finding.kind, finding.name, finding.text].join("\u0000");
const existing = counts.get(key);
if (existing) {
existing.count += 1;
continue;
}
counts.set(key, {
count: 1,
kind: finding.kind,
name: finding.name,
path: finding.path,
text: finding.text,
});
}
return [...counts.values()].toSorted(
(left, right) =>
left.path.localeCompare(right.path) ||
left.kind.localeCompare(right.kind) ||
left.name.localeCompare(right.name) ||
left.text.localeCompare(right.text),
);
}
function formatRawCopyBaseline(entries: RawCopyBaselineEntry[]): string {
return `${JSON.stringify(
{
version: RAW_COPY_BASELINE_VERSION,
entries,
} satisfies RawCopyBaseline,
null,
2,
)}\n`;
}
function formatRawCopyBaselineDiff(
current: RawCopyBaselineEntry[],
expected: RawCopyBaselineEntry[],
) {
const keyFor = (entry: RawCopyBaselineEntry) =>
[entry.path, entry.kind, entry.name, entry.text].join("\u0000");
const currentByKey = new Map(current.map((entry) => [keyFor(entry), entry]));
const expectedByKey = new Map(expected.map((entry) => [keyFor(entry), entry]));
const added = current.filter((entry) => {
const expectedEntry = expectedByKey.get(keyFor(entry));
return !expectedEntry || expectedEntry.count !== entry.count;
});
const removed = expected.filter((entry) => {
const currentEntry = currentByKey.get(keyFor(entry));
return !currentEntry || currentEntry.count !== entry.count;
});
const lines: string[] = [];
for (const entry of added.slice(0, 20)) {
lines.push(
`+ ${entry.path} ${entry.kind}:${entry.name} x${entry.count} ${JSON.stringify(entry.text)}`,
);
}
for (const entry of removed.slice(0, 20)) {
lines.push(
`- ${entry.path} ${entry.kind}:${entry.name} x${entry.count} ${JSON.stringify(entry.text)}`,
);
}
const extra = added.length + removed.length - lines.length;
if (extra > 0) {
lines.push(`... ${extra} more baseline delta(s)`);
}
return lines.join("\n");
}
async function syncControlUiRawCopyBaseline(options: { checkOnly: boolean; write: boolean }) {
const findings = await collectControlUiRawCopyFindings();
const entries = summarizeRawCopyFindings(findings);
const expected = formatRawCopyBaseline(entries);
const current = existsSync(RAW_COPY_BASELINE_PATH)
? await readFile(RAW_COPY_BASELINE_PATH, "utf8")
: "";
if (!options.checkOnly && options.write && current !== expected) {
await mkdir(I18N_ASSETS_DIR, { recursive: true });
await writeFile(RAW_COPY_BASELINE_PATH, expected, "utf8");
}
if (options.checkOnly && current !== expected) {
let currentEntries: RawCopyBaselineEntry[] = [];
try {
const parsed = JSON.parse(current) as Partial<RawCopyBaseline>;
currentEntries = Array.isArray(parsed.entries) ? parsed.entries : [];
} catch {
currentEntries = [];
}
const diff = formatRawCopyBaselineDiff(entries, currentEntries);
throw new Error(
[
"control-ui raw-copy baseline drift detected.",
diff,
"Move user-facing strings into ui/src/i18n/locales/en.ts, or update the baseline with `node --import tsx scripts/control-ui-i18n.ts sync --write` when the raw string is intentional.",
]
.filter(Boolean)
.join("\n"),
);
}
logProgress(`raw-copy: baseline entries=${entries.length}`);
}
function isPromptTimeoutError(error: Error): boolean {
return error.message.toLowerCase().includes("timed out");
}
@@ -1030,6 +1346,7 @@ async function syncLocale(
const glossaryFilePath = glossaryPath(entry);
const glossary = await loadGlossary(glossaryFilePath);
const tm = await loadTranslationMemory(tmPath(entry));
const tmByTextHash = buildTranslationMemoryByTextHash(tm, entry.locale);
const allowTranslate = hasTranslationProvider();
const nextFlat = new Map<string, string>();
@@ -1040,6 +1357,7 @@ async function syncLocale(
const textHash = hashText(text);
const segmentCacheKey = cacheKey(key, textHash, entry.locale);
const cached = tm.get(segmentCacheKey);
const cachedByText = tmByTextHash.get(textHash);
const existing = existingFlat.get(key);
const shouldRefreshFallback = previousFallbackKeys.has(key);
@@ -1051,6 +1369,17 @@ async function syncLocale(
continue;
}
if (cachedByText && (shouldRefreshFallback || existing === undefined)) {
nextFlat.set(key, cachedByText.translated);
tm.set(segmentCacheKey, {
...cachedByText,
cache_key: segmentCacheKey,
segment_id: key,
source_path: `ui/src/i18n/locales/${entry.fileName}`,
});
continue;
}
if (existing !== undefined && !(allowTranslate && shouldRefreshFallback)) {
nextFlat.set(key, existing);
if (shouldRefreshFallback) {
@@ -1281,6 +1610,12 @@ async function verifyRuntimeLocaleConfig() {
async function main() {
const args = parseArgs(process.argv.slice(2));
await verifyRuntimeLocaleConfig();
if (args.command === "check" || (args.command === "sync" && args.write && !args.localeFilter)) {
await syncControlUiRawCopyBaseline({
checkOnly: args.command === "check",
write: args.write,
});
}
const entries = args.localeFilter
? LOCALE_ENTRIES.filter((entry) => entry.locale === args.localeFilter)

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:26:43.775Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:41.033Z",
"locale": "ar",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:24:36.089Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:33.970Z",
"locale": "de",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,109 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:25:04.646Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.next",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.thinking",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.unknown",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:35.408Z",
"locale": "es",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 889,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:29:06.276Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:55.119Z",
"locale": "fa",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:25:34.318Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:39.587Z",
"locale": "fr",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:27:41.106Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:46.741Z",
"locale": "id",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:26:51.753Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:42.451Z",
"locale": "it",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:25:24.869Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:36.798Z",
"locale": "ja-JP",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:25:40.100Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:38.201Z",
"locale": "ko",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:28:57.177Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:53.618Z",
"locale": "nl",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:27:39.429Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:48.420Z",
"locale": "pl",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,107 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:24:26.140Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.defaultName",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:32.446Z",
"locale": "pt-BR",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 891,
"workflow": 1
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:27:45.085Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:50.212Z",
"locale": "th",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:26:27.062Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:43.889Z",
"locale": "tr",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:26:42.042Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:45.305Z",
"locale": "uk",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,106 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:28:22.314Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:51.949Z",
"locale": "vi",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 892,
"workflow": 1
}

View File

@@ -1,11 +1,110 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:08:28.139Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.next",
"common.none",
"cron.quickCreate.defaultName",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.thinking",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.unknown",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:29.270Z",
"locale": "zh-CN",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 888,
"workflow": 1
}

View File

@@ -1,11 +1,107 @@
{
"fallbackKeys": [],
"generatedAt": "2026-04-29T19:24:31.857Z",
"fallbackKeys": [
"chat.commandPaletteTitle",
"chat.dismissUpdateBanner",
"chat.docsOpensInNewTab",
"chat.gatewayStatus",
"chat.openCommandPalette",
"chat.runningVersion",
"chat.settings",
"chat.updateAvailable",
"chat.updateNow",
"chat.updating",
"common.back",
"common.colorMode",
"common.colorModeOption",
"common.copied",
"common.copyCode",
"common.create",
"common.dark",
"common.delete",
"common.dismiss",
"common.none",
"cron.quickCreate.defaultName",
"cron.quickCreate.delivery.isolated.description",
"cron.quickCreate.delivery.isolated.label",
"cron.quickCreate.delivery.notify.description",
"cron.quickCreate.delivery.notify.label",
"cron.quickCreate.delivery.silent.description",
"cron.quickCreate.delivery.silent.label",
"cron.quickCreate.howHeading",
"cron.quickCreate.howHint",
"cron.quickCreate.nameOptional",
"cron.quickCreate.namePlaceholder",
"cron.quickCreate.promptPlaceholder",
"cron.quickCreate.schedules.everyEvening.description",
"cron.quickCreate.schedules.everyEvening.label",
"cron.quickCreate.schedules.everyMorning.description",
"cron.quickCreate.schedules.everyMorning.label",
"cron.quickCreate.schedules.hourly.description",
"cron.quickCreate.schedules.hourly.label",
"cron.quickCreate.schedules.once.description",
"cron.quickCreate.schedules.once.label",
"cron.quickCreate.schedules.weekdays.description",
"cron.quickCreate.schedules.weekdays.label",
"cron.quickCreate.schedules.weekly.description",
"cron.quickCreate.schedules.weekly.label",
"cron.quickCreate.steps.how",
"cron.quickCreate.steps.what",
"cron.quickCreate.steps.when",
"cron.quickCreate.title",
"cron.quickCreate.whatHeading",
"cron.quickCreate.whatHint",
"cron.quickCreate.whenHeading",
"cron.quickCreate.whenHint",
"sessionsView.autoThreshold",
"sessionsView.branchFromCheckpoint",
"sessionsView.checkpoint",
"sessionsView.checkpoints",
"sessionsView.compaction",
"sessionsView.customOption",
"sessionsView.defaultOption",
"sessionsView.deleteSelected",
"sessionsView.fast",
"sessionsView.full",
"sessionsView.global",
"sessionsView.hideCheckpoints",
"sessionsView.inherit",
"sessionsView.key",
"sessionsView.kind",
"sessionsView.label",
"sessionsView.limit",
"sessionsView.loadingCheckpoints",
"sessionsView.manual",
"sessionsView.minutesPlaceholder",
"sessionsView.noCheckpoints",
"sessionsView.noSessions",
"sessionsView.noSummary",
"sessionsView.offExplicit",
"sessionsView.on",
"sessionsView.optionalPlaceholder",
"sessionsView.overflowRetry",
"sessionsView.reasoning",
"sessionsView.restoreCheckpoint",
"sessionsView.searchPlaceholder",
"sessionsView.selectAllOnPage",
"sessionsView.selected",
"sessionsView.selectSession",
"sessionsView.showCheckpoints",
"sessionsView.store",
"sessionsView.stream",
"sessionsView.subtitle",
"sessionsView.timeoutRetry",
"sessionsView.tokenDeltaUnavailable",
"sessionsView.tokenRange",
"sessionsView.tokensBefore",
"sessionsView.updated",
"sessionsView.verbose"
],
"generatedAt": "2026-04-29T19:56:30.746Z",
"locale": "zh-TW",
"model": "gpt-5.5",
"provider": "openai",
"sourceHash": "a6a1060fe4eda88e0261e78c7c635df6e579a56cc539595a331da79dc7ca832b",
"totalKeys": 881,
"translatedKeys": 881,
"sourceHash": "c7d0317c304e6a9d3505e9058a0a0aeb2a3a0eb1fc45d31d12b2602be4cbddcf",
"totalKeys": 986,
"translatedKeys": 891,
"workflow": 1
}

View File

@@ -21,15 +21,27 @@ export const ar: TranslationMap = {
call: "اتصال",
confirm: "تأكيد",
cancel: "إلغاء",
next: "التالي",
back: "Back",
create: "Create",
copy: "نسخ",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "إلغاء التحديد",
enabled: "مفعّل",
disabled: "معطّل",
none: "none",
na: "غير متوفر",
never: "أبدًا",
configured: "مهيأ",
running: "قيد التشغيل",
linked: "مرتبط",
mode: "الوضع",
system: "النظام",
light: "خفيف",
dark: "Dark",
baseUrl: "عنوان URL الأساسي",
lastStart: "آخر بدء",
lastProbe: "آخر فحص",
@@ -49,6 +61,8 @@ export const ar: TranslationMap = {
version: "الإصدار",
docs: "المستندات",
theme: "السمة",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "الموارد",
search: "بحث",
save: "حفظ",
@@ -139,6 +153,57 @@ export const ar: TranslationMap = {
lastInput: "آخر إدخال {time}",
reason: "السبب {reason}",
},
sessionsView: {
title: "الجلسات",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "نشط",
limit: "Limit",
global: "Global",
unknown: "غير معروف",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "الرموز",
compaction: "Compaction",
thinking: "التفكير",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "متوقف",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "لا توجد وكلاء",
copyId: "نسخ المعرّف",
@@ -823,6 +888,7 @@ export const ar: TranslationMap = {
chat: {
disconnected: "تم قطع الاتصال بـ Gateway.",
refreshTitle: "تحديث بيانات الدردشة",
settings: "Chat settings",
thinkingToggle: "تبديل مخرجات تفكير/عمل المساعد",
toolCallsToggle: "تبديل استدعاءات الأدوات ونتائج الأدوات",
focusToggle: "تبديل وضع التركيز (إخفاء الشريط الجانبي + رأس الصفحة)",
@@ -830,6 +896,15 @@ export const ar: TranslationMap = {
showCronSessions: "إظهار جلسات cron",
showCronSessionsHidden: "إظهار جلسات cron ({count} مخفية)",
onboardingDisabled: "معطل أثناء الإعداد",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English (الإنجليزية)",
@@ -853,6 +928,64 @@ export const ar: TranslationMap = {
fa: "فارسی (الفارسية)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "الأتمتة",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "مفعّل",
yes: "نعم",

View File

@@ -16,20 +16,32 @@ export const de: TranslationMap = {
connected: "Verbunden",
refresh: "Aktualisieren",
reload: "Neu laden",
reset: "Reset",
reset: "Zurücksetzen",
probe: "Prüfen",
call: "Anrufen",
confirm: "Bestätigen",
cancel: "Abbrechen",
next: "Nächste",
back: "Back",
create: "Create",
copy: "Kopieren",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Auswahl aufheben",
enabled: "Aktiviert",
disabled: "Deaktiviert",
none: "none",
na: "k. A.",
never: "never",
configured: "Konfiguriert",
running: "Wird ausgeführt",
linked: "Verknüpft",
mode: "Modus",
system: "System",
light: "Leicht",
dark: "Dark",
baseUrl: "Basis-URL",
lastStart: "Letzter Start",
lastProbe: "Letzte Prüfung",
@@ -49,6 +61,8 @@ export const de: TranslationMap = {
version: "Version",
docs: "Dokumentation",
theme: "Design",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Ressourcen",
search: "Suchen",
save: "Speichern",
@@ -143,6 +157,57 @@ export const de: TranslationMap = {
lastInput: "Letzte Eingabe {time}",
reason: "Grund {reason}",
},
sessionsView: {
title: "Sitzungen",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Aktiv",
limit: "Limit",
global: "Global",
unknown: "Unbekannt",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokens",
compaction: "Compaction",
thinking: "Denken",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "aus",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -155,7 +220,7 @@ export const de: TranslationMap = {
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
files: "Dateien",
tools: "Tools",
skills: "Skills",
channels: "Channels",
@@ -191,7 +256,7 @@ export const de: TranslationMap = {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
nextWake: "Nächstes Aufwachen",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -239,7 +304,7 @@ export const de: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Ausführen",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -249,7 +314,7 @@ export const de: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Ereignisprotokoll",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -265,7 +330,7 @@ export const de: TranslationMap = {
labels: {
host: "Host",
agent: "Agent",
session: "Session",
session: "Sitzung",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -298,7 +363,7 @@ export const de: TranslationMap = {
sessions: "Sitzungen",
usage: "Nutzung",
cron: "Cron-Aufgaben",
skills: "Fähigkeiten",
skills: "Skills",
nodes: "Geräte",
chat: "Chat",
config: "Konfiguration",
@@ -349,7 +414,7 @@ export const de: TranslationMap = {
toggleTokenVisibility: "Token-Sichtbarkeit umschalten",
showPassword: "Passwort anzeigen",
hidePassword: "Passwort ausblenden",
togglePasswordVisibility: "Passwort-Sichtbarkeit umschalten",
togglePasswordVisibility: "Sichtbarkeit des Passworts umschalten",
},
snapshot: {
title: "Aufnahme",
@@ -829,7 +894,7 @@ export const de: TranslationMap = {
passwordPlaceholder: "optional",
showToken: "Token anzeigen",
hideToken: "Token ausblenden",
toggleTokenVisibility: "Sichtbarkeit des Tokens umschalten",
toggleTokenVisibility: "Token-Sichtbarkeit umschalten",
showPassword: "Passwort anzeigen",
hidePassword: "Passwort ausblenden",
togglePasswordVisibility: "Sichtbarkeit des Passworts umschalten",
@@ -837,6 +902,7 @@ export const de: TranslationMap = {
chat: {
disconnected: "Verbindung zum Gateway getrennt.",
refreshTitle: "Chat-Daten aktualisieren",
settings: "Chat settings",
thinkingToggle: "Ausgabe des Assistenten ein-/ausblenden",
toolCallsToggle: "Tool-Aufrufe und Tool-Ergebnisse umschalten",
focusToggle: "Fokusmodus ein-/ausschalten (Seitenleiste + Kopfzeile ausblenden)",
@@ -844,6 +910,15 @@ export const de: TranslationMap = {
showCronSessions: "Cron-Sitzungen anzeigen",
showCronSessionsHidden: "Cron-Sitzungen anzeigen ({count} ausgeblendet)",
onboardingDisabled: "Während der Einrichtung deaktiviert",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Englisch",
@@ -867,6 +942,64 @@ export const de: TranslationMap = {
fa: "فارسی (Persisch)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automatisierung",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Aktiviert",
yes: "Ja",

View File

@@ -20,15 +20,27 @@ export const en: TranslationMap = {
call: "Call",
confirm: "Confirm",
cancel: "Cancel",
next: "Next",
back: "Back",
create: "Create",
copy: "Copy",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Unselect",
enabled: "Enabled",
disabled: "Disabled",
none: "none",
na: "n/a",
never: "never",
configured: "Configured",
running: "Running",
linked: "Linked",
mode: "Mode",
system: "System",
light: "Light",
dark: "Dark",
baseUrl: "Base URL",
lastStart: "Last start",
lastProbe: "Last probe",
@@ -48,6 +60,8 @@ export const en: TranslationMap = {
version: "Version",
docs: "Docs",
theme: "Theme",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Resources",
search: "Search",
save: "Save",
@@ -138,6 +152,57 @@ export const en: TranslationMap = {
lastInput: "Last input {time}",
reason: "Reason {reason}",
},
sessionsView: {
title: "Sessions",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Active",
limit: "Limit",
global: "Global",
unknown: "Unknown",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokens",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "off",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -825,6 +890,7 @@ export const en: TranslationMap = {
chat: {
disconnected: "Disconnected from gateway.",
refreshTitle: "Refresh chat data",
settings: "Chat settings",
thinkingToggle: "Toggle assistant thinking/working output",
toolCallsToggle: "Toggle tool calls and tool results",
focusToggle: "Toggle focus mode (hide sidebar + page header)",
@@ -832,6 +898,15 @@ export const en: TranslationMap = {
showCronSessions: "Show cron sessions",
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
onboardingDisabled: "Disabled during setup",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English",
@@ -855,6 +930,64 @@ export const en: TranslationMap = {
fa: "فارسی (Persian)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automation",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Enabled",
yes: "Yes",

View File

@@ -4,7 +4,7 @@ import type { TranslationMap } from "../lib/types.ts";
export const es: TranslationMap = {
common: {
health: "Estado",
ok: "Correcto",
ok: "OK",
yes: "Sí",
no: "No",
active: "Activo",
@@ -16,20 +16,32 @@ export const es: TranslationMap = {
connected: "Conectado",
refresh: "Actualizar",
reload: "Recargar",
reset: "Reset",
reset: "Restablecer",
probe: "Probar",
call: "Llamada",
confirm: "Confirmar",
cancel: "Cancelar",
next: "Next",
back: "Back",
create: "Create",
copy: "Copiar",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Deseleccionar",
enabled: "Habilitado",
disabled: "Deshabilitado",
none: "none",
na: "n/d",
never: "never",
configured: "Configurado",
running: "En ejecución",
linked: "Vinculado",
mode: "Modo",
system: "Sistema",
light: "Ligero",
dark: "Dark",
baseUrl: "URL base",
lastStart: "Último inicio",
lastProbe: "Última prueba",
@@ -49,6 +61,8 @@ export const es: TranslationMap = {
version: "Versión",
docs: "Documentación",
theme: "Tema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Recursos",
search: "Buscar",
save: "Guardar",
@@ -140,6 +154,57 @@ export const es: TranslationMap = {
lastInput: "Última entrada {time}",
reason: "Motivo {reason}",
},
sessionsView: {
title: "Sesiones",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Activo",
limit: "Limit",
global: "Global",
unknown: "Unknown",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokens",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "apagado",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -152,8 +217,8 @@ export const es: TranslationMap = {
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
files: "Archivos",
tools: "Herramientas",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
@@ -246,7 +311,7 @@ export const es: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Registro de eventos",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -261,8 +326,8 @@ export const es: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "Agente",
session: "Sesn",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -295,7 +360,7 @@ export const es: TranslationMap = {
sessions: "Sesiones",
usage: "Uso",
cron: "Tareas Cron",
skills: "Habilidades",
skills: "Skills",
nodes: "Nodos",
chat: "Chat",
config: "Configuración",
@@ -635,7 +700,7 @@ export const es: TranslationMap = {
clear: "Borrar",
clearAll: "Borrar todo",
remove: "Quitar filtro",
all: "Todos",
all: "Todas",
days: "Días",
hours: "Horas",
session: "Sesión",
@@ -836,6 +901,7 @@ export const es: TranslationMap = {
chat: {
disconnected: "Desconectado de la puerta de enlace.",
refreshTitle: "Actualizar datos del chat",
settings: "Chat settings",
thinkingToggle: "Alternar salida de pensamiento/trabajo del asistente",
toolCallsToggle: "Alternar llamadas a herramientas y resultados de herramientas",
focusToggle: "Alternar modo de enfoque (ocultar barra lateral + cabecera)",
@@ -843,6 +909,15 @@ export const es: TranslationMap = {
showCronSessions: "Mostrar sesiones de cron",
showCronSessionsHidden: "Mostrar sesiones de cron ({count} ocultas)",
onboardingDisabled: "Deshabilitado durante el inicio guiado",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Inglés (English)",
@@ -866,6 +941,64 @@ export const es: TranslationMap = {
fa: "فارسی (persa)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automatización",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Habilitado",
yes: "Sí",
@@ -910,7 +1043,7 @@ export const es: TranslationMap = {
oldestFirst: "Más antiguas primero",
status: "Estado",
delivery: "Entrega",
clear: "Limpiar",
clear: "Borrar",
allStatuses: "Todos los estados",
allDelivery: "Todas las entregas",
selectJobHint: "Selecciona una tarea para ver su historial de ejecuciones.",

View File

@@ -21,15 +21,27 @@ export const fa: TranslationMap = {
call: "فراخوانی",
confirm: "تأیید",
cancel: "لغو",
next: "بعدی",
back: "Back",
create: "Create",
copy: "کپی",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "لغو انتخاب",
enabled: "فعال",
disabled: "غیرفعال",
none: "none",
na: "n/a",
never: "هرگز",
configured: "پیکربندی‌شده",
running: "در حال اجرا",
linked: "پیوندشده",
mode: "حالت",
system: "سیستم",
light: "سبک",
dark: "Dark",
baseUrl: "URL پایه",
lastStart: "آخرین شروع",
lastProbe: "آخرین بررسی",
@@ -49,6 +61,8 @@ export const fa: TranslationMap = {
version: "نسخه",
docs: "مستندات",
theme: "پوسته",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "منابع",
search: "جستجو",
save: "ذخیره",
@@ -141,6 +155,57 @@ export const fa: TranslationMap = {
lastInput: "آخرین ورودی {time}",
reason: "دلیل {reason}",
},
sessionsView: {
title: "نشست‌ها",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "فعال",
limit: "Limit",
global: "Global",
unknown: "نامشخص",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "توکن‌ها",
compaction: "Compaction",
thinking: "تفکر",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "خاموش",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "هیچ عاملی وجود ندارد",
copyId: "کپی شناسه",
@@ -832,6 +897,7 @@ export const fa: TranslationMap = {
chat: {
disconnected: "اتصال از Gateway قطع شد.",
refreshTitle: "تازه‌سازی داده‌های چت",
settings: "Chat settings",
thinkingToggle: "تغییر وضعیت خروجی فکر/کار دستیار",
toolCallsToggle: "تغییر وضعیت نمایش فراخوانی‌های ابزار و نتایج ابزار",
focusToggle: "تغییر وضعیت حالت تمرکز (پنهان کردن نوار کناری + سرصفحه صفحه)",
@@ -839,6 +905,15 @@ export const fa: TranslationMap = {
showCronSessions: "نمایش نشست‌های cron",
showCronSessionsHidden: "نمایش نشست‌های cron ({count} پنهان)",
onboardingDisabled: "در طول راه‌اندازی غیرفعال است",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English (انگلیسی)",
@@ -862,6 +937,64 @@ export const fa: TranslationMap = {
fa: "فارسی",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "اتوماسیون",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "فعال",
yes: "بله",

View File

@@ -16,20 +16,32 @@ export const fr: TranslationMap = {
connected: "Connecté",
refresh: "Actualiser",
reload: "Recharger",
reset: "Reset",
reset: "Réinitialiser",
probe: "Sonder",
call: "Appeler",
confirm: "Confirmer",
cancel: "Annuler",
next: "Prochaine",
back: "Back",
create: "Create",
copy: "Copier",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Désélectionner",
enabled: "Activé",
disabled: "Désactivé",
none: "none",
na: "n/d",
never: "never",
configured: "Configuré",
running: "En cours dexécution",
linked: "Lié",
mode: "Mode",
system: "Système",
light: "Léger",
dark: "Dark",
baseUrl: "URL de base",
lastStart: "Dernier démarrage",
lastProbe: "Dernière sonde",
@@ -49,6 +61,8 @@ export const fr: TranslationMap = {
version: "Version",
docs: "Documentation",
theme: "Thème",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Ressources",
search: "Rechercher",
save: "Enregistrer",
@@ -142,6 +156,57 @@ export const fr: TranslationMap = {
lastInput: "Dernière entrée {time}",
reason: "Raison {reason}",
},
sessionsView: {
title: "Sessions",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Actif",
limit: "Limit",
global: "Global",
unknown: "Inconnu",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Jetons",
compaction: "Compaction",
thinking: "Réflexion",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "désactivé",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -153,12 +218,12 @@ export const fr: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "Aperçu",
files: "Fichiers",
tools: "Outils",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "Canaux",
cronJobs: "Tâches cron",
},
context: {
title: "Agent Context",
@@ -174,7 +239,7 @@ export const fr: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "Canaux",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -189,8 +254,8 @@ export const fr: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "Tâches",
nextWake: "Prochain réveil",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -229,8 +294,8 @@ export const fr: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "Statut",
health: "Santé",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -238,7 +303,7 @@ export const fr: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Exécuter",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -248,7 +313,7 @@ export const fr: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Journal des événements",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -458,12 +523,12 @@ export const fr: TranslationMap = {
placeholder: "Saisissez une commande…",
noResults: "Aucun résultat",
categories: {
search: "Recherche",
search: "Rechercher",
navigation: "Navigation",
skills: "Skills",
},
items: {
overview: "Vue densemble",
overview: "Aperçu",
sessions: "Sessions",
scheduled: "Planifié",
skills: "Skills",
@@ -516,7 +581,7 @@ export const fr: TranslationMap = {
reset: "Réinitialiser",
clearGrounded: "Effacer les éléments ancrés",
repairCache: "Réparer le cache des rêves",
working: "En cours…",
working: "Traitement…",
},
phase: {
light: "Léger",
@@ -746,7 +811,7 @@ export const fr: TranslationMap = {
shown: "{count} affichées",
total: "{count} au total",
avg: "moy.",
all: "Toutes",
all: "Tous",
recent: "Consultées récemment",
recentShort: "Récentes",
sort: "Trier",
@@ -830,14 +895,15 @@ export const fr: TranslationMap = {
passwordPlaceholder: "facultatif",
showToken: "Afficher le jeton",
hideToken: "Masquer le jeton",
toggleTokenVisibility: "Afficher/masquer la visibilité du jeton",
toggleTokenVisibility: "Basculer la visibilité du jeton",
showPassword: "Afficher le mot de passe",
hidePassword: "Masquer le mot de passe",
togglePasswordVisibility: "Afficher/masquer la visibilité du mot de passe",
togglePasswordVisibility: "Basculer la visibilité du mot de passe",
},
chat: {
disconnected: "Déconnecté du Gateway.",
refreshTitle: "Actualiser les données du chat",
settings: "Chat settings",
thinkingToggle: "Afficher/masquer la sortie de réflexion/travail de lassistant",
toolCallsToggle: "Afficher/masquer les appels doutil et les résultats doutil",
focusToggle: "Activer/désactiver le mode focus (masquer la barre latérale + len-tête de page)",
@@ -845,6 +911,15 @@ export const fr: TranslationMap = {
showCronSessions: "Afficher les sessions cron",
showCronSessionsHidden: "Afficher les sessions cron ({count} masquées)",
onboardingDisabled: "Désactivé pendant la configuration",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Anglais",
@@ -868,6 +943,64 @@ export const fr: TranslationMap = {
fa: "فارسی (persan)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automatisation",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Activé",
yes: "Oui",
@@ -886,7 +1019,7 @@ export const fr: TranslationMap = {
enabled: "Activé",
schedule: "Planification",
lastRun: "Dernière exécution",
all: "Toutes",
all: "Tous",
sort: "Trier",
nextRun: "Prochaine exécution",
recentlyUpdated: "Récemment mises à jour",

View File

@@ -16,20 +16,32 @@ export const id: TranslationMap = {
connected: "Terhubung",
refresh: "Muat ulang",
reload: "Muat ulang",
reset: "Reset",
reset: "Atur Ulang",
probe: "Probe",
call: "Panggil",
confirm: "Konfirmasi",
cancel: "Batal",
next: "Berikutnya",
back: "Back",
create: "Create",
copy: "Salin",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Batalkan pilihan",
enabled: "Diaktifkan",
disabled: "Dinonaktifkan",
none: "none",
na: "t/a",
never: "never",
configured: "Dikonfigurasi",
running: "Berjalan",
linked: "Ditautkan",
mode: "Mode",
system: "Sistem",
light: "Ringan",
dark: "Dark",
baseUrl: "URL Dasar",
lastStart: "Terakhir dimulai",
lastProbe: "Probe terakhir",
@@ -49,6 +61,8 @@ export const id: TranslationMap = {
version: "Versi",
docs: "Dokumen",
theme: "Tema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Sumber daya",
search: "Cari",
save: "Simpan",
@@ -60,7 +74,7 @@ export const id: TranslationMap = {
hideAdvanced: "Sembunyikan Lanjutan",
unsavedChanges: "Anda memiliki perubahan yang belum disimpan",
secondsAgo: "{count} dtk lalu",
working: "Memproses…",
working: "Sedang bekerja…",
showQr: "Tampilkan QR",
relink: "Tautkan ulang",
waitForScan: "Tunggu pemindaian",
@@ -140,6 +154,57 @@ export const id: TranslationMap = {
lastInput: "Input terakhir {time}",
reason: "Alasan {reason}",
},
sessionsView: {
title: "Sesi",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Aktif",
limit: "Limit",
global: "Global",
unknown: "Tidak diketahui",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Token",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "nonaktif",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -151,12 +216,12 @@ export const id: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "Ikhtisar",
files: "File",
tools: "Alat",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "Saluran",
cronJobs: "Tugas Cron",
},
context: {
title: "Agent Context",
@@ -172,7 +237,7 @@ export const id: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "Saluran",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -187,8 +252,8 @@ export const id: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "Tugas",
nextWake: "Bangun berikutnya",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -228,7 +293,7 @@ export const id: TranslationMap = {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
health: "Kesehatan",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -236,7 +301,7 @@ export const id: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Jalankan",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -246,7 +311,7 @@ export const id: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Log Peristiwa",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -261,8 +326,8 @@ export const id: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "Agen",
session: "Sesi",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -486,7 +551,7 @@ export const id: TranslationMap = {
advanced: "Lanjutan",
},
header: {
refresh: "Segarkan",
refresh: "Muat ulang",
refreshing: "Menyegarkan…",
on: "Dreaming Aktif",
off: "Dreaming Nonaktif",
@@ -509,7 +574,7 @@ export const id: TranslationMap = {
scene: {
backfill: "Isi ulang",
dedupeDiary: "Buku Harian Dedupe",
reset: "Setel ulang",
reset: "Atur Ulang",
clearGrounded: "Hapus yang Ditahankan",
repairCache: "Perbaiki Cache Mimpi",
working: "Sedang bekerja…",
@@ -765,7 +830,7 @@ export const id: TranslationMap = {
noTimeline: "Tidak ada data linimasa",
noDataInRange: "Tidak ada data dalam rentang",
usageOverTime: "Penggunaan dari Waktu ke Waktu",
reset: "Reset",
reset: "Atur Ulang",
perTurn: "Per Giliran",
cumulative: "Kumulatif",
turnRange: "Giliran {start}{end} dari {total}",
@@ -831,6 +896,7 @@ export const id: TranslationMap = {
chat: {
disconnected: "Terputus dari gateway.",
refreshTitle: "Refresh data chat",
settings: "Chat settings",
thinkingToggle: "Alihkan output berpikir/bekerja asisten",
toolCallsToggle: "Alihkan panggilan alat dan hasil alat",
focusToggle: "Alihkan mode fokus (sembunyikan bilah samping + header halaman)",
@@ -838,6 +904,15 @@ export const id: TranslationMap = {
showCronSessions: "Tampilkan sesi cron",
showCronSessionsHidden: "Tampilkan sesi cron ({count} disembunyikan)",
onboardingDisabled: "Dinonaktifkan selama penyiapan",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Inggris",
@@ -861,6 +936,64 @@ export const id: TranslationMap = {
fa: "فارسی (Persia)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Otomatisasi",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Diaktifkan",
yes: "Ya",
@@ -1046,7 +1179,7 @@ export const id: TranslationMap = {
},
runEntry: {
noSummary: "Tidak ada ringkasan.",
runAt: "Dijalankan pada",
runAt: "Jalankan pada",
openRunChat: "Buka chat proses",
next: "Berikutnya {rel}",
due: "Jatuh tempo {rel}",

View File

@@ -21,15 +21,27 @@ export const it: TranslationMap = {
call: "Chiama",
confirm: "Conferma",
cancel: "Annulla",
next: "Prossimo",
back: "Back",
create: "Create",
copy: "Copia",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Deseleziona",
enabled: "Abilitato",
disabled: "Disabilitato",
none: "none",
na: "n/d",
never: "mai",
configured: "Configurato",
running: "In esecuzione",
linked: "Collegato",
mode: "Modalità",
system: "Sistema",
light: "Leggera",
dark: "Dark",
baseUrl: "URL di base",
lastStart: "Ultimo avvio",
lastProbe: "Ultimo probe",
@@ -49,6 +61,8 @@ export const it: TranslationMap = {
version: "Versione",
docs: "Docs",
theme: "Tema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Risorse",
search: "Cerca",
save: "Salva",
@@ -140,6 +154,57 @@ export const it: TranslationMap = {
lastInput: "Ultimo input {time}",
reason: "Motivo {reason}",
},
sessionsView: {
title: "Sessioni",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Attivo",
limit: "Limit",
global: "Global",
unknown: "Sconosciuto",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Token",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "off",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "Nessun agente",
copyId: "Copia ID",
@@ -836,6 +901,7 @@ export const it: TranslationMap = {
chat: {
disconnected: "Disconnesso dal gateway.",
refreshTitle: "Aggiorna dati chat",
settings: "Chat settings",
thinkingToggle: "Attiva/disattiva output di pensiero/elaborazione dell'assistente",
toolCallsToggle: "Attiva/disattiva chiamate agli strumenti e risultati strumenti",
focusToggle: "Attiva/disattiva modalità focus (nascondi barra laterale + intestazione pagina)",
@@ -843,6 +909,15 @@ export const it: TranslationMap = {
showCronSessions: "Mostra sessioni cron",
showCronSessionsHidden: "Mostra sessioni cron ({count} nascoste)",
onboardingDisabled: "Disabilitato durante la configurazione",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English (Inglese)",
@@ -866,6 +941,64 @@ export const it: TranslationMap = {
fa: "فارسی (Persiano)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automazione",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Abilitato",
yes: "Sì",

View File

@@ -16,20 +16,32 @@ export const ja_JP: TranslationMap = {
connected: "接続済み",
refresh: "更新",
reload: "再読み込み",
reset: "Reset",
reset: "リセット",
probe: "プローブ",
call: "通話",
confirm: "確認",
cancel: "キャンセル",
next: "次回",
back: "Back",
create: "Create",
copy: "コピー",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "選択解除",
enabled: "有効",
disabled: "無効",
none: "none",
na: "n/a",
never: "never",
configured: "設定済み",
running: "実行中",
linked: "リンク済み",
mode: "モード",
system: "システム",
light: "浅い",
dark: "Dark",
baseUrl: "ベース URL",
lastStart: "前回の起動",
lastProbe: "前回のプローブ",
@@ -49,6 +61,8 @@ export const ja_JP: TranslationMap = {
version: "バージョン",
docs: "ドキュメント",
theme: "テーマ",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "リソース",
search: "検索",
save: "保存",
@@ -91,7 +105,7 @@ export const ja_JP: TranslationMap = {
name: "名前",
displayName: "表示名",
about: "概要",
advanced: "詳細設定",
advanced: "詳細",
profilePicturePreview: "プロフィール画像のプレビュー",
account: "アカウント",
username: "ユーザー名",
@@ -143,6 +157,57 @@ export const ja_JP: TranslationMap = {
lastInput: "最後の入力 {time}",
reason: "理由 {reason}",
},
sessionsView: {
title: "セッション",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "有効",
limit: "Limit",
global: "Global",
unknown: "不明",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "トークン",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "オフ",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -154,12 +219,12 @@ export const ja_JP: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "概要",
files: "ファイル",
tools: "ツール",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "チャンネル",
cronJobs: "Cron ジョブ",
},
context: {
title: "Agent Context",
@@ -175,7 +240,7 @@ export const ja_JP: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "チャンネル",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -190,8 +255,8 @@ export const ja_JP: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "ジョブ",
nextWake: "次回のウェイク",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -230,8 +295,8 @@ export const ja_JP: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "ステータス",
health: "健全性",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -239,7 +304,7 @@ export const ja_JP: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "実行",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -249,7 +314,7 @@ export const ja_JP: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "イベントログ",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -264,8 +329,8 @@ export const ja_JP: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "エージェント",
session: "セッション",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -278,7 +343,7 @@ export const ja_JP: TranslationMap = {
connectedSource: "接続済み: {id}",
connected: "接続済み",
channelSource: "チャネル: {id}",
channel: "チャネル",
channel: "チャネル",
builtIn: "組み込み",
},
nav: {
@@ -834,6 +899,7 @@ export const ja_JP: TranslationMap = {
chat: {
disconnected: "Gateway から切断されました。",
refreshTitle: "チャットデータを更新",
settings: "Chat settings",
thinkingToggle: "アシスタントの思考 / 作業出力の表示を切り替え",
toolCallsToggle: "ツール呼び出しとツール結果の表示を切り替え",
focusToggle: "フォーカスモードを切り替え(サイドバー + ページヘッダーを非表示)",
@@ -841,6 +907,15 @@ export const ja_JP: TranslationMap = {
showCronSessions: "Cron セッションを表示",
showCronSessionsHidden: "Cron セッションを表示({count} 件を非表示中)",
onboardingDisabled: "セットアップ中は無効",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "英語",
@@ -864,6 +939,64 @@ export const ja_JP: TranslationMap = {
fa: "فارسی(ペルシア語)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "自動化",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "有効",
yes: "はい",
@@ -944,7 +1077,7 @@ export const ja_JP: TranslationMap = {
every: "毎",
at: "時刻",
cronOption: "Cron",
runAt: "実行時",
runAt: "実行時",
unit: "単位",
minutes: "分",
hours: "時間",
@@ -997,7 +1130,7 @@ export const ja_JP: TranslationMap = {
to: "宛先",
toPlaceholder: "+1555... または chat id",
toHelp: "任意の受信者上書きですchat id、電話番号、または user id。",
advanced: "詳細設定",
advanced: "詳細",
advancedHelp: "配信保証、スケジュールのジッター、モデル制御の任意の上書き設定。",
deleteAfterRun: "実行後に削除",
deleteAfterRunHelp: "自動でクリーンアップしたい単発のリマインダーに最適です。",

View File

@@ -16,20 +16,32 @@ export const ko: TranslationMap = {
connected: "연결됨",
refresh: "새로고침",
reload: "다시 로드",
reset: "Reset",
reset: "재설정",
probe: "프로브",
call: "호출",
confirm: "확인",
cancel: "취소",
next: "다음",
back: "Back",
create: "Create",
copy: "복사",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "선택 해제",
enabled: "사용",
disabled: "사용 안 함",
none: "none",
na: "해당 없음",
never: "never",
configured: "구성됨",
running: "실행 중",
linked: "연결됨",
mode: "모드",
system: "시스템",
light: "얕음",
dark: "Dark",
baseUrl: "기본 URL",
lastStart: "마지막 시작",
lastProbe: "마지막 프로브",
@@ -49,6 +61,8 @@ export const ko: TranslationMap = {
version: "버전",
docs: "문서",
theme: "테마",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "리소스",
search: "검색",
save: "저장",
@@ -139,6 +153,57 @@ export const ko: TranslationMap = {
lastInput: "마지막 입력 {time}",
reason: "사유 {reason}",
},
sessionsView: {
title: "세션",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "활성",
limit: "Limit",
global: "Global",
unknown: "알 수 없음",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "토큰",
compaction: "Compaction",
thinking: "생각 수준",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "꺼짐",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -150,12 +215,12 @@ export const ko: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "개요",
files: "파일",
tools: "도구",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "채널",
cronJobs: "Cron 작업",
},
context: {
title: "Agent Context",
@@ -171,7 +236,7 @@ export const ko: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "채널",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -186,8 +251,8 @@ export const ko: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "작업",
nextWake: "다음 실행",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -226,8 +291,8 @@ export const ko: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "상태",
health: "상태",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -235,7 +300,7 @@ export const ko: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "실행",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -245,7 +310,7 @@ export const ko: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "이벤트 로그",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -260,8 +325,8 @@ export const ko: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "에이전트",
session: "세션",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -485,7 +550,7 @@ export const ko: TranslationMap = {
advanced: "고급",
},
header: {
refresh: "새로 고침",
refresh: "새로고침",
refreshing: "새로 고치는 중…",
on: "드리밍 켜짐",
off: "드리밍 꺼짐",
@@ -827,6 +892,7 @@ export const ko: TranslationMap = {
chat: {
disconnected: "Gateway와 연결이 끊어졌습니다.",
refreshTitle: "채팅 데이터 새로고침",
settings: "Chat settings",
thinkingToggle: "어시스턴트 생각/작업 출력 전환",
toolCallsToggle: "도구 호출 및 도구 결과 전환",
focusToggle: "집중 모드 전환(사이드바 + 페이지 헤더 숨기기)",
@@ -834,6 +900,15 @@ export const ko: TranslationMap = {
showCronSessions: "Cron 세션 표시",
showCronSessionsHidden: "Cron 세션 표시({count}개 숨김)",
onboardingDisabled: "설정 중에는 비활성화됨",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "영어",
@@ -857,6 +932,64 @@ export const ko: TranslationMap = {
fa: "فارسی (페르시아어)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "자동화",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "사용",
yes: "예",
@@ -937,7 +1070,7 @@ export const ko: TranslationMap = {
every: "매",
at: "시간",
cronOption: "Cron",
runAt: "실행 시",
runAt: "실행 시",
unit: "단위",
minutes: "분",
hours: "시간",

View File

@@ -21,15 +21,27 @@ export const nl: TranslationMap = {
call: "Aanroepen",
confirm: "Bevestigen",
cancel: "Annuleren",
next: "Volgende",
back: "Back",
create: "Create",
copy: "Kopiëren",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Deselecteren",
enabled: "Ingeschakeld",
disabled: "Uitgeschakeld",
none: "none",
na: "n.v.t.",
never: "nooit",
configured: "Geconfigureerd",
running: "Actief",
linked: "Gekoppeld",
mode: "Modus",
system: "Systeem",
light: "Licht",
dark: "Dark",
baseUrl: "Basis-URL",
lastStart: "Laatste start",
lastProbe: "Laatste probe",
@@ -49,6 +61,8 @@ export const nl: TranslationMap = {
version: "Versie",
docs: "Docs",
theme: "Thema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Bronnen",
search: "Zoeken",
save: "Opslaan",
@@ -142,6 +156,57 @@ export const nl: TranslationMap = {
lastInput: "Laatste invoer {time}",
reason: "Reden {reason}",
},
sessionsView: {
title: "Sessies",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Actief",
limit: "Limit",
global: "Global",
unknown: "Onbekend",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokens",
compaction: "Compaction",
thinking: "Denken",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "uit",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "Geen agents",
copyId: "ID kopiëren",
@@ -834,6 +899,7 @@ export const nl: TranslationMap = {
chat: {
disconnected: "Verbinding met Gateway verbroken.",
refreshTitle: "Chatgegevens vernieuwen",
settings: "Chat settings",
thinkingToggle: "Denken-/werken-output van assistent schakelen",
toolCallsToggle: "Tool-aanroepen en toolresultaten schakelen",
focusToggle: "Focusmodus schakelen (zijbalk + paginakop verbergen)",
@@ -841,6 +907,15 @@ export const nl: TranslationMap = {
showCronSessions: "Cron-sessies weergeven",
showCronSessionsHidden: "Cron-sessies weergeven ({count} verborgen)",
onboardingDisabled: "Uitgeschakeld tijdens configuratie",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English (Engels)",
@@ -864,6 +939,64 @@ export const nl: TranslationMap = {
fa: "فارسی (Perzisch)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automatisering",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Ingeschakeld",
yes: "Ja",

View File

@@ -16,20 +16,32 @@ export const pl: TranslationMap = {
connected: "Połączono",
refresh: "Odśwież",
reload: "Przeładuj",
reset: "Reset",
reset: "Resetuj",
probe: "Sprawdź",
call: "Połączenie",
confirm: "Potwierdź",
cancel: "Anuluj",
next: "Następne",
back: "Back",
create: "Create",
copy: "Kopiuj",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Odznacz",
enabled: "Włączone",
disabled: "Wyłączone",
none: "none",
na: "n/d",
never: "never",
configured: "Skonfigurowano",
running: "Uruchomiono",
linked: "Połączono",
mode: "Tryb",
system: "System",
light: "Lekki",
dark: "Dark",
baseUrl: "Bazowy URL",
lastStart: "Ostatnie uruchomienie",
lastProbe: "Ostatnie sprawdzenie",
@@ -49,6 +61,8 @@ export const pl: TranslationMap = {
version: "Wersja",
docs: "Dokumentacja",
theme: "Motyw",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Zasoby",
search: "Szukaj",
save: "Zapisz",
@@ -87,7 +101,7 @@ export const pl: TranslationMap = {
profilePicture: "Zdjęcie profilowe",
noProfile: "Nie ustawiono profilu.",
noProfileHint: "Kliknij „Edytuj profil”, aby dodać swoje imię, bio i awatar.",
name: "Imię",
name: "Nazwa",
displayName: "Nazwa wyświetlana",
about: "O mnie",
advanced: "Zaawansowane",
@@ -141,6 +155,57 @@ export const pl: TranslationMap = {
lastInput: "Ostatnie wejście {time}",
reason: "Powód {reason}",
},
sessionsView: {
title: "Sesje",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Aktywny",
limit: "Limit",
global: "Global",
unknown: "Nieznane",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokeny",
compaction: "Compaction",
thinking: "Myślenie",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "wył.",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -152,12 +217,12 @@ export const pl: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "Przegląd",
files: "Pliki",
tools: "Narzędzia",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "Kanały",
cronJobs: "Zadania Cron",
},
context: {
title: "Agent Context",
@@ -173,7 +238,7 @@ export const pl: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "Kanały",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -188,8 +253,8 @@ export const pl: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "Zadania",
nextWake: "Następne wybudzenie",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -229,7 +294,7 @@ export const pl: TranslationMap = {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
health: "Stan",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -237,7 +302,7 @@ export const pl: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Uruchom",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -247,7 +312,7 @@ export const pl: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Dziennik zdarzeń",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -263,7 +328,7 @@ export const pl: TranslationMap = {
labels: {
host: "Host",
agent: "Agent",
session: "Session",
session: "Sesja",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -514,7 +579,7 @@ export const pl: TranslationMap = {
reset: "Resetuj",
clearGrounded: "Wyczyść uziemione",
repairCache: "Napraw pamięć podręczną snów",
working: "Przetwarzanie…",
working: "Praca…",
},
phase: {
light: "Lekki",
@@ -836,6 +901,7 @@ export const pl: TranslationMap = {
chat: {
disconnected: "Rozłączono z Gateway.",
refreshTitle: "Odśwież dane czatu",
settings: "Chat settings",
thinkingToggle: "Przełącz wyświetlanie myślenia/pracy asystenta",
toolCallsToggle: "Przełącz wyświetlanie wywołań narzędzi i wyników narzędzi",
focusToggle: "Przełącz tryb skupienia (ukryj pasek boczny i nagłówek strony)",
@@ -843,6 +909,15 @@ export const pl: TranslationMap = {
showCronSessions: "Pokaż sesje Cron",
showCronSessionsHidden: "Pokaż sesje Cron ({count} ukrytych)",
onboardingDisabled: "Wyłączone podczas konfiguracji",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Angielski (English)",
@@ -866,6 +941,64 @@ export const pl: TranslationMap = {
fa: "فارسی (perski)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automatyzacja",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Włączone",
yes: "Tak",
@@ -909,7 +1042,7 @@ export const pl: TranslationMap = {
newestFirst: "Od najnowszych",
oldestFirst: "Od najstarszych",
status: "Status",
delivery: "Dostarczenie",
delivery: "Dostarczanie",
clear: "Wyczyść",
allStatuses: "Wszystkie statusy",
allDelivery: "Wszystkie stany dostarczenia",
@@ -919,7 +1052,7 @@ export const pl: TranslationMap = {
runStatusOk: "OK",
runStatusError: "Błąd",
runStatusSkipped: "Pominięto",
runStatusUnknown: "Nieznany",
runStatusUnknown: "Nieznane",
deliveryDelivered: "Dostarczono",
deliveryNotDelivered: "Nie dostarczono",
deliveryUnknown: "Nieznane",

View File

@@ -16,20 +16,32 @@ export const pt_BR: TranslationMap = {
connected: "Conectado",
refresh: "Atualizar",
reload: "Recarregar",
reset: "Reset",
reset: "Redefinir",
probe: "Sondar",
call: "Ligar",
confirm: "Confirmar",
cancel: "Cancelar",
next: "Próxima",
back: "Back",
create: "Create",
copy: "Copiar",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Desmarcar",
enabled: "Ativado",
disabled: "Desativado",
none: "none",
na: "n/d",
never: "never",
configured: "Configurado",
running: "Em execução",
linked: "Vinculado",
mode: "Modo",
system: "Sistema",
light: "Leve",
dark: "Dark",
baseUrl: "URL base",
lastStart: "Última inicialização",
lastProbe: "Última sondagem",
@@ -49,6 +61,8 @@ export const pt_BR: TranslationMap = {
version: "Versão",
docs: "Documentação",
theme: "Tema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Recursos",
search: "Pesquisar",
save: "Salvar",
@@ -140,6 +154,57 @@ export const pt_BR: TranslationMap = {
lastInput: "Última entrada {time}",
reason: "Motivo {reason}",
},
sessionsView: {
title: "Sessões",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Ativo",
limit: "Limit",
global: "Global",
unknown: "Desconhecido",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokens",
compaction: "Compaction",
thinking: "Pensamento",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "desligado",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -152,8 +217,8 @@ export const pt_BR: TranslationMap = {
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
files: "Arquivos",
tools: "Ferramentas",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
@@ -187,8 +252,8 @@ export const pt_BR: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "Tarefas",
nextWake: "Próxima ativação",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -236,7 +301,7 @@ export const pt_BR: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Executar",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -261,8 +326,8 @@ export const pt_BR: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "Agente",
session: "Sessão",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -295,7 +360,7 @@ export const pt_BR: TranslationMap = {
sessions: "Sessões",
usage: "Uso",
cron: "Tarefas Cron",
skills: "Habilidades",
skills: "Skills",
nodes: "Nós",
chat: "Chat",
config: "Configuração",
@@ -421,7 +486,7 @@ export const pt_BR: TranslationMap = {
},
cards: {
cost: "Custo",
skills: "Habilidades",
skills: "Skills",
recentSessions: "Sessões Recentes",
modelAuth: "Autenticação de modelo",
modelAuthOk: "{count} ok",
@@ -512,7 +577,7 @@ export const pt_BR: TranslationMap = {
reset: "Redefinir",
clearGrounded: "Limpar Grounded",
repairCache: "Reparar cache de sonhos",
working: "Trabalhando…",
working: "Processando…",
},
phase: {
light: "Leve",
@@ -632,7 +697,7 @@ export const pt_BR: TranslationMap = {
clear: "Limpar",
clearAll: "Limpar tudo",
remove: "Remover filtro",
all: "Todos",
all: "Todas",
days: "Dias",
hours: "Horas",
session: "Sessão",
@@ -833,6 +898,7 @@ export const pt_BR: TranslationMap = {
chat: {
disconnected: "Desconectado do gateway.",
refreshTitle: "Atualizar dados do chat",
settings: "Chat settings",
thinkingToggle: "Alternar saída de pensamento/trabalho do assistente",
toolCallsToggle: "Alternar chamadas de ferramenta e resultados de ferramenta",
focusToggle: "Alternar modo de foco (ocultar barra lateral + cabeçalho da página)",
@@ -840,6 +906,15 @@ export const pt_BR: TranslationMap = {
showCronSessions: "Mostrar sessões de cron",
showCronSessionsHidden: "Mostrar sessões de cron ({count} ocultas)",
onboardingDisabled: "Desativado durante a integração",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Inglês",
@@ -863,6 +938,64 @@ export const pt_BR: TranslationMap = {
fa: "فارسی (Persa)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automation",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Ativado",
yes: "Sim",

View File

@@ -16,20 +16,32 @@ export const th: TranslationMap = {
connected: "เชื่อมต่อแล้ว",
refresh: "รีเฟรช",
reload: "โหลดใหม่",
reset: "Reset",
reset: "รีเซ็ต",
probe: "ตรวจสอบ",
call: "โทร",
confirm: "ยืนยัน",
cancel: "ยกเลิก",
next: "ถัดไป",
back: "Back",
create: "Create",
copy: "คัดลอก",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "ยกเลิกการเลือก",
enabled: "เปิดใช้งาน",
disabled: "ปิดใช้งาน",
none: "none",
na: "n/a",
never: "never",
configured: "กำหนดค่าแล้ว",
running: "กำลังทำงาน",
linked: "เชื่อมโยงแล้ว",
mode: "โหมด",
system: "ระบบ",
light: "ตื้น",
dark: "Dark",
baseUrl: "Base URL",
lastStart: "เริ่มต้นล่าสุด",
lastProbe: "ตรวจสอบล่าสุด",
@@ -49,6 +61,8 @@ export const th: TranslationMap = {
version: "เวอร์ชัน",
docs: "เอกสาร",
theme: "ธีม",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "ทรัพยากร",
search: "ค้นหา",
save: "บันทึก",
@@ -138,6 +152,57 @@ export const th: TranslationMap = {
lastInput: "อินพุตล่าสุด {time}",
reason: "เหตุผล {reason}",
},
sessionsView: {
title: "เซสชัน",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "ใช้งานอยู่",
limit: "Limit",
global: "Global",
unknown: "ไม่ทราบ",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "โทเค็น",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "ปิด",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -149,12 +214,12 @@ export const th: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
overview: "ภาพรวม",
files: "ไฟล์",
tools: "Tools",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
skills: "ทักษะ",
channels: "ช่องทาง",
cronJobs: "งาน Cron",
},
context: {
title: "Agent Context",
@@ -170,7 +235,7 @@ export const th: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "ช่องทาง",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -185,8 +250,8 @@ export const th: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "งาน",
nextWake: "ปลุกครั้งถัดไป",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -225,8 +290,8 @@ export const th: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "สถานะ",
health: "สถานะ",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -234,7 +299,7 @@ export const th: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "รัน",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -244,7 +309,7 @@ export const th: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "บันทึกเหตุการณ์",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -259,8 +324,8 @@ export const th: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "เอเจนต์",
session: "เซสชัน",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -729,7 +794,7 @@ export const th: TranslationMap = {
total: "ทั้งหมด {count}",
avg: "เฉลี่ย",
all: "ทั้งหมด",
recent: "ดูล่า<EFBFBD><EFBFBD>ุด",
recent: "ดูล่าุด",
recentShort: "ล่าสุด",
sort: "เรียงลำดับ",
ascending: "น้อยไปมาก",
@@ -818,6 +883,7 @@ export const th: TranslationMap = {
chat: {
disconnected: "ตัดการเชื่อมต่อจากเกตเวย์แล้ว",
refreshTitle: "รีเฟรชข้อมูลแชต",
settings: "Chat settings",
thinkingToggle: "สลับการแสดงผลการคิด/การทำงานของผู้ช่วย",
toolCallsToggle: "สลับการแสดงการเรียกใช้ tool และผลลัพธ์ของ tool",
focusToggle: "สลับโหมดโฟกัส (ซ่อนแถบด้านข้าง + ส่วนหัวหน้า)",
@@ -825,6 +891,15 @@ export const th: TranslationMap = {
showCronSessions: "แสดงเซสชัน cron",
showCronSessionsHidden: "แสดงเซสชัน cron (ซ่อนอยู่ {count})",
onboardingDisabled: "ปิดใช้งานระหว่างการตั้งค่า",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "อังกฤษ",
@@ -848,6 +923,64 @@ export const th: TranslationMap = {
fa: "فارسی (เปอร์เซีย)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "ระบบอัตโนมัติ",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "เปิดใช้งาน",
yes: "ใช่",
@@ -987,7 +1120,7 @@ export const th: TranslationMap = {
staggerUnit: "หน่วย stagger",
staggerPlaceholder: "30",
seconds: "วินาที",
model: "โมเดล",
model: "Model",
modelPlaceholder: "openai/gpt-5.2",
modelHelp: "เริ่มพิมพ์เพื่อเลือกโมเดลที่รู้จัก หรือป้อนโมเดลแบบกำหนดเอง",
thinking: "Thinking",
@@ -1030,7 +1163,7 @@ export const th: TranslationMap = {
},
runEntry: {
noSummary: "ไม่มีสรุป",
runAt: "รันเมื่อ",
runAt: "ทำงานเมื่อ",
openRunChat: "เปิดแชตการรัน",
next: "ถัดไป {rel}",
due: "ครบกำหนด {rel}",

View File

@@ -16,20 +16,32 @@ export const tr: TranslationMap = {
connected: "Bağlandı",
refresh: "Yenile",
reload: "Yeniden yükle",
reset: "Reset",
reset: "Sıfırla",
probe: "Sına",
call: "Ara",
confirm: "Onayla",
cancel: "İptal",
next: "Sonraki",
back: "Back",
create: "Create",
copy: "Kopyala",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Seçimi kaldır",
enabled: "Etkin",
disabled: "Devre dışı",
none: "none",
na: "yok",
never: "never",
configured: "Yapılandırıldı",
running: "Çalışıyor",
linked: "Bağlandı",
mode: "Mod",
system: "Sistem",
light: "Hafif",
dark: "Dark",
baseUrl: "Temel URL",
lastStart: "Son başlatma",
lastProbe: "Son sınama",
@@ -49,6 +61,8 @@ export const tr: TranslationMap = {
version: "Sürüm",
docs: "Dokümanlar",
theme: "Tema",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Kaynaklar",
search: "Ara",
save: "Kaydet",
@@ -142,6 +156,57 @@ export const tr: TranslationMap = {
lastInput: "Son giriş {time}",
reason: "Neden {reason}",
},
sessionsView: {
title: "Oturumlar",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Etkin",
limit: "Limit",
global: "Global",
unknown: "Bilinmiyor",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Tokenlar",
compaction: "Compaction",
thinking: "Düşünme",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "kapalı",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -153,12 +218,12 @@ export const tr: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
overview: "Genel Bakış",
files: "Dosyalar",
tools: "Araçlar",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
channels: "Kanallar",
cronJobs: "Cron İşleri",
},
context: {
title: "Agent Context",
@@ -174,7 +239,7 @@ export const tr: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "Kanallar",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -189,8 +254,8 @@ export const tr: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "İşler",
nextWake: "Sonraki uyandırma",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -229,8 +294,8 @@ export const tr: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "Durum",
health: "Sağlık",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -238,7 +303,7 @@ export const tr: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Çalıştır",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -248,7 +313,7 @@ export const tr: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Olay Günlüğü",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -263,8 +328,8 @@ export const tr: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "Aracı",
session: "Oturum",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -275,7 +340,7 @@ export const tr: TranslationMap = {
},
agentTools: {
connectedSource: "Bağlı: {id}",
connected: "Bağlı",
connected: "Bağlandı",
channelSource: "Kanal: {id}",
channel: "Kanal",
builtIn: "Yerleşik",
@@ -343,7 +408,7 @@ export const tr: TranslationMap = {
language: "Dil",
connectHint: "Bağlantı değişikliklerini uygulamak için Bağlan'a tıklayın.",
trustedProxy: "Güvenilir proxy üzerinden kimlik doğrulandı.",
showToken: "Token'ı göster",
showToken: "Tokenı göster",
hideToken: "Token'ı gizle",
toggleTokenVisibility: "Token görünürlüğünü değiştir",
showPassword: "Parolayı göster",
@@ -459,7 +524,7 @@ export const tr: TranslationMap = {
placeholder: "Bir komut yazın…",
noResults: "Sonuç yok",
categories: {
search: "Arama",
search: "Ara",
navigation: "Navigation",
skills: "Skills",
},
@@ -469,7 +534,7 @@ export const tr: TranslationMap = {
scheduled: "Zamanlanmış",
skills: "Skills",
settings: "Ayarlar",
agents: "Ajanlar",
agents: "Aracılar",
shellCommand: "Shell Komutu",
debugMode: "Hata Ayıklama Modu",
},
@@ -551,7 +616,7 @@ export const tr: TranslationMap = {
},
stats: {
shortTerm: "Kısa vadeli",
grounded: "Temellendirililmiş",
grounded: "Temellendirilmiş",
signals: "Sinyaller",
promoted: "Yükseltilenler",
phaseHits: "Aşama İsabetleri",
@@ -639,7 +704,7 @@ export const tr: TranslationMap = {
remove: "Filtreyi kaldır",
all: "Tümü",
days: "Günler",
hours: "Saatler",
hours: "Saat",
session: "Oturum",
agent: "Aracı",
channel: "Kanal",
@@ -827,7 +892,7 @@ export const tr: TranslationMap = {
subtitle: "Gateway Kontrol Paneli",
passwordPlaceholder: "isteğe bağlı",
showToken: "Tokenı göster",
hideToken: "Tokenı gizle",
hideToken: "Token'ı gizle",
toggleTokenVisibility: "Token görünürlüğünü değiştir",
showPassword: "Parolayı göster",
hidePassword: "Parolayı gizle",
@@ -836,6 +901,7 @@ export const tr: TranslationMap = {
chat: {
disconnected: "Gateway bağlantısı kesildi.",
refreshTitle: "Sohbet verilerini yenile",
settings: "Chat settings",
thinkingToggle: "Asistanın düşünme/çalışma çıktısını aç/kapat",
toolCallsToggle: "Araç çağrılarını ve araç sonuçlarını aç/kapat",
focusToggle: "Odak modunu aç/kapat (kenar çubuğunu + sayfa başlığını gizle)",
@@ -843,6 +909,15 @@ export const tr: TranslationMap = {
showCronSessions: "Cron oturumlarını göster",
showCronSessionsHidden: "Cron oturumlarını göster ({count} gizli)",
onboardingDisabled: "Kurulum sırasında devre dışı",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "İngilizce",
@@ -866,6 +941,64 @@ export const tr: TranslationMap = {
fa: "فارسی (Farsça)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Otomasyon",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Etkin",
yes: "Evet",
@@ -950,7 +1083,7 @@ export const tr: TranslationMap = {
unit: "Birim",
minutes: "Dakika",
hours: "Saat",
days: "Gün",
days: "Günler",
expression: "İfade",
expressionPlaceholder: "0 7 * * *",
everyAmountPlaceholder: "30",
@@ -1069,7 +1202,7 @@ export const tr: TranslationMap = {
agentMessageRequired: "Aracı mesajı gerekli.",
timeoutInvalid: "Ayarlanırsa zaman aşımı 0 saniyeden büyük olmalıdır.",
webhookUrlRequired: "Webhook URL gerekli.",
webhookUrlInvalid: "Webhook URL http:// veya https:// ile ba<EFBFBD><EFBFBD>lamalıdır.",
webhookUrlInvalid: "Webhook URL http:// veya https:// ile başlamalıdır.",
invalidRunTime: "Geçersiz çalıştırma zamanı.",
invalidIntervalAmount: "Geçersiz aralık miktarı.",
cronExprRequiredShort: "Cron ifadesi gerekli.",

View File

@@ -16,20 +16,32 @@ export const uk: TranslationMap = {
connected: "Підключено",
refresh: "Оновити",
reload: "Перезавантажити",
reset: "Reset",
reset: "Скинути",
probe: "Перевірити",
call: "Виклик",
confirm: "Підтвердити",
cancel: "Скасувати",
next: "Наступний",
back: "Back",
create: "Create",
copy: "Копіювати",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Зняти вибір",
enabled: "Увімкнено",
disabled: "Вимкнено",
none: "none",
na: "н/д",
never: "never",
configured: "Налаштовано",
running: "Запущено",
linked: "Пов’язано",
mode: "Режим",
system: "Система",
light: "Легкий",
dark: "Dark",
baseUrl: "Базовий URL",
lastStart: "Останній запуск",
lastProbe: "Остання перевірка",
@@ -49,6 +61,8 @@ export const uk: TranslationMap = {
version: "Версія",
docs: "Документація",
theme: "Тема",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Ресурси",
search: "Пошук",
save: "Зберегти",
@@ -60,7 +74,7 @@ export const uk: TranslationMap = {
hideAdvanced: "Сховати додаткові",
unsavedChanges: "У вас є незбережені зміни",
secondsAgo: "{count} с тому",
working: "Виконується…",
working: "Обробка…",
showQr: "Показати QR",
relink: "Пов’язати знову",
waitForScan: "Очікування сканування",
@@ -87,7 +101,7 @@ export const uk: TranslationMap = {
profilePicture: "Зображення профілю",
noProfile: "Профіль не налаштовано.",
noProfileHint: 'Натисніть "Edit Profile", щоб додати своє ім’я, біографію та аватар.',
name: "Ім’я",
name: "Назва",
displayName: "Відображуване ім’я",
about: "Про себе",
advanced: "Додатково",
@@ -141,6 +155,57 @@ export const uk: TranslationMap = {
lastInput: "Останнє введення {time}",
reason: "Причина {reason}",
},
sessionsView: {
title: "Сеанси",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Активно",
limit: "Limit",
global: "Global",
unknown: "Невідомо",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Токени",
compaction: "Compaction",
thinking: "Обмірковування",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "вимкнено",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -152,12 +217,12 @@ export const uk: TranslationMap = {
selectTitle: "Select an agent",
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
overview: "Огляд",
files: "Файли",
tools: "Інструменти",
skills: "Навички",
channels: "Канали",
cronJobs: "Завдання Cron",
},
context: {
title: "Agent Context",
@@ -173,7 +238,7 @@ export const uk: TranslationMap = {
schedulingSubtitle: "Workspace and scheduling targets.",
},
channels: {
title: "Channels",
title: "Канали",
subtitle: "Gateway-wide channel status snapshot.",
lastRefresh: "Last refresh: {time}",
loadHint: "Load channels to see live status.",
@@ -188,8 +253,8 @@ export const uk: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "Завдання",
nextWake: "Наступне пробудження",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -228,8 +293,8 @@ export const uk: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
health: "Health",
status: "Статус",
health: "Стан",
lastHeartbeat: "Last heartbeat",
security: {
audit: "Security audit",
@@ -237,7 +302,7 @@ export const uk: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "Запустити",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -247,7 +312,7 @@ export const uk: TranslationMap = {
paramsJson: "Params (JSON)",
modelsTitle: "Models",
modelsSubtitle: "Catalog from models.list.",
eventLogTitle: "Event Log",
eventLogTitle: "Журнал подій",
eventLogSubtitle: "Latest gateway events.",
noEvents: "No events yet.",
},
@@ -262,8 +327,8 @@ export const uk: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "Агент",
session: "Сеанс",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -352,7 +417,7 @@ export const uk: TranslationMap = {
snapshot: {
title: "Знімок",
subtitle: "Остання інформація рукостискання шлюзу.",
status: "Стан",
status: "Статус",
uptime: "Час роботи",
tickInterval: "Інтервал тіку",
lastChannelsRefresh: "Останнє оновлення каналів",
@@ -486,7 +551,7 @@ export const uk: TranslationMap = {
tabs: {
scene: "Сцена",
diary: "Щоденник",
advanced: "Розширені",
advanced: "Додатково",
},
header: {
refresh: "Оновити",
@@ -557,7 +622,7 @@ export const uk: TranslationMap = {
phaseHits: "Збіги фаз",
},
trace: {
shortTerm: "Короткострокові",
shortTerm: "Короткостроково",
grounded: "Заземлене",
signals: "Сигнали",
promoted: "Підвищено",
@@ -835,6 +900,7 @@ export const uk: TranslationMap = {
chat: {
disconnected: "Відключено від шлюзу.",
refreshTitle: "Оновити дані чату",
settings: "Chat settings",
thinkingToggle: "Перемкнути показ мислення/роботи асистента",
toolCallsToggle: "Перемкнути виклики інструментів і результати інструментів",
focusToggle: "Перемкнути режим фокусу (сховати бічну панель і заголовок сторінки)",
@@ -842,6 +908,15 @@ export const uk: TranslationMap = {
showCronSessions: "Показати сеанси Cron",
showCronSessionsHidden: "Показати сеанси Cron ({count} приховано)",
onboardingDisabled: "Вимкнено під час налаштування",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "Англійська",
@@ -865,6 +940,64 @@ export const uk: TranslationMap = {
fa: "فارسی (перська)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Автоматизація",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Увімкнено",
yes: "Так",
@@ -1054,7 +1187,7 @@ export const uk: TranslationMap = {
},
runEntry: {
noSummary: "Немає підсумку.",
runAt: "Час запуску",
runAt: "Запустити о",
openRunChat: "Відкрити чат запуску",
next: "Наступний {rel}",
due: "Має відбутися {rel}",

View File

@@ -21,15 +21,27 @@ export const vi: TranslationMap = {
call: "Gọi",
confirm: "Xác nhận",
cancel: "Hủy",
next: "Tiếp theo",
back: "Back",
create: "Create",
copy: "Sao chép",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "Bỏ chọn",
enabled: "Đã bật",
disabled: "Đã tắt",
none: "none",
na: "n/a",
never: "không bao giờ",
configured: "Đã cấu hình",
running: "Đang chạy",
linked: "Đã liên kết",
mode: "Chế độ",
system: "Hệ thống",
light: "Nhẹ",
dark: "Dark",
baseUrl: "URL cơ sở",
lastStart: "Lần khởi động gần nhất",
lastProbe: "Lần thăm dò gần nhất",
@@ -49,6 +61,8 @@ export const vi: TranslationMap = {
version: "Phiên bản",
docs: "Tài liệu",
theme: "Giao diện",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "Tài nguyên",
search: "Tìm kiếm",
save: "Lưu",
@@ -140,6 +154,57 @@ export const vi: TranslationMap = {
lastInput: "Đầu vào gần nhất {time}",
reason: "Lý do {reason}",
},
sessionsView: {
title: "Phiên",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "Đang hoạt động",
limit: "Limit",
global: "Global",
unknown: "Không rõ",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Token",
compaction: "Compaction",
thinking: "Suy nghĩ",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "tắt",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "Không có agent",
copyId: "Sao chép ID",
@@ -828,6 +893,7 @@ export const vi: TranslationMap = {
chat: {
disconnected: "Đã ngắt kết nối khỏi gateway.",
refreshTitle: "Làm mới dữ liệu trò chuyện",
settings: "Chat settings",
thinkingToggle: "Bật/tắt đầu ra suy nghĩ/đang xử lý của trợ lý",
toolCallsToggle: "Bật/tắt lượt gọi công cụ và kết quả công cụ",
focusToggle: "Bật/tắt chế độ tập trung (ẩn thanh bên + tiêu đề trang)",
@@ -835,6 +901,15 @@ export const vi: TranslationMap = {
showCronSessions: "Hiển thị phiên cron",
showCronSessionsHidden: "Hiển thị phiên cron ({count} bị ẩn)",
onboardingDisabled: "Đã tắt trong quá trình thiết lập",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "English (Tiếng Anh)",
@@ -858,6 +933,64 @@ export const vi: TranslationMap = {
fa: "فارسی (Tiếng Ba Tư)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Tự động hóa",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "Đã bật",
yes: "Có",

View File

@@ -21,15 +21,27 @@ export const zh_CN: TranslationMap = {
call: "调用",
confirm: "确认",
cancel: "取消",
next: "Next",
back: "Back",
create: "Create",
copy: "复制",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "取消选择",
enabled: "已启用",
disabled: "已禁用",
none: "none",
na: "不适用",
never: "从未",
configured: "已配置",
running: "运行中",
linked: "已关联",
mode: "模式",
system: "系统",
light: "浅睡",
dark: "Dark",
baseUrl: "基础 URL",
lastStart: "上次启动",
lastProbe: "上次探测",
@@ -49,6 +61,8 @@ export const zh_CN: TranslationMap = {
version: "版本",
docs: "文档",
theme: "主题",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "资源",
search: "搜索",
save: "保存",
@@ -138,6 +152,57 @@ export const zh_CN: TranslationMap = {
lastInput: "上次输入 {time}",
reason: "原因 {reason}",
},
sessionsView: {
title: "会话",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "活跃",
limit: "Limit",
global: "Global",
unknown: "Unknown",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Token",
compaction: "Compaction",
thinking: "Thinking",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "关闭",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "无代理",
copyId: "复制 ID",
@@ -152,7 +217,7 @@ export const zh_CN: TranslationMap = {
overview: "概览",
files: "文件",
tools: "工具",
skills: "技能",
skills: "Skills",
channels: "频道",
cronJobs: "Cron Jobs",
},
@@ -273,7 +338,7 @@ export const zh_CN: TranslationMap = {
connectedSource: "已连接:{id}",
connected: "已连接",
channelSource: "频道:{id}",
channel: "道",
channel: "道",
builtIn: "内置",
},
nav: {
@@ -293,7 +358,7 @@ export const zh_CN: TranslationMap = {
sessions: "会话",
usage: "使用情况",
cron: "定时任务",
skills: "技能",
skills: "Skills",
nodes: "节点",
chat: "聊天",
config: "配置",
@@ -360,7 +425,7 @@ export const zh_CN: TranslationMap = {
instancesHint: "过去 5 分钟内的在线信号。",
sessions: "会话",
sessionsHint: "网关跟踪的最近会话密钥。",
cron: "定时任务",
cron: "Cron",
cronNext: "下次唤醒 {time}",
},
notes: {
@@ -412,8 +477,8 @@ export const zh_CN: TranslationMap = {
copyCommandAria: "复制命令:{command}",
},
cards: {
cost: "费用",
skills: "技能",
cost: "成本",
skills: "Skills",
recentSessions: "最近会话",
modelAuth: "模型认证",
modelAuthOk: "{count} 正常",
@@ -448,13 +513,13 @@ export const zh_CN: TranslationMap = {
categories: {
search: "搜索",
navigation: "导航",
skills: "技能",
skills: "Skills",
},
items: {
overview: "概览",
sessions: "会话",
scheduled: "已计划",
skills: "技能",
skills: "Skills",
settings: "设置",
agents: "代理",
shellCommand: "Shell 命令",
@@ -817,6 +882,7 @@ export const zh_CN: TranslationMap = {
chat: {
disconnected: "已断开与网关的连接。",
refreshTitle: "刷新聊天数据",
settings: "Chat settings",
thinkingToggle: "切换助手思考/工作输出",
toolCallsToggle: "切换工具调用和工具结果",
focusToggle: "切换专注模式 (隐藏侧边栏 + 页面页眉)",
@@ -824,6 +890,15 @@ export const zh_CN: TranslationMap = {
showCronSessions: "显示定时任务会话",
showCronSessionsHidden: "显示定时任务会话 (已隐藏 {count} 个)",
onboardingDisabled: "引导期间禁用",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "英语",
@@ -847,6 +922,64 @@ export const zh_CN: TranslationMap = {
fa: "فارسی(波斯语)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automation",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "已启用",
yes: "是",
@@ -869,7 +1002,7 @@ export const zh_CN: TranslationMap = {
sort: "排序",
nextRun: "下次运行",
recentlyUpdated: "最近更新",
name: "名",
name: "名",
direction: "方向",
ascending: "升序",
descending: "降序",
@@ -915,14 +1048,14 @@ export const zh_CN: TranslationMap = {
requiredSr: "必填",
basics: "基本信息",
basicsSub: "命名、选择助手并设置启用状态。",
fieldName: "名",
fieldName: "名",
description: "描述",
agentId: "代理 ID",
namePlaceholder: "晨间简报",
descriptionPlaceholder: "此任务的可选说明",
agentPlaceholder: "main 或 ops",
agentHelp: "输入以选择已知代理,或输入自定义 ID。",
schedule: "调度",
schedule: "计划",
scheduleSub: "控制任务运行时间。",
every: "每隔",
at: "指定时间",
@@ -967,7 +1100,7 @@ export const zh_CN: TranslationMap = {
noneInternal: "无(仅内部)",
deliveryHelp: "发布将摘要发送到聊天。无保持执行仅内部。",
webhookUrl: "Webhook URL",
channel: "道",
channel: "道",
webhookPlaceholder: "https://example.com/cron",
channelHelp: "选择接收摘要的已连接频道。",
webhookHelp: "将运行摘要发送到 Webhook 端点。",

View File

@@ -4,7 +4,7 @@ import type { TranslationMap } from "../lib/types.ts";
export const zh_TW: TranslationMap = {
common: {
health: "健康狀況",
ok: "正常",
ok: "OK",
yes: "是",
no: "否",
active: "啟用中",
@@ -14,22 +14,34 @@ export const zh_TW: TranslationMap = {
offline: "離線",
connect: "連接",
connected: "已連線",
refresh: "刷新",
refresh: "重新整理",
reload: "重新載入",
reset: "Reset",
reset: "重設",
probe: "探測",
call: "呼叫",
confirm: "確認",
cancel: "取消",
next: "下一次",
back: "Back",
create: "Create",
copy: "複製",
copied: "Copied!",
copyCode: "Copy code",
delete: "Delete",
dismiss: "Dismiss",
unselect: "取消選取",
enabled: "已啟用",
disabled: "已禁用",
none: "none",
na: "不適用",
never: "never",
configured: "已設定",
running: "執行中",
linked: "已連結",
mode: "模式",
system: "系統",
light: "淺層",
dark: "Dark",
baseUrl: "基礎 URL",
lastStart: "上次啟動",
lastProbe: "上次探測",
@@ -49,6 +61,8 @@ export const zh_TW: TranslationMap = {
version: "版本",
docs: "文檔",
theme: "主題",
colorMode: "Color mode",
colorModeOption: "Color mode: {mode}",
resources: "資源",
search: "搜尋",
save: "儲存",
@@ -138,6 +152,57 @@ export const zh_TW: TranslationMap = {
lastInput: "上次輸入 {time}",
reason: "原因 {reason}",
},
sessionsView: {
title: "工作階段",
subtitle: "Active session keys and per-session overrides.",
store: "Store: {path}",
active: "啟用中",
limit: "Limit",
global: "Global",
unknown: "未知",
minutesPlaceholder: "min",
searchPlaceholder: "Filter by key, agent, label, kind…",
selected: "{count} selected",
deleteSelected: "Delete",
selectAllOnPage: "Select all on page",
selectSession: "Select session",
optionalPlaceholder: "(optional)",
key: "Key",
label: "Label",
kind: "Kind",
updated: "Updated",
tokens: "Token",
compaction: "Compaction",
thinking: "思考",
fast: "Fast",
verbose: "Verbose",
reasoning: "Reasoning",
noSessions: "No sessions found.",
inherit: "inherit",
defaultOption: "Default ({value})",
offExplicit: "off (explicit)",
on: "on",
off: "關閉",
full: "full",
stream: "stream",
customOption: "{value} (custom)",
manual: "manual",
autoThreshold: "auto-threshold",
overflowRetry: "overflow retry",
timeoutRetry: "timeout retry",
tokenRange: "{before} → {after} tokens",
tokensBefore: "{count} tokens before",
tokenDeltaUnavailable: "token delta unavailable",
checkpoints: "{count} checkpoints",
checkpoint: "{count} checkpoint",
showCheckpoints: "Show checkpoints",
hideCheckpoints: "Hide checkpoints",
loadingCheckpoints: "Loading checkpoints…",
noCheckpoints: "No compaction checkpoints recorded for this session.",
noSummary: "No summary captured.",
branchFromCheckpoint: "Branch from checkpoint",
restoreCheckpoint: "Restore checkpoint",
},
agents: {
noAgents: "No agents",
copyId: "Copy ID",
@@ -150,8 +215,8 @@ export const zh_TW: TranslationMap = {
selectSubtitle: "Pick an agent to inspect its workspace and tools.",
tabs: {
overview: "Overview",
files: "Files",
tools: "Tools",
files: "檔案",
tools: "工具",
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
@@ -185,8 +250,8 @@ export const zh_TW: TranslationMap = {
cronPanel: {
schedulerTitle: "Scheduler",
schedulerSubtitle: "Gateway cron status.",
jobs: "Jobs",
nextWake: "Next wake",
jobs: "工作",
nextWake: "下次喚醒",
agentJobsTitle: "Agent Cron Jobs",
agentJobsSubtitle: "Scheduled jobs targeting this agent.",
noJobs: "No jobs assigned.",
@@ -225,7 +290,7 @@ export const zh_TW: TranslationMap = {
debug: {
snapshotsTitle: "Snapshots",
snapshotsSubtitle: "Status, health, and heartbeat data.",
status: "Status",
status: "狀態",
health: "Health",
lastHeartbeat: "Last heartbeat",
security: {
@@ -234,7 +299,7 @@ export const zh_TW: TranslationMap = {
warnings: "{count} warnings",
noCriticalIssues: "No critical issues",
info: "{count} info",
runPrefix: "Run",
runPrefix: "執行",
runSuffix: "for details.",
},
manualRpcTitle: "Manual RPC",
@@ -259,8 +324,8 @@ export const zh_TW: TranslationMap = {
deny: "Deny",
labels: {
host: "Host",
agent: "Agent",
session: "Session",
agent: "代理",
session: "工作階段",
cwd: "CWD",
resolved: "Resolved",
security: "Security",
@@ -290,10 +355,10 @@ export const zh_TW: TranslationMap = {
overview: "概覽",
channels: "頻道",
instances: "實例",
sessions: "會話",
sessions: "工作階段",
usage: "使用情況",
cron: "定時任務",
skills: "技能",
skills: "Skills",
nodes: "節點",
chat: "聊天",
config: "配置",
@@ -358,9 +423,9 @@ export const zh_TW: TranslationMap = {
stats: {
instances: "實例",
instancesHint: "過去 5 分鐘內的在線信號。",
sessions: "會話",
sessions: "工作階段",
sessionsHint: "網關跟蹤的最近會話密鑰。",
cron: "定時任務",
cron: "Cron",
cronNext: "下次喚醒 {time}",
},
notes: {
@@ -412,8 +477,8 @@ export const zh_TW: TranslationMap = {
copyCommandAria: "複製指令:{command}",
},
cards: {
cost: "費用",
skills: "技能",
cost: "成本",
skills: "Skills",
recentSessions: "最近會話",
modelAuth: "模型驗證",
modelAuthOk: "{count} 正常",
@@ -448,13 +513,13 @@ export const zh_TW: TranslationMap = {
categories: {
search: "搜尋",
navigation: "導覽",
skills: "技能",
skills: "Skills",
},
items: {
overview: "概覽",
sessions: "工作階段",
scheduled: "已排程",
skills: "技能",
skills: "Skills",
settings: "設定",
agents: "代理",
shellCommand: "Shell 指令",
@@ -818,6 +883,7 @@ export const zh_TW: TranslationMap = {
chat: {
disconnected: "已斷開與網關的連接。",
refreshTitle: "刷新聊天數據",
settings: "Chat settings",
thinkingToggle: "切換助手思考/工作輸出",
toolCallsToggle: "切換工具呼叫與工具結果",
focusToggle: "切換專注模式 (隱藏側邊欄 + 頁面頁眉)",
@@ -825,6 +891,15 @@ export const zh_TW: TranslationMap = {
showCronSessions: "顯示定時任務會話",
showCronSessionsHidden: "顯示定時任務會話 (已隱藏 {count} 個)",
onboardingDisabled: "引導期間禁用",
gatewayStatus: "Gateway status: {status}",
commandPaletteTitle: "Search or jump to… (⌘K)",
openCommandPalette: "Open command palette",
docsOpensInNewTab: "{label} (opens in new tab)",
updateAvailable: "Update available:",
runningVersion: "running v{version}",
updating: "Updating…",
updateNow: "Update now",
dismissUpdateBanner: "Dismiss update banner",
},
languages: {
en: "英文",
@@ -848,6 +923,64 @@ export const zh_TW: TranslationMap = {
fa: "فارسی(波斯文)",
},
cron: {
quickCreate: {
schedules: {
everyMorning: {
label: "Every morning",
description: "Daily at 8:00 AM",
},
everyEvening: {
label: "Every evening",
description: "Daily at 6:00 PM",
},
hourly: {
label: "Hourly",
description: "Every hour",
},
weekdays: {
label: "Weekdays",
description: "MonFri at 9:00 AM",
},
weekly: {
label: "Weekly",
description: "Every Monday at 9:00 AM",
},
once: {
label: "Run once",
description: "One-time, delete after run",
},
},
delivery: {
notify: {
label: "Notify me",
description: "Deliver results to chat",
},
silent: {
label: "Silent",
description: "Run without notification",
},
isolated: {
label: "Independent session",
description: "Run in its own session",
},
},
steps: {
what: "What",
when: "When",
how: "How",
},
defaultName: "Automation",
whatHeading: "What should it do?",
whatHint: "Describe the task in natural language. The agent will run this prompt each time.",
promptPlaceholder: "e.g., Check my inbox for urgent emails and summarize them...",
nameOptional: "Name (optional)",
namePlaceholder: "e.g., Morning inbox check",
whenHeading: "When should it run?",
whenHint: "Pick a schedule. You can fine-tune it later.",
howHeading: "How should it work?",
howHint: "Choose how results are delivered.",
title: "New Automation",
},
summary: {
enabled: "已啟用",
yes: "是",

View File

@@ -437,8 +437,8 @@ export function renderChatMobileToggle(state: AppViewState) {
trigger: e.currentTarget as HTMLElement,
});
}}
title="Chat settings"
aria-label="Chat settings"
title=${t("chat.settings")}
aria-label=${t("chat.settings")}
aria-expanded=${mobileControlsOpen}
aria-controls=${controlsDropdownId}
>
@@ -599,11 +599,11 @@ function countHiddenCronSessions(sessionKey: string, sessions: SessionsListResul
return sessions.sessions.filter((s) => isCronSessionKey(s.key) && s.key !== sessionKey).length;
}
type ThemeModeOption = { id: ThemeMode; label: string; short: string };
type ThemeModeOption = { id: ThemeMode; labelKey: string; short: string };
const THEME_MODE_OPTIONS: ThemeModeOption[] = [
{ id: "system", label: "System", short: "SYS" },
{ id: "light", label: "Light", short: "LIGHT" },
{ id: "dark", label: "Dark", short: "DARK" },
{ id: "system", labelKey: "common.system", short: "SYS" },
{ id: "light", labelKey: "common.light", short: "LIGHT" },
{ id: "dark", labelKey: "common.dark", short: "DARK" },
];
export function renderTopbarThemeModeToggle(state: AppViewState) {
@@ -625,23 +625,24 @@ export function renderTopbarThemeModeToggle(state: AppViewState) {
};
return html`
<div class="topbar-theme-mode" role="group" aria-label="Color mode">
${THEME_MODE_OPTIONS.map(
(opt) => html`
<div class="topbar-theme-mode" role="group" aria-label=${t("common.colorMode")}>
${THEME_MODE_OPTIONS.map((opt) => {
const label = t(opt.labelKey);
return html`
<button
type="button"
class="topbar-theme-mode__btn ${opt.id === state.themeMode
? "topbar-theme-mode__btn--active"
: ""}"
title=${opt.label}
aria-label="Color mode: ${opt.label}"
title=${label}
aria-label=${t("common.colorModeOption", { mode: label })}
aria-pressed=${opt.id === state.themeMode}
@click=${(e: Event) => applyMode(opt.id, e)}
>
${modeIcon(opt.id)}
</button>
`,
)}
`;
})}
</div>
`;
}
@@ -657,8 +658,8 @@ export function renderSidebarConnectionStatus(state: AppViewState) {
class="sidebar-version__status ${toneClass}"
role="img"
aria-live="polite"
aria-label="Gateway status: ${label}"
title="Gateway status: ${label}"
aria-label=${t("chat.gatewayStatus", { status: label })}
title=${t("chat.gatewayStatus", { status: label })}
></span>
`;
}

View File

@@ -1366,8 +1366,8 @@ export function renderApp(state: AppViewState) {
@click=${() => {
state.paletteOpen = !state.paletteOpen;
}}
title="Search or jump to… (⌘K)"
aria-label="Open command palette"
title=${t("chat.commandPaletteTitle")}
aria-label=${t("chat.openCommandPalette")}
>
<span class="topbar-search__label">${t("common.search")}</span>
<kbd class="topbar-search__kbd">⌘K</kbd>
@@ -1461,7 +1461,7 @@ export function renderApp(state: AppViewState) {
href="https://docs.openclaw.ai"
target=${EXTERNAL_LINK_TARGET}
rel=${buildExternalLinkRel()}
title="${t("common.docs")} (opens in new tab)"
title=${t("chat.docsOpensInNewTab", { label: t("common.docs") })}
>
<span class="nav-item__icon" aria-hidden="true">${icons.book}</span>
${!navCollapsed
@@ -1503,20 +1503,20 @@ export function renderApp(state: AppViewState) {
state.updateAvailable.latestVersion !== state.updateAvailable.currentVersion &&
!isUpdateBannerDismissed(state.updateAvailable)
? html`<div class="update-banner callout danger" role="alert">
<strong>Update available:</strong> v${state.updateAvailable.latestVersion} (running
v${state.updateAvailable.currentVersion}).
<strong>${t("chat.updateAvailable")}</strong> v${state.updateAvailable.latestVersion}
(${t("chat.runningVersion", { version: state.updateAvailable.currentVersion })}).
<button
class="btn btn--sm update-banner__btn"
?disabled=${state.updateRunning || !state.connected}
@click=${() => runUpdate(state)}
>
${state.updateRunning ? "Updating" : "Update now"}
${state.updateRunning ? t("chat.updating") : t("chat.updateNow")}
</button>
<button
class="update-banner__close"
type="button"
title="Dismiss"
aria-label="Dismiss update banner"
title=${t("common.dismiss")}
aria-label=${t("chat.dismissUpdateBanner")}
@click=${() => {
dismissUpdateBanner(state.updateAvailable);
state.updateAvailable = null;

View File

@@ -1,6 +1,7 @@
import DOMPurify from "dompurify";
import MarkdownIt from "markdown-it";
import markdownItTaskLists from "markdown-it-task-lists";
import { t } from "../i18n/index.ts";
import { truncateText } from "./format.ts";
import { normalizeLowercaseStringOrEmpty } from "./string-coerce.ts";
@@ -431,7 +432,7 @@ md.renderer.rules.fence = (tokens, idx) => {
const codeBlock = `<pre><code${langClass}>${safeText}</code></pre>`;
const langLabel = lang ? `<span class="code-block-lang">${escapeHtml(lang)}</span>` : "";
const attrSafe = escapeHtml(text);
const copyBtn = `<button type="button" class="code-block-copy" data-code="${attrSafe}" aria-label="Copy code"><span class="code-block-copy__idle">Copy</span><span class="code-block-copy__done">Copied!</span></button>`;
const copyBtn = `<button type="button" class="code-block-copy" data-code="${attrSafe}" aria-label="${escapeHtml(t("common.copyCode"))}"><span class="code-block-copy__idle">${escapeHtml(t("common.copy"))}</span><span class="code-block-copy__done">${escapeHtml(t("common.copied"))}</span></button>`;
const header = `<div class="code-block-header">${langLabel}${copyBtn}</div>`;
const trimmed = text.trim();
@@ -457,7 +458,7 @@ md.renderer.rules.code_block = (tokens, idx) => {
const safeText = escapeHtml(text);
const codeBlock = `<pre><code>${safeText}</code></pre>`;
const attrSafe = escapeHtml(text);
const copyBtn = `<button type="button" class="code-block-copy" data-code="${attrSafe}" aria-label="Copy code"><span class="code-block-copy__idle">Copy</span><span class="code-block-copy__done">Copied!</span></button>`;
const copyBtn = `<button type="button" class="code-block-copy" data-code="${attrSafe}" aria-label="${escapeHtml(t("common.copyCode"))}"><span class="code-block-copy__idle">${escapeHtml(t("common.copy"))}</span><span class="code-block-copy__done">${escapeHtml(t("common.copied"))}</span></button>`;
const header = `<div class="code-block-header">${copyBtn}</div>`;
const trimmed = text.trim();

View File

@@ -7,6 +7,7 @@
*/
import { html, nothing } from "lit";
import { t } from "../../i18n/index.ts";
import { icons } from "../icons.ts";
import type { CronFormState } from "../ui-types.ts";
@@ -45,30 +46,72 @@ type DeliveryPresetId = "notify" | "silent" | "isolated";
type SchedulePreset = {
id: SchedulePresetId;
label: string;
labelKey: string;
icon: string;
description: string;
descriptionKey: string;
};
const SCHEDULE_PRESETS: SchedulePreset[] = [
{ id: "every-morning", label: "Every morning", icon: "🌅", description: "Daily at 8:00 AM" },
{ id: "every-evening", label: "Every evening", icon: "🌙", description: "Daily at 6:00 PM" },
{ id: "hourly", label: "Hourly", icon: "🔄", description: "Every hour" },
{ id: "weekdays", label: "Weekdays", icon: "📅", description: "MonFri at 9:00 AM" },
{ id: "weekly", label: "Weekly", icon: "📆", description: "Every Monday at 9:00 AM" },
{ id: "once", label: "Run once", icon: "⚡", description: "One-time, delete after run" },
{
id: "every-morning",
labelKey: "cron.quickCreate.schedules.everyMorning.label",
icon: "🌅",
descriptionKey: "cron.quickCreate.schedules.everyMorning.description",
},
{
id: "every-evening",
labelKey: "cron.quickCreate.schedules.everyEvening.label",
icon: "🌙",
descriptionKey: "cron.quickCreate.schedules.everyEvening.description",
},
{
id: "hourly",
labelKey: "cron.quickCreate.schedules.hourly.label",
icon: "🔄",
descriptionKey: "cron.quickCreate.schedules.hourly.description",
},
{
id: "weekdays",
labelKey: "cron.quickCreate.schedules.weekdays.label",
icon: "📅",
descriptionKey: "cron.quickCreate.schedules.weekdays.description",
},
{
id: "weekly",
labelKey: "cron.quickCreate.schedules.weekly.label",
icon: "📆",
descriptionKey: "cron.quickCreate.schedules.weekly.description",
},
{
id: "once",
labelKey: "cron.quickCreate.schedules.once.label",
icon: "⚡",
descriptionKey: "cron.quickCreate.schedules.once.description",
},
];
type DeliveryPreset = {
id: DeliveryPresetId;
label: string;
description: string;
labelKey: string;
descriptionKey: string;
};
const DELIVERY_PRESETS: DeliveryPreset[] = [
{ id: "notify", label: "Notify me", description: "Deliver results to chat" },
{ id: "silent", label: "Silent", description: "Run without notification" },
{ id: "isolated", label: "Independent session", description: "Run in its own session" },
{
id: "notify",
labelKey: "cron.quickCreate.delivery.notify.label",
descriptionKey: "cron.quickCreate.delivery.notify.description",
},
{
id: "silent",
labelKey: "cron.quickCreate.delivery.silent.label",
descriptionKey: "cron.quickCreate.delivery.silent.description",
},
{
id: "isolated",
labelKey: "cron.quickCreate.delivery.isolated.label",
descriptionKey: "cron.quickCreate.delivery.isolated.description",
},
];
// ── Default draft ──
@@ -97,7 +140,7 @@ function buildDefaultScheduleAt(now = new Date()): string {
export function draftToCronFormPatch(draft: CronQuickCreateDraft): Partial<CronFormState> {
const patch: Partial<CronFormState> = {
name: draft.name || "Automation",
name: draft.name || t("cron.quickCreate.defaultName"),
payloadKind: "agentTurn",
deleteAfterRun: false,
scheduleAt: "",
@@ -163,9 +206,9 @@ export function draftToCronFormPatch(draft: CronQuickCreateDraft): Partial<CronF
const STEPS: CronQuickCreateStep[] = ["what", "when", "how"];
const STEP_LABELS: Record<CronQuickCreateStep, string> = {
what: "What",
when: "When",
how: "How",
what: "cron.quickCreate.steps.what",
when: "cron.quickCreate.steps.when",
how: "cron.quickCreate.steps.how",
};
function renderStepIndicator(current: CronQuickCreateStep) {
@@ -177,7 +220,7 @@ function renderStepIndicator(current: CronQuickCreateStep) {
return html`
<div class="cqc-step cqc-step--${state}">
<span class="cqc-step__dot">${state === "done" ? "✓" : idx + 1}</span>
<span class="cqc-step__label">${STEP_LABELS[step]}</span>
<span class="cqc-step__label">${t(STEP_LABELS[step])}</span>
</div>
${idx < STEPS.length - 1
? html`<div class="cqc-step__line cqc-step__line--${state}"></div>`
@@ -193,24 +236,22 @@ function renderStepIndicator(current: CronQuickCreateStep) {
function renderWhatStep(props: CronQuickCreateProps) {
return html`
<div class="cqc-body">
<h3 class="cqc-body__heading">What should it do?</h3>
<p class="cqc-body__hint muted">
Describe the task in natural language. The agent will run this prompt each time.
</p>
<h3 class="cqc-body__heading">${t("cron.quickCreate.whatHeading")}</h3>
<p class="cqc-body__hint muted">${t("cron.quickCreate.whatHint")}</p>
<textarea
class="cqc-textarea"
placeholder="e.g., Check my inbox for urgent emails and summarize them..."
placeholder=${t("cron.quickCreate.promptPlaceholder")}
rows="4"
.value=${props.draft.prompt}
@input=${(e: Event) =>
props.onDraftChange({ prompt: (e.target as HTMLTextAreaElement).value })}
></textarea>
<div class="cqc-field">
<label class="cqc-field__label">Name (optional)</label>
<label class="cqc-field__label">${t("cron.quickCreate.nameOptional")}</label>
<input
class="cqc-input"
type="text"
placeholder="e.g., Morning inbox check"
placeholder=${t("cron.quickCreate.namePlaceholder")}
.value=${props.draft.name}
@input=${(e: Event) =>
props.onDraftChange({ name: (e.target as HTMLInputElement).value })}
@@ -218,13 +259,13 @@ function renderWhatStep(props: CronQuickCreateProps) {
</div>
</div>
<div class="cqc-actions">
<button class="btn" @click=${props.onCancel}>Cancel</button>
<button class="btn" @click=${props.onCancel}>${t("common.cancel")}</button>
<button
class="btn primary"
?disabled=${!props.draft.prompt.trim()}
@click=${() => props.onStepChange("when")}
>
Next ${icons.chevronRight}
${t("common.next")} ${icons.chevronRight}
</button>
</div>
`;
@@ -233,8 +274,8 @@ function renderWhatStep(props: CronQuickCreateProps) {
function renderWhenStep(props: CronQuickCreateProps) {
return html`
<div class="cqc-body">
<h3 class="cqc-body__heading">When should it run?</h3>
<p class="cqc-body__hint muted">Pick a schedule. You can fine-tune it later.</p>
<h3 class="cqc-body__heading">${t("cron.quickCreate.whenHeading")}</h3>
<p class="cqc-body__hint muted">${t("cron.quickCreate.whenHint")}</p>
<div class="cqc-preset-grid">
${SCHEDULE_PRESETS.map(
(preset) => html`
@@ -245,17 +286,17 @@ function renderWhenStep(props: CronQuickCreateProps) {
@click=${() => props.onDraftChange({ schedulePreset: preset.id })}
>
<span class="cqc-preset-card__icon">${preset.icon}</span>
<span class="cqc-preset-card__label">${preset.label}</span>
<span class="cqc-preset-card__desc muted">${preset.description}</span>
<span class="cqc-preset-card__label">${t(preset.labelKey)}</span>
<span class="cqc-preset-card__desc muted">${t(preset.descriptionKey)}</span>
</button>
`,
)}
</div>
</div>
<div class="cqc-actions">
<button class="btn" @click=${() => props.onStepChange("what")}>Back</button>
<button class="btn" @click=${() => props.onStepChange("what")}>${t("common.back")}</button>
<button class="btn primary" @click=${() => props.onStepChange("how")}>
Next ${icons.chevronRight}
${t("common.next")} ${icons.chevronRight}
</button>
</div>
`;
@@ -264,8 +305,8 @@ function renderWhenStep(props: CronQuickCreateProps) {
function renderHowStep(props: CronQuickCreateProps) {
return html`
<div class="cqc-body">
<h3 class="cqc-body__heading">How should it work?</h3>
<p class="cqc-body__hint muted">Choose how results are delivered.</p>
<h3 class="cqc-body__heading">${t("cron.quickCreate.howHeading")}</h3>
<p class="cqc-body__hint muted">${t("cron.quickCreate.howHint")}</p>
<div class="cqc-delivery-options">
${DELIVERY_PRESETS.map(
(preset) => html`
@@ -280,16 +321,18 @@ function renderHowStep(props: CronQuickCreateProps) {
.checked=${props.draft.deliveryPreset === preset.id}
@change=${() => props.onDraftChange({ deliveryPreset: preset.id })}
/>
<span class="cqc-radio-card__label">${preset.label}</span>
<span class="cqc-radio-card__desc muted">${preset.description}</span>
<span class="cqc-radio-card__label">${t(preset.labelKey)}</span>
<span class="cqc-radio-card__desc muted">${t(preset.descriptionKey)}</span>
</label>
`,
)}
</div>
</div>
<div class="cqc-actions">
<button class="btn" @click=${() => props.onStepChange("when")}>Back</button>
<button class="btn primary" @click=${props.onCreate}>Create ${icons.check}</button>
<button class="btn" @click=${() => props.onStepChange("when")}>${t("common.back")}</button>
<button class="btn primary" @click=${props.onCreate}>
${t("common.create")} ${icons.check}
</button>
</div>
`;
}
@@ -304,7 +347,7 @@ export function renderCronQuickCreate(props: CronQuickCreateProps) {
return html`
<div class="cqc-container">
<div class="cqc-header">
<h2 class="cqc-header__title">${icons.zap} New Automation</h2>
<h2 class="cqc-header__title">${icons.zap} ${t("cron.quickCreate.title")}</h2>
<button class="cqc-header__close" @click=${props.onCancel}>${icons.x}</button>
</div>

View File

@@ -68,17 +68,8 @@ export type SessionsProps = {
};
const DEFAULT_THINK_LEVELS = ["off", "minimal", "low", "medium", "high"] as const;
const VERBOSE_LEVELS = [
{ value: "", label: "inherit" },
{ value: "off", label: "off (explicit)" },
{ value: "on", label: "on" },
{ value: "full", label: "full" },
] as const;
const FAST_LEVELS = [
{ value: "", label: "inherit" },
{ value: "on", label: "on" },
{ value: "off", label: "off" },
] as const;
const VERBOSE_LEVEL_VALUES = ["", "off", "on", "full"] as const;
const FAST_LEVEL_VALUES = ["", "on", "off"] as const;
const REASONING_LEVELS = ["", "off", "on", "stream"] as const;
const PAGE_SIZES = [10, 25, 50, 100] as const;
@@ -98,7 +89,9 @@ function normalizeThinkingOptionValue(raw: string): string {
function resolveThinkLevelOptions(
row: GatewaySessionRow,
): readonly { value: string; label: string }[] {
const defaultLabel = row.thinkingDefault ? `Default (${row.thinkingDefault})` : "inherit";
const defaultLabel = row.thinkingDefault
? t("sessionsView.defaultOption", { value: row.thinkingDefault })
: t("sessionsView.inherit");
const options: readonly GatewayThinkingLevelOption[] = row.thinkingLevels?.length
? row.thinkingLevels
: (row.thinkingOptions?.length ? row.thinkingOptions : DEFAULT_THINK_LEVELS).map((label) => ({
@@ -134,7 +127,29 @@ function withCurrentLabeledOption(
if (options.some((option) => option.value === current)) {
return [...options];
}
return [...options, { value: current, label: `${current} (custom)` }];
return [
...options,
{ value: current, label: t("sessionsView.customOption", { value: current }) },
];
}
function buildVerboseLevelOptions(): Array<{ value: string; label: string }> {
return VERBOSE_LEVEL_VALUES.map((value) => ({
value,
label:
value === ""
? t("sessionsView.inherit")
: value === "off"
? t("sessionsView.offExplicit")
: t(`sessionsView.${value}`),
}));
}
function buildFastLevelOptions(): Array<{ value: string; label: string }> {
return FAST_LEVEL_VALUES.map((value) => ({
value,
label: value === "" ? t("sessionsView.inherit") : t(`sessionsView.${value}`),
}));
}
function resolveThinkLevelPatchValue(value: string): string | null {
@@ -209,13 +224,13 @@ function paginateRows<T>(rows: T[], page: number, pageSize: number): T[] {
function formatCheckpointReason(reason: SessionCompactionCheckpoint["reason"]): string {
switch (reason) {
case "manual":
return "manual";
return t("sessionsView.manual");
case "auto-threshold":
return "auto-threshold";
return t("sessionsView.autoThreshold");
case "overflow-retry":
return "overflow retry";
return t("sessionsView.overflowRetry");
case "timeout-retry":
return "timeout retry";
return t("sessionsView.timeoutRetry");
default:
return reason;
}
@@ -228,12 +243,15 @@ function formatCheckpointDelta(checkpoint: SessionCompactionCheckpoint): string
Number.isFinite(checkpoint.tokensBefore) &&
Number.isFinite(checkpoint.tokensAfter)
) {
return `${checkpoint.tokensBefore.toLocaleString()}${checkpoint.tokensAfter.toLocaleString()} tokens`;
return t("sessionsView.tokenRange", {
before: checkpoint.tokensBefore.toLocaleString(),
after: checkpoint.tokensAfter.toLocaleString(),
});
}
if (typeof checkpoint.tokensBefore === "number" && Number.isFinite(checkpoint.tokensBefore)) {
return `${checkpoint.tokensBefore.toLocaleString()} tokens before`;
return t("sessionsView.tokensBefore", { count: checkpoint.tokensBefore.toLocaleString() });
}
return "token delta unavailable";
return t("sessionsView.tokenDeltaUnavailable");
}
export function renderSessions(props: SessionsProps) {
@@ -269,11 +287,11 @@ export function renderSessions(props: SessionsProps) {
<section class="card">
<div class="row" style="justify-content: space-between; margin-bottom: 12px;">
<div>
<div class="card-title">Sessions</div>
<div class="card-title">${t("sessionsView.title")}</div>
<div class="card-sub">
${props.result
? `Store: ${props.result.path}`
: "Active session keys and per-session overrides."}
? t("sessionsView.store", { path: props.result.path })
: t("sessionsView.subtitle")}
</div>
</div>
<button class="btn" ?disabled=${props.loading} @click=${props.onRefresh}>
@@ -283,10 +301,10 @@ export function renderSessions(props: SessionsProps) {
<div class="filters" style="margin-bottom: 12px;">
<label class="field-inline">
<span>Active</span>
<span>${t("sessionsView.active")}</span>
<input
style="width: 72px;"
placeholder="min"
placeholder=${t("sessionsView.minutesPlaceholder")}
.value=${props.activeMinutes}
@input=${(e: Event) =>
props.onFiltersChange({
@@ -298,7 +316,7 @@ export function renderSessions(props: SessionsProps) {
/>
</label>
<label class="field-inline">
<span>Limit</span>
<span>${t("sessionsView.limit")}</span>
<input
style="width: 64px;"
.value=${props.limit}
@@ -323,7 +341,7 @@ export function renderSessions(props: SessionsProps) {
includeUnknown: props.includeUnknown,
})}
/>
<span>Global</span>
<span>${t("sessionsView.global")}</span>
</label>
<label class="field-inline checkbox">
<input
@@ -337,7 +355,7 @@ export function renderSessions(props: SessionsProps) {
includeUnknown: (e.target as HTMLInputElement).checked,
})}
/>
<span>Unknown</span>
<span>${t("sessionsView.unknown")}</span>
</label>
</div>
@@ -350,7 +368,7 @@ export function renderSessions(props: SessionsProps) {
<div class="data-table-search">
<input
type="text"
placeholder="Filter by key, agent, label, kind…"
placeholder=${t("sessionsView.searchPlaceholder")}
.value=${props.searchQuery}
@input=${(e: Event) => props.onSearchChange((e.target as HTMLInputElement).value)}
/>
@@ -360,7 +378,9 @@ export function renderSessions(props: SessionsProps) {
${props.selectedKeys.size > 0
? html`
<div class="data-table-bulk-bar">
<span>${props.selectedKeys.size} selected</span>
<span
>${t("sessionsView.selected", { count: String(props.selectedKeys.size) })}</span
>
<button class="btn btn--sm" @click=${props.onDeselectAll}>
${t("common.unselect")}
</button>
@@ -369,7 +389,7 @@ export function renderSessions(props: SessionsProps) {
?disabled=${props.loading}
@click=${props.onDeleteSelected}
>
${icons.trash} Delete
${icons.trash} ${t("sessionsView.deleteSelected")}
</button>
</div>
`
@@ -395,19 +415,20 @@ export function renderSessions(props: SessionsProps) {
props.onSelectPage(paginated.map((r) => r.key));
}
}}
aria-label="Select all on page"
aria-label=${t("sessionsView.selectAllOnPage")}
/>`
: nothing}
</th>
${sortHeader("key", "Key", "data-table-key-col")}
<th>Label</th>
${sortHeader("kind", "Kind")} ${sortHeader("updated", "Updated")}
${sortHeader("tokens", "Tokens")}
<th>Compaction</th>
<th>Thinking</th>
<th>Fast</th>
<th>Verbose</th>
<th>Reasoning</th>
${sortHeader("key", t("sessionsView.key"), "data-table-key-col")}
<th>${t("sessionsView.label")}</th>
${sortHeader("kind", t("sessionsView.kind"))}
${sortHeader("updated", t("sessionsView.updated"))}
${sortHeader("tokens", t("sessionsView.tokens"))}
<th>${t("sessionsView.compaction")}</th>
<th>${t("sessionsView.thinking")}</th>
<th>${t("sessionsView.fast")}</th>
<th>${t("sessionsView.verbose")}</th>
<th>${t("sessionsView.reasoning")}</th>
</tr>
</thead>
<tbody>
@@ -418,7 +439,7 @@ export function renderSessions(props: SessionsProps) {
colspan="11"
style="text-align: center; padding: 48px 16px; color: var(--muted)"
>
No sessions found.
${t("sessionsView.noSessions")}
</td>
</tr>
`
@@ -450,7 +471,7 @@ export function renderSessions(props: SessionsProps) {
?disabled=${page >= totalPages - 1}
@click=${() => props.onPageChange(page + 1)}
>
Next
${t("common.next")}
</button>
</div>
</div>
@@ -467,9 +488,9 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
const thinking = rawThinking ? normalizeThinkingOptionValue(rawThinking) : "";
const thinkLevels = withCurrentLabeledOption(resolveThinkLevelOptions(row), thinking);
const fastMode = row.fastMode === true ? "on" : row.fastMode === false ? "off" : "";
const fastLevels = withCurrentLabeledOption(FAST_LEVELS, fastMode);
const fastLevels = withCurrentLabeledOption(buildFastLevelOptions(), fastMode);
const verbose = row.verboseLevel ?? "";
const verboseLevels = withCurrentLabeledOption(VERBOSE_LEVELS, verbose);
const verboseLevels = withCurrentLabeledOption(buildVerboseLevelOptions(), verbose);
const reasoning = row.reasoningLevel ?? "";
const reasoningLevels = withCurrentOption(REASONING_LEVELS, reasoning);
const latestCheckpoint = row.latestCompactionCheckpoint;
@@ -513,7 +534,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
type="checkbox"
.checked=${props.selectedKeys.has(row.key)}
@change=${() => props.onToggleSelect(row.key)}
aria-label="Select session"
aria-label=${t("sessionsView.selectSession")}
/>
</td>
<td class="data-table-key-col">
@@ -553,7 +574,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
<input
.value=${row.label ?? ""}
?disabled=${props.loading}
placeholder="(optional)"
placeholder=${t("sessionsView.optionalPlaceholder")}
style="width: 100%; max-width: 140px; padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm);"
@change=${(e: Event) => {
const value = normalizeOptionalString((e.target as HTMLInputElement).value) ?? null;
@@ -570,8 +591,10 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
<div style="display: grid; gap: 6px;">
<span class="muted" style="font-size: 12px;">
${checkpointCount > 0
? `${checkpointCount} checkpoint${checkpointCount === 1 ? "" : "s"}`
: "none"}
? checkpointCount === 1
? t("sessionsView.checkpoint", { count: String(checkpointCount) })
: t("sessionsView.checkpoints", { count: String(checkpointCount) })
: t("common.none")}
</span>
${latestCheckpoint
? html`
@@ -586,7 +609,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
?disabled=${props.checkpointLoadingKey === row.key}
@click=${() => props.onToggleCheckpointDetails(row.key)}
>
${isExpanded ? "Hide checkpoints" : "Show checkpoints"}
${isExpanded ? t("sessionsView.hideCheckpoints") : t("sessionsView.showCheckpoints")}
</button>
</div>
</td>
@@ -655,7 +678,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
${reasoningLevels.map(
(level) =>
html`<option value=${level} ?selected=${reasoning === level}>
${level || "inherit"}
${level || t("sessionsView.inherit")}
</option>`,
)}
</select>
@@ -669,13 +692,11 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
style="padding: 14px 16px; border-top: 1px solid var(--border); background: var(--surface-2, rgba(127, 127, 127, 0.05));"
>
${props.checkpointLoadingKey === row.key
? html`<div class="muted">Loading checkpoints</div>`
? html`<div class="muted">${t("sessionsView.loadingCheckpoints")}</div>`
: checkpointError
? html`<div class="callout danger">${checkpointError}</div>`
: checkpointItems.length === 0
? html`<div class="muted">
No compaction checkpoints recorded for this session.
</div>`
? html`<div class="muted">${t("sessionsView.noCheckpoints")}</div>`
: html`
<div style="display: grid; gap: 10px;">
${checkpointItems.map(
@@ -698,7 +719,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
? html`<div style="white-space: pre-wrap;">
${checkpoint.summary}
</div>`
: html`<div class="muted">No summary captured.</div>`}
: html`<div class="muted">${t("sessionsView.noSummary")}</div>`}
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
<button
class="btn btn--sm"
@@ -710,7 +731,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
checkpoint.checkpointId,
)}
>
Branch from checkpoint
${t("sessionsView.branchFromCheckpoint")}
</button>
<button
class="btn btn--sm"
@@ -719,7 +740,7 @@ function renderRows(row: GatewaySessionRow, props: SessionsProps) {
@click=${() =>
props.onRestoreCheckpoint(row.key, checkpoint.checkpointId)}
>
Restore
${t("sessionsView.restoreCheckpoint")}
</button>
</div>
</div>