refactor(ui): sidebar IA cleanup: Activity to Settings, Dreams into Agents Memory tab, single MCP mutation owner (#104604)

* refactor(ui): move dreams page modules to agents/memory (verbatim)

* refactor(ui): sidebar IA cleanup: Activity to Settings, Dreams into Agents Memory tab, single MCP mutation owner, Usage icon

Folds the per-agent Dreams page into the Agents page as a Memory panel and
deletes the dreams route; moves the session-scoped Activity page out of the
sidebar into Settings > System next to Logs; removes the MCP enable/disable
toggle from Settings > MCP so the Plugins page is the single mutation surface
for config.mcp.servers; gives Usage a coins icon so it no longer collides
with Overview.

Closes #104590

* docs: update Control UI docs for Activity/Memory/MCP sidebar changes

* fix(scripts): fail control-ui i18n sync closed on new untranslated keys without provider auth

An unauthenticated ui:i18n:sync silently recorded English fallbacks, which the
shipped-fallback CI gate then rejects; post-merge translation is owned by the
control-ui-locale-refresh workflow. Sync now errors on new untranslated keys
without a provider (OPENCLAW_CONTROL_UI_I18N_AUTH_OPTIONAL=1 opts back in),
and the ui AGENTS guide documents the commit-en.ts-only contributor flow.

* chore(ui): translate new sidebar keys, refresh i18n baseline, localize Memory tab expectation
This commit is contained in:
Peter Steinberger
2026-07-11 14:24:39 -07:00
committed by GitHub
parent fc0fd1bdda
commit 1b1a41d87f
94 changed files with 750 additions and 1056 deletions
+1 -1
View File
@@ -80,7 +80,7 @@ There is also a grounded historical backfill lane for review and recovery work:
</Accordion>
</AccordionGroup>
The Control UI exposes the same diary backfill/reset flow so you can inspect results in the Dreams scene before deciding whether grounded candidates deserve promotion. A distinct grounded Scene lane shows which staged short-term entries came from historical replay, which promoted items were grounded-led, and lets you clear only grounded-only staged entries without touching live short-term state.
The Control UI exposes the same diary backfill/reset flow on the agent's Memory tab (Agents page) so you can inspect results in the dream scene before deciding whether grounded candidates deserve promotion. A distinct grounded Scene lane shows which staged short-term entries came from historical replay, which promoted items were grounded-led, and lets you clear only grounded-only staged entries without touching live short-term state.
## Deep ranking signals
+5 -5
View File
@@ -180,12 +180,12 @@ A **Search** field at the top of the sidebar opens the command palette (⌘K). T
- Activity tab with browser-local, redaction-first summaries of live tool activity from existing `session.tool` / tool event delivery.
</Accordion>
<Accordion title="Channels, sessions, dreams">
<Accordion title="Channels, sessions, memory">
- Channels: built-in plus bundled/external plugin channels status, QR login, and per-channel config (`channels.status`, `web.login.*`, `config.patch`).
- Channel probe refreshes keep the previous snapshot visible while slow provider checks finish, and label partial snapshots when a probe or audit exceeds its UI budget.
- Sessions: list configured-agent sessions by default, pin frequent sessions, rename them, archive or restore inactive sessions, fall back from stale unconfigured agent session keys, and apply per-session model/thinking/fast/verbose/trace/reasoning overrides (`sessions.list`, `sessions.patch`). Pinned sessions sort above recent unpinned sessions; archived sessions live in the Sessions page's archived view and keep their transcripts. Rows show an unread dot for sessions with activity since their last read, with mark-unread/mark-read actions (`sessions.patch { unread }`), and a Fork action that branches the transcript into a new session (`sessions.create { parentSessionKey, fork: true }`). Overview tiles above the table summarize the loaded roster (session count, live runs, unread sessions, total tokens), each row carries a kind glyph with a live-run dot, status renders as a plain dot plus label, and the Tokens column shows a context-window usage meter when the session reports token and context sizes. Row management actions live in a per-row menu (kebab button or right-click) mirroring the sidebar's session menu, and the row drawer carries the agent runtime and run duration alongside the other session details.
- Session grouping: a Group by control organizes the sessions table into sections by custom groups, channel, kind, agent, or date. Custom groups persist per session via `sessions.patch` (`category`), so sessions started from message channels (Discord, Telegram, WhatsApp, ...) can be categorized too; assign groups by dragging rows onto a section, or with the per-row group selector, and create groups with the New group action.
- Dreams: dreaming status, enable/disable toggle, and Dream Diary reader (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
- Memory (a tab on the Agents page, scoped to the selected agent): dreaming status, enable/disable toggle, and Dream Diary reader (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
</Accordion>
<Accordion title="Cron, tasks, plugins, skills, devices, exec approvals">
@@ -200,7 +200,7 @@ A **Search** field at the top of the sidebar opens the command palette (⌘K). T
<Accordion title="Config">
- View/edit `~/.openclaw/openclaw.json` (`config.get`, `config.set`).
- Profile: a settings page showing the default agent's identity with all-time usage stats — lifetime tokens, peak day, longest session, activity streaks, a year-long token heatmap, top tools, and channel highlights (`usage.cost`, `sessions.usage`).
- MCP has a dedicated settings page for configured servers, enablement, OAuth/filter/parallel summaries, common operator commands, and the scoped `mcp` config editor.
- MCP has a dedicated settings page with read-only server rows (transport, enablement, OAuth/filter/parallel summaries), common operator commands, and the scoped `mcp` config editor; adding, enabling/disabling, and removing servers happens on the Plugins page.
- Model Providers: a settings page listing every configured model provider with its brand icon, auth state (`models.authStatus`), model availability (`models.list`), live plan/quota/billing data where the provider reports it (`usage.status`), and local session spend for the last 30 days (`sessions.usage`). A Refresh action re-reads credential state and provider usage.
- Apply and restart with validation (`config.apply`), then wake the last active session.
- Writes include a base-hash guard to prevent clobbering concurrent edits.
@@ -246,7 +246,7 @@ Typical workflow:
1. Open **MCP** from the sidebar.
2. Check the summary cards for total, enabled, OAuth, and filtered server counts.
3. Review each server row for transport, enablement, auth, filters, timeouts, and command hints.
4. Toggle enablement when a server should remain configured but stay out of runtime discovery.
4. Manage servers (add, enable/disable, remove) on the **Plugins** page, which is the single interactive writer of `mcp.servers`; the row list here links to it.
5. Edit the scoped `mcp` config section for server definitions, headers, TLS/mTLS paths, OAuth metadata, tool filters, and Codex projection metadata.
6. Use **Save** for a config write, or **Save & Publish** when the running Gateway should apply the changed config.
7. Run `openclaw mcp status --verbose`, `openclaw mcp doctor --probe`, or `openclaw mcp reload` from a terminal for static diagnostics, live proof, or cached-runtime disposal.
@@ -255,7 +255,7 @@ The page redacts credential-bearing URL-like values before rendering and quotes
## Activity tab
The Activity tab is an ephemeral browser-local observer for live tool activity, derived from the same Gateway `session.tool` / tool event stream that powers Chat tool cards. It does not add another Gateway event family, endpoint, durable activity store, metrics feed, or external observer stream.
The Activity tab lives in **Settings System**, next to Logs and Debug. It is an ephemeral browser-local observer for live tool activity, derived from the same Gateway `session.tool` / tool event stream that powers Chat tool cards. It does not add another Gateway event family, endpoint, durable activity store, metrics feed, or external observer stream.
Activity entries keep only sanitized summaries and redacted, truncated output previews. Tool argument values are not stored in Activity state; the UI shows that arguments are hidden and records only the argument field count. The in-memory list follows the current browser tab, survives navigation within the Control UI, and resets on page reload, session switch, or **Clear**.
+2 -2
View File
@@ -56,7 +56,7 @@ Hover a filled slot and it will tell you who visited first, and when. The Lobste
Collected observations from people who spend too much time watching their sidebar:
- Lobsters visit the [Dreams page](/concepts/memory) too, where they are asleep. Observers report the sleeping lobster looks suspiciously familiar.
- Lobsters visit the [dream scene](/concepts/memory) too — the Memory tab on the Agents page — where they are asleep. Observers report the sleeping lobster looks suspiciously familiar.
- Night-shift users report their visitors yawn a lot after 10pm.
- Lobsters have been seen shedding. Witnesses describe the experience as "a lot" and the lobster afterwards as "noticeably bigger."
- Some visitors do not come alone.
@@ -73,7 +73,7 @@ Collected observations from people who spend too much time watching their sideba
- After bad news, some lobsters tidy the ledge. It seems to help them.
- Lobsters remember anniversaries even when you do not. If yours shows up in a party hat on an unremarkable day, check the Lobsterdex for the date you met.
- Devoted hosts report their lobsters acquiring titles over the years. There is no known ceremony.
- The Dreams-page sleeper is not entirely asleep. Press gently and see.
- The dream-scene sleeper is not entirely asleep. Press gently and see.
## Privacy
+17
View File
@@ -1643,6 +1643,23 @@ async function syncLocale(
});
}
// Writing NEW English fallbacks trips the shipped-fallback CI gate
// (test/scripts/control-ui-i18n.test.ts), and post-merge translation is owned
// by the control-ui-locale-refresh workflow. An unauthenticated local sync
// must fail here instead of silently recording fallback bundles; refreshing
// already-recorded fallback copy (force mode) stays allowed.
if (!allowTranslate && options.write && !options.checkOnly && !isProviderAuthOptional()) {
const newFallbackKeys = pending.filter((item) => !previousFallbackKeys.has(item.key));
if (newFallbackKeys.length > 0) {
throw new Error(
`${localeLabel}: ${newFallbackKeys.length} new key(s) need translation but no provider is configured. ` +
`Commit only locales/en.ts and let the control-ui-locale-refresh workflow translate after merge, ` +
`or export ANTHROPIC_API_KEY/OPENAI_API_KEY and rerun. ` +
`Set ${ENV_AUTH_OPTIONAL}=1 to record English fallbacks anyway.`,
);
}
}
if (allowTranslate && pending.length > 0) {
const batches = buildTranslationBatches(pending);
const batchCount = batches.length;
+1 -1
View File
@@ -10,7 +10,7 @@ This directory owns Control UI-specific guidance that should not live in the rep
- `scripts/control-ui-i18n.ts`
- `ui/src/i18n/lib/types.ts`
- `ui/src/i18n/lib/registry.ts`
- Pipeline: update English strings and locale wiring here, then run `pnpm ui:i18n:sync` and commit the regenerated locale bundles plus `.i18n` metadata.
- Pipeline: update English strings and locale wiring here and commit `en.ts` only; the `control-ui-locale-refresh` workflow translates and opens a generated PR after merge. Do not run `pnpm ui:i18n:sync` without provider auth (`ANTHROPIC_API_KEY`/`OPENAI_API_KEY`): CI rejects recorded English fallbacks, and sync fails closed on new untranslated keys. Run authenticated sync (and commit bundles plus `.i18n` metadata) only when the change needs it immediately, e.g. a raw-copy-baseline refresh after moving files with hardcoded strings.
- Prioritization report: `pnpm ui:i18n:report [--surface <name>] [--locale <locale>] [--top <n>]` shows current hardcoded-copy focus areas and locale fallback metadata. It is not a drift gate; use `pnpm ui:i18n:check` for that.
- If locale outputs drift, regenerate them. Do not manually translate or hand-maintain generated locale files by default.
+6
View File
@@ -22,6 +22,12 @@ describe("sidebar pinned routes", () => {
expect(SETTINGS_NAVIGATION_ROUTES).toContain("worktrees");
});
it("moves activity into system settings and drops stale pinned entries", () => {
expect(SIDEBAR_NAV_ROUTES).not.toContain("activity");
expect(SETTINGS_NAVIGATION_ROUTES).toContain("activity");
expect(normalizeSidebarPinnedRoutes(["activity", "overview"])).toEqual(["overview"]);
});
it("keeps channel management and settings slices out of the customizable sidebar", () => {
expect(SIDEBAR_NAV_ROUTES).not.toContain("channels");
expect(SIDEBAR_NAV_ROUTES).not.toContain("config");
+4 -8
View File
@@ -67,7 +67,7 @@ describe("navigationIconForRoute", () => {
worktrees: "folder",
channels: "link",
sessions: "fileText",
usage: "barChart",
usage: "coins",
cron: "calendarClock",
tasks: "listChecks",
agents: "bot",
@@ -75,7 +75,6 @@ describe("navigationIconForRoute", () => {
plugins: "puzzle",
"skill-workshop": "wrench",
nodes: "monitor",
dreams: "moon",
config: "settings",
profile: "lobster",
communications: "send",
@@ -118,7 +117,6 @@ describe("titleForRoute", () => {
plugins: "Plugins",
"skill-workshop": "Skill Workshop",
nodes: "Devices",
dreams: "Dreaming",
config: "Settings",
profile: "Profile",
communications: "Communications",
@@ -155,7 +153,6 @@ describe("subtitleForRoute", () => {
plugins: "Install and manage optional capabilities.",
"skill-workshop": "Review, refine, and apply proposals before they become live skills.",
nodes: "Paired devices, live connections, and commands.",
dreams: "Memory dreaming, consolidation, and reflection.",
config: "Edit openclaw.json.",
profile: "Your agent's stats, streaks, and life in the reef.",
communications: "Channels, messages, and audio settings.",
@@ -234,8 +231,8 @@ describe("routeIdFromPath", () => {
expect(routeIdFromPath("/sessions")).toBe("sessions");
expect(routeIdFromPath("/debug")).toBe("debug");
expect(routeIdFromPath("/logs")).toBe("logs");
expect(routeIdFromPath("/dreaming")).toBe("dreams");
expect(routeIdFromPath("/dreams")).toBe("dreams");
expect(routeIdFromPath("/dreaming")).toBeNull();
expect(routeIdFromPath("/dreams")).toBeNull();
expect(routeIdFromPath("/settings/plugins")).toBe("plugins");
expect(routeIdFromPath("/plugins")).toBeNull();
expect(routeIdFromPath("/settings/about")).toBe("about");
@@ -307,8 +304,6 @@ describe("inferBasePathFromPathname", () => {
expect(inferBasePathFromPathname("/settings/general")).toBe("");
expect(inferBasePathFromPathname("/settings/appearance")).toBe("");
expect(inferBasePathFromPathname("/appearance")).toBe("");
expect(inferBasePathFromPathname("/dreaming")).toBe("");
expect(inferBasePathFromPathname("/dreams")).toBe("");
expect(inferBasePathFromPathname("/settings/plugins")).toBe("");
});
@@ -389,6 +384,7 @@ describe("SIDEBAR_NAV_ROUTES", () => {
"worktrees",
"debug",
"logs",
"activity",
"about",
]);
});
+2 -6
View File
@@ -14,7 +14,6 @@ type NavigationItem = {
// list and Settings/Docs live in the sidebar footer, so neither is listed here.
export const SIDEBAR_NAV_ROUTES = [
"overview",
"activity",
"workboard",
"sessions",
"usage",
@@ -25,7 +24,6 @@ export const SIDEBAR_NAV_ROUTES = [
"plugins",
"skill-workshop",
"nodes",
"dreams",
] as const satisfies readonly NavigationRouteId[];
export type SidebarNavRoute = (typeof SIDEBAR_NAV_ROUTES)[number];
@@ -78,7 +76,7 @@ export const SETTINGS_NAVIGATION_GROUPS = [
},
{
labelKey: "nav.settingsGroupSystem",
routes: ["infrastructure", "worktrees", "debug", "logs", "about"],
routes: ["infrastructure", "worktrees", "debug", "logs", "activity", "about"],
},
] as const satisfies readonly SettingsNavigationGroup[];
@@ -93,7 +91,7 @@ const NAVIGATION_ICONS: NavigationItem = {
worktrees: "folder",
channels: "link",
sessions: "fileText",
usage: "barChart",
usage: "coins",
cron: "calendarClock",
tasks: "listChecks",
skills: "zap",
@@ -113,7 +111,6 @@ const NAVIGATION_ICONS: NavigationItem = {
"model-providers": "plug",
debug: "bug",
logs: "scrollText",
dreams: "moon",
plugin: "puzzle",
"new-session": "plus",
};
@@ -211,7 +208,6 @@ const NAVIGATION_COPY: Record<NavigationRouteId, { titleKey: string; subtitleKey
},
debug: { titleKey: "tabs.debug", subtitleKey: "subtitles.debug" },
logs: { titleKey: "tabs.logs", subtitleKey: "subtitles.logs" },
dreams: { titleKey: "tabs.dreams", subtitleKey: "subtitles.dreams" },
plugin: { titleKey: "tabs.plugin", subtitleKey: "subtitles.plugin" },
"new-session": { titleKey: "newSession.title", subtitleKey: "newSession.hint" },
};
-1
View File
@@ -31,7 +31,6 @@ const APP_ROUTE_DEFINITIONS = {
tasks: { path: "/tasks" },
nodes: { path: "/nodes" },
plugin: { path: "/plugin" },
dreams: { path: "/dreaming", aliases: ["/dreams"] },
} as const;
export type RouteId = keyof typeof APP_ROUTE_DEFINITIONS;
-2
View File
@@ -10,7 +10,6 @@ import { page as chatPage } from "./pages/chat/route.ts";
import { pages as configPages } from "./pages/config/route.ts";
import { page as cronPage } from "./pages/cron/route.ts";
import { page as debugPage } from "./pages/debug/route.ts";
import { page as dreamsPage } from "./pages/dreams/route.ts";
import { page as logsPage } from "./pages/logs/route.ts";
import { page as modelProvidersPage } from "./pages/model-providers/route.ts";
import { page as newSessionPage } from "./pages/new-session/route.ts";
@@ -62,7 +61,6 @@ const APP_ROUTE_TREE = [
cronPage,
tasksPage,
nodesPage,
dreamsPage,
pluginPage,
] as const;
+8
View File
@@ -18,6 +18,14 @@ export const icons = {
<line x1="6" x2="6" y1="20" y2="16" />
</svg>
`,
coins: html`
<svg viewBox="0 0 24 24">
<circle cx="8" cy="8" r="6" />
<path d="M18.09 10.37A6 6 0 1 1 10.34 18" />
<path d="M7 6h1v4" />
<path d="m16.71 13.88.7.71-2.82 2.82" />
</svg>
`,
activity: html`
<svg viewBox="0 0 24 24">
<path d="M22 12h-4l-3 9L9 3l-3 9H2" />
@@ -61,6 +61,8 @@ describe("settings sidebar search", () => {
const input = container.querySelector<HTMLInputElement>(".settings-sidebar__search-input");
expect(input?.getAttribute("aria-label")).toBe("Search settings");
expect(input?.placeholder).toBe("Search settings…");
expect(allLabels).toContain("Activity");
expect(allLabels.indexOf("Activity")).toBe(allLabels.indexOf("Logs") + 1);
enterQuery(" ThEmE ");
expect(labels()).toEqual(["Appearance"]);
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:12.777Z",
"generatedAt": "2026-07-11T21:07:33.430Z",
"locale": "ar",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -208,6 +208,7 @@
{"cache_key":"7f4bc10589146ec18ab97233184abe2b6e5b31524437faf90919e5196a962ae4","model":"gpt-5.5","provider":"openai","segment_id":"workboard.badgeWorkerLogs","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"{count} worker logs","text_hash":"2923e2a84e6ed0ca048d280206198b156da6148859e474498d335a44e323e0a8","tgt_lang":"ar","translated":"{count} سجلات العامل","updated_at":"2026-05-30T15:38:27.116Z"}
{"cache_key":"7f628da4b1e5936e34a12657997395ed7e57bb114a0aef7b4ff27fc430e9a300","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.title","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Changes","text_hash":"bbd4b6a86bc65b6ac8e79e97afc61499158edb40f7bb404c70637b46d80a7ad2","tgt_lang":"ar","translated":"التغييرات","updated_at":"2026-07-11T04:53:10.428Z"}
{"cache_key":"7fdb8695e6f2dcd443aeb46794157c79ed1caad2e1d8713999572b80831bcf31","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.restore","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Restore","text_hash":"a76e13b9839270eb73ed11417f7d8acca55df0ad52065799361631d0fff74f27","tgt_lang":"ar","translated":"استعادة","updated_at":"2026-07-05T21:01:06.223Z"}
{"cache_key":"807fcb4a3fe60509b1fc337f7c9f8a1197ef1a8784e1db7a0a5abea1d0383051","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"ar","translated":"الذاكرة","updated_at":"2026-07-11T21:07:33.427Z"}
{"cache_key":"80a7fef73011ad9eea56a61e115a3262f0d66a237477aea6830298e1e5ab773f","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.summaryLabel","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Claude session summary","text_hash":"e9a8e980b4fdaf946d89158d257b45486ae816ffd162d317092d3bd0332f6021","tgt_lang":"ar","translated":"ملخص جلسة Claude","updated_at":"2026-07-11T13:50:53.411Z"}
{"cache_key":"80da683b433076cbdc9ef632952601c62a6b00adf9c0209ab23b1abf93747d6c","model":"claude-opus-4-6","provider":"anthropic","segment_id":"chat.composer.realtimeTalkRequiresMicrophone","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Realtime voice input requires browser microphone access.","text_hash":"a70d86265802e30aac70647cde33c62c5386741941d2ea9f54636a0242109dcd","tgt_lang":"ar","translated":"يتطلب الإدخال الصوتي في الوقت الفعلي الوصول إلى ميكروفون المتصفح.","updated_at":"2026-07-06T22:42:12.115Z"}
{"cache_key":"814087f09b7e6c58cb4a72aafaec5902fca410c1a7f45bc5eed39d8e717d7870","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.truncatedResult","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Some changes were omitted because the diff is very large.","text_hash":"1c0564ef3281e6e1c551539688c40190bb2124fa83bd3ff896c6fed8d4537d8d","tgt_lang":"ar","translated":"تم حذف بعض التغييرات لأن diff كبير جدًا.","updated_at":"2026-07-11T04:53:10.428Z"}
@@ -416,6 +417,7 @@
{"cache_key":"e3470e18bb46c41816c59f479ddf89b0cf0f27e8e7537347d052c34f1358cf14","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.contextUsage","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"{percent}% of context used ({used} / {context} tokens)","text_hash":"f626ed78b8aca81f039ef64637bbdd4cffe0a289b402fd0c6039e977040aba72","tgt_lang":"ar","translated":"تم استخدام {percent}% من السياق ({used} / {context} رموز)","updated_at":"2026-07-09T07:06:24.564Z"}
{"cache_key":"e382f8f3333b4347f5ed215fa1b8bbeaba25942b3d062bece1bcef38792dfce9","model":"gpt-5.5","provider":"openai","segment_id":"newSession.starting","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Starting…","text_hash":"bbe5fc3b9ef39f994c259eaf233d625a500b5219784c82f73b50808d4f79d5dc","tgt_lang":"ar","translated":"جارٍ البدء…","updated_at":"2026-07-10T15:21:17.823Z"}
{"cache_key":"e3f10997695aa626e959035df2efe6376dd98b4a7a1ad4709a073bc4fe43a4a2","model":"gpt-5.5","provider":"openai","segment_id":"connection.retryNow","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Retry now","text_hash":"5148c3e20576923b589bd801ea84dc376213b82fbf8694f64437b621f1690615","tgt_lang":"ar","translated":"إعادة المحاولة الآن","updated_at":"2026-07-05T21:55:35.324Z"}
{"cache_key":"e40d551024150bda29476741db308d9dd8a010278f8f0b6117bb72988bb5d7bf","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"ar","translated":"إدارة الخوادم من صفحة الإضافات.","updated_at":"2026-07-11T21:07:33.428Z"}
{"cache_key":"e54f891d823896f80a4cac7ecd2fe3b3855b63710e33168efa85648cce877eab","model":"gpt-5","provider":"openai","segment_id":"codexSessions.scopeLabel","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Session archive filter","text_hash":"9b7ab0c41b678c43f34c5e4d5b27428141588466c5d14b68bd19bcc93d7b6c38","tgt_lang":"ar","translated":"عامل تصفية أرشيف الجلسات","updated_at":"2026-07-09T10:01:43.759Z"}
{"cache_key":"e5ef7ee167c900480e24a40dbe824eb49ef82c33d580aa53b59f102d4a271b7d","model":"gpt-5.5","provider":"openai","segment_id":"nav.settingsGroupAgents","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"Agents & Tools","text_hash":"493e2edea6e1c48892128656867eab52c07c16ec4f3b59e995b329a18e920328","tgt_lang":"ar","translated":"الوكلاء والأدوات","updated_at":"2026-07-09T08:08:00.664Z"}
{"cache_key":"e6524eced9d1d75aba4b448b6d634ed4c879c1b5a10965d3e81db152b56b14eb","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.autoRefresh5s","source_path":"ui/src/i18n/locales/ar.ts","src_lang":"en","text":"5s","text_hash":"93e3d8c5b10657d2884f177488b689aadf82a83f962237cb602b3314386ab3b7","tgt_lang":"ar","translated":"5 ث","updated_at":"2026-06-17T14:15:04.326Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:11.528Z",
"generatedAt": "2026-07-11T21:07:21.261Z",
"locale": "de",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -12,6 +12,7 @@
{"cache_key":"09abd5fb8ddb238faed68da94e0955949098603566f206a91d936c3b27832da0","model":"gpt-5.5","provider":"openai","segment_id":"usage.providerUsage.last7Days","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"7 days","text_hash":"7f920bb639c9307589b65e5f639391d65dcb86b0611ac47f58f7c769215326ee","tgt_lang":"de","translated":"7 Tage","updated_at":"2026-07-06T06:40:15.357Z"}
{"cache_key":"0a313ab60c98d3e6524d35da71d5e012b59a1ad041404760d2ae39cb83fc0493","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneBusy","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Microphone inputs are busy or unavailable to the browser.","text_hash":"9f33c30cb2370916f2edd079ad5cabab6a94dd185a89f4f7db357b4f31d1f3dd","tgt_lang":"de","translated":"Mikrofoneingänge sind belegt oder für den Browser nicht verfügbar.","updated_at":"2026-07-06T17:56:14.727Z"}
{"cache_key":"0a8a51257ec5f97159ae69026327602a984873fd507864a38e79681c3105607e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailAutomationBoard","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Board: {board}","text_hash":"96d7493589e40e17803b3bf643dff1b891a4ebf57f5d2b36af0a7ddd09e64b84","tgt_lang":"de","translated":"Board: {board}","updated_at":"2026-06-16T14:12:53.111Z"}
{"cache_key":"0b9a3cc3e63ebe2b5a064b7bf7ac014b29bc781df91abcee9f4e3bcafa5cf56c","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"de","translated":"Speicher","updated_at":"2026-07-11T21:07:21.259Z"}
{"cache_key":"0ba1ed78c7b4806b729ca4a2d02aa50bcc534d81a86d2201e2b3afa55af69258","model":"gpt-5.5","provider":"openai","segment_id":"chat.splitView.splitDown","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Split down","text_hash":"8730b89df7caaf5b5090f9b7365a0a03e0a13d9682dc6418f556b8a676d9e98f","tgt_lang":"de","translated":"Nach unten teilen","updated_at":"2026-07-06T07:23:18.013Z"}
{"cache_key":"0bed53d61e85bf1058cc30cc588726056dd57be6b4443c8ec938ec1126754252","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.markUnreadCount","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Mark {count} as unread","text_hash":"19b370543f8c7b0e263a73d5bbd6d0ef8df6b3ed4da0941dc5de1feec926e270","tgt_lang":"de","translated":"{count} als ungelesen markieren","updated_at":"2026-07-11T10:40:46.031Z"}
{"cache_key":"0c6110524735793eb0d968c8eea1001ba46146debc8c841129ebe66f816a6664","model":"gpt-5.5","provider":"openai","segment_id":"subtitles.worktrees","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Isolated agent task checkouts and recovery snapshots.","text_hash":"bc794dc846493e3c5f88964268af19b7dd818eae942c596002ef4067ba5a3d0c","tgt_lang":"de","translated":"Isolierte Checkouts für Agentenaufgaben und Wiederherstellungs-Snapshots.","updated_at":"2026-07-05T21:00:37.724Z"}
@@ -111,6 +112,7 @@
{"cache_key":"38e90629c5ab653eb98c51b46a96cd32b666c4df22f51e52491b54bf55937b4f","model":"gpt-5.5","provider":"openai","segment_id":"languages.hi","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"हिन्दी (Hindi)","text_hash":"fab2abfce45382f3031c59477017700a8cb5dfaf8d15379dc24304809b97c7d5","tgt_lang":"de","translated":"हिन्दी (Hindi)","updated_at":"2026-06-26T21:43:23.990Z"}
{"cache_key":"393e05f4f87ff8aeec1f5c0e35dc15c59806036ff7ce7e5f37b6c2719851ca74","model":"gpt-5","provider":"openai","segment_id":"codexSessions.scope.archived","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Archived","text_hash":"bdb86505f8062d15f152cef71dd4ca89609d5bf8e98771dcd2c9f70d247403da","tgt_lang":"de","translated":"Archiviert","updated_at":"2026-07-09T10:01:43.726Z"}
{"cache_key":"39943bee880812b78bde280b710a86b0b14e244881bfbbb3bb4cb0362fbc27ea","model":"gpt-5.5","provider":"openai","segment_id":"browser.start","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Start browser","text_hash":"4af2fc76dfa1bfc8b4b30cefd65fb5ca171d792bedc4cab90f082df7c9b961ff","tgt_lang":"de","translated":"Browser starten","updated_at":"2026-07-11T02:17:45.131Z"}
{"cache_key":"3b2478f2d6a1827fd22db086910dec1d0aea0d7b97762e068195563e391a68b4","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"de","translated":"Server auf der Plugins-Seite verwalten.","updated_at":"2026-07-11T21:07:21.259Z"}
{"cache_key":"3cac7757683c4ca9fcf12c3f70f783d1ae4108c8657514a1261cf62d164a1253","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.changedCount","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"{count} changed","text_hash":"db3cb1c116f0a410592fe8556a43513156ce84faa3b69de7e68635474b2f6a10","tgt_lang":"de","translated":"{count} geändert","updated_at":"2026-06-16T14:13:06.672Z"}
{"cache_key":"3d2cf57b5c53bbfb394245677d806a93358a500f039a740fe47a94b85b83c94a","model":"gpt-5.5","provider":"openai","segment_id":"tabs.mcp","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"MCP","text_hash":"53f13ae99ed53bd346eb8e1c8cefb7ef8260683b50401caf101360967ea052aa","tgt_lang":"de","translated":"MCP","updated_at":"2026-05-31T05:36:35.020Z"}
{"cache_key":"3e5cbd636bef68c7fae2d517646a5c0d993630ded3825851ee46fbf2667fa6d8","model":"gpt-5.5","provider":"openai","segment_id":"chat.splitView.sessionSelect","source_path":"ui/src/i18n/locales/de.ts","src_lang":"en","text":"Pane session","text_hash":"0deb0759c3643f2659c0838326276513c119e7923672a118c4ed13c012c4b628","tgt_lang":"de","translated":"Bereichssitzung","updated_at":"2026-07-06T07:23:18.013Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:11.702Z",
"generatedAt": "2026-07-11T21:07:23.524Z",
"locale": "es",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -229,6 +229,7 @@
{"cache_key":"5fe573377ed25df9669347027c35a0370b7802be55943f7af293eeff86acf347","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.contextUsage","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"{percent}% of context used ({used} / {context} tokens)","text_hash":"f626ed78b8aca81f039ef64637bbdd4cffe0a289b402fd0c6039e977040aba72","tgt_lang":"es","translated":"{percent}% del contexto usado ({used} / {context} tokens)","updated_at":"2026-07-09T07:06:15.991Z"}
{"cache_key":"600e5c7b2f832e6d77ebfb4a89bd111329fba81165b9fa99ada4abeaa31a4830","model":"gpt-5.5","provider":"openai","segment_id":"pluginsPage.official","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Official","text_hash":"c409c66f71f2750e0262d81f0816938f6b8b1ffccb55fc59a4a6c5c8aae81c1e","tgt_lang":"es","translated":"Oficial","updated_at":"2026-07-10T02:23:54.836Z"}
{"cache_key":"60291fee8a0b1a9cc3257822164d96e0b4bc727a6d4f002e573f6e3cbd315044","model":"gpt-5.5","provider":"openai","segment_id":"aboutPage.artifactSubtitle","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Identity embedded when this browser artifact was built.","text_hash":"3c221132e75dafd8c0c14abd79a611bb3392e044f6da5e5e4f54cfd748b2237e","tgt_lang":"es","translated":"Identidad integrada cuando se compiló este artefacto del navegador.","updated_at":"2026-07-10T09:46:56.274Z"}
{"cache_key":"60396689787071398934a1243fb8fceeb6b8d11ac645b1ad0b89e28ffb35e5e1","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"es","translated":"Gestionar servidores en la página de Plugins.","updated_at":"2026-07-11T21:07:23.520Z"}
{"cache_key":"60a8bfa89026989e6a4bc79e4b7094af5910881bf1b554adf36142e19535951a","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.autoRefresh5s","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"5s","text_hash":"93e3d8c5b10657d2884f177488b689aadf82a83f962237cb602b3314386ab3b7","tgt_lang":"es","translated":"5s","updated_at":"2026-06-17T14:14:13.986Z"}
{"cache_key":"60daa5ba6299436ab1261d676963db2337b9958be28c83f7c1de9f987d0861b7","model":"gpt-5.5","provider":"openai","segment_id":"pluginsPage.enabled","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Enabled","text_hash":"92c1cdfdf4cb9cf6fcca962f206de36fd5d60db1178bc9461052f8de703a0e06","tgt_lang":"es","translated":"Activado","updated_at":"2026-07-10T02:23:54.836Z"}
{"cache_key":"618a589f34990673e9d3eddf322bbd5d18841f3510743957f09b5c059b79f04e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailUpdatedValue","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Updated: {time}","text_hash":"5e72d5445f018c9d08aa34ae0178fb9aa49eea6a0afd0c8d379f20b7af3e8aa0","tgt_lang":"es","translated":"Actualizado: {time}","updated_at":"2026-06-16T14:14:11.215Z"}
@@ -546,6 +547,7 @@
{"cache_key":"e38957fabb7e57de22927fb4b46d97ad834c83d3ff30f74c7e26910beae399d8","model":"gpt-5.5","provider":"openai","segment_id":"workspaces.widget.menu.remove","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Remove","text_hash":"c3812fc4acb861d5182fc2b8155f327f736fbe5e5eb86a7bd7afcb6dc5497282","tgt_lang":"es","translated":"Eliminar","updated_at":"2026-07-10T02:23:54.836Z"}
{"cache_key":"e3d78817f4f01e6b7df5e7d4af14355d2043188b77d481a7633b82ba4a056dba","model":"gpt-5.5","provider":"openai","segment_id":"languages.ru","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Русский (Russian)","text_hash":"ea81bf0fd46410b501bddee074ab6f00b0cdf377a6cafe608dcf2c28f7cb2f4e","tgt_lang":"es","translated":"Русский (ruso)","updated_at":"2026-06-26T21:43:26.471Z"}
{"cache_key":"e4aadfef4e512d1613adb3f1c2febc03a56f821c9553d78bc97b52cf3b6eb635","model":"gpt-5.5","provider":"openai","segment_id":"browser.urlPlaceholder","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Enter a URL and press Enter","text_hash":"3b6dc87d786334836143f8153f5fbdeaac12afecd9fe2127aa62742320eb24b3","tgt_lang":"es","translated":"Introduce una URL y pulsa Enter","updated_at":"2026-07-11T02:17:49.455Z"}
{"cache_key":"e57ba42f705dbb46e5247e30d0870449be1eba53164d1ce4d0d6bfabac308f34","model":"gpt-5.5","provider":"openai","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"es","translated":"Memoria","updated_at":"2026-07-10T02:23:49.859Z"}
{"cache_key":"e6f337fcde42a6086a9d616ff283ed0e472922cd967306a50e615a5cf31f21bb","model":"gpt-5.5","provider":"openai","segment_id":"overview.palette.items.plugins","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Plugins","text_hash":"9514b7ff4860ead73491768e45cce0ce20e6e3473a7b272e496c43c875d80ac5","tgt_lang":"es","translated":"Plugins","updated_at":"2026-07-10T02:23:58.471Z"}
{"cache_key":"e7dd28e8cb5b0106bfec5a7e17709da183e603a1ddf01dab77705a60a1d6ae91","model":"gpt-5.5","provider":"openai","segment_id":"common.colorModeOption","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Color mode: {mode}","text_hash":"d5b61a3af66f845d2ab32795685ca0b37889374de15f66ae3f848abf83169a43","tgt_lang":"es","translated":"Modo de color: {mode}","updated_at":"2026-07-07T08:47:26.313Z"}
{"cache_key":"e81fe39f884e84b2b3209c6f0eb133499339b1bbf35b54844028d539957743cf","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewDefaultAgent","source_path":"ui/src/i18n/locales/es.ts","src_lang":"en","text":"Default agent","text_hash":"94da52ecd6c5c3b77b89b8427f4bcaf11a40ddf68f5b00171977349fb2e6abc9","tgt_lang":"es","translated":"Agente predeterminado","updated_at":"2026-06-17T14:14:08.769Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:14.424Z",
"generatedAt": "2026-07-11T21:07:48.611Z",
"locale": "fa",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -340,6 +340,7 @@
{"cache_key":"b811148c02e519e012d9d894e3593b347ff9ef22b5438860fe49d90fe6ca3e43","model":"gpt-5.5","provider":"openai","segment_id":"newSession.baseBranch","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Base branch","text_hash":"9acbb9ebea63701494639b7f2b27206b28628ab7994d45a8f41edf2f8e21efc7","tgt_lang":"fa","translated":"شاخه پایه","updated_at":"2026-07-10T18:00:05.730Z"}
{"cache_key":"b86ed109c2630d6a326ee59375540071a12cb4d083af8cd22f3d31ccc111f62d","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.workSessions","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Work","text_hash":"104ab9213e28e4ff5ba0b4086457503e8a4656815cfec7bcf2799d76a3db081d","tgt_lang":"fa","translated":"کار","updated_at":"2026-07-10T18:00:09.518Z"}
{"cache_key":"b8af869d20109033345af1f9b9fe7f41903e71d5c8e35e0c8e38384164d38f79","model":"claude-opus-4-8","provider":"anthropic","segment_id":"claudeSessions.read","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Read","text_hash":"9b9a8d05a7ec353bda84f9c1bb3178c299de3001b5e970508ddc889c487f92ca","tgt_lang":"fa","translated":"خوانده‌شده","updated_at":"2026-06-16T14:18:48.730Z"}
{"cache_key":"b9ec537120c4d9fac033fcca984b8ff1a7e7e63df7fe9b63066658f061451f6e","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"fa","translated":"مدیریت سرورها در صفحه Plugins.","updated_at":"2026-07-11T21:07:48.609Z"}
{"cache_key":"ba1d261ba41968a31bd74b0007d57510bc743835aec138276143338d865fb0be","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.talkSensitivity","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Sensitivity","text_hash":"ebb57a260d58207c3cce2e12e8663ecdc0c74147d138655d6714bc577a0768f6","tgt_lang":"fa","translated":"حساسیت","updated_at":"2026-07-06T20:20:02.809Z"}
{"cache_key":"ba3d898c289904b4f844f634dfb9f358df678d9c923bee07a57c41af866bd8f1","model":"gpt-5.5","provider":"openai","segment_id":"chat.workspaceFiles.dragToDock","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Drag to dock right or bottom","text_hash":"3fae26368a3c23df2e4e25691983c2a56efdbf92d5b970101e0aa432db9c48f6","tgt_lang":"fa","translated":"برای سنجاق کردن به راست یا پایین بکشید","updated_at":"2026-07-10T06:08:51.724Z"}
{"cache_key":"bb8ab521ebbcd0354d5a53e7cb7363b3998c6641ddf44287e1eeb7c202c8c8e8","model":"gpt-5.5","provider":"openai","segment_id":"newSession.worktreeName","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Worktree name","text_hash":"9dd7d78ef00b05c28acfef1520cda8f7170ae9ca879c813b34842a1781164b5f","tgt_lang":"fa","translated":"نام Worktree","updated_at":"2026-07-10T18:00:05.730Z"}
@@ -406,6 +407,7 @@
{"cache_key":"d382b19ededb3482003e126253df533069ae8011291d6476225308aefd11bcba","model":"gpt-5","provider":"openai","segment_id":"codexSessions.summary.sessions","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"sessions","text_hash":"1225ae6c1ae69dcb4ee4781b703e12206f3b549cd3ca151070a8d8d8f371dd71","tgt_lang":"fa","translated":"نشست‌ها","updated_at":"2026-07-09T10:01:43.762Z"}
{"cache_key":"d3f79742b8b051531e012f02c7066c1ad279c7e8d6a9bd9ada66ed7e73da7ada","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.repo","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Repository","text_hash":"13d6ff07b8a5d792ec87d5ec83bff2730ee77fa8f4fcd89ca5f1d688f64b4c73","tgt_lang":"fa","translated":"مخزن","updated_at":"2026-07-05T21:01:42.282Z"}
{"cache_key":"d45dd1fd4cd78a7f7e8296027624d83d4d2854c16b32c735326dc8c8a9763ed8","model":"gpt-5.5","provider":"openai","segment_id":"tabs.profile","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Profile","text_hash":"d696a35bdd1883da07a8d6c41bb7a3153381b23aa197629ee273479a6eaa5a9c","tgt_lang":"fa","translated":"نمایه","updated_at":"2026-07-09T11:29:07.982Z"}
{"cache_key":"d4adcdc23861c931f1fc9564a2b503f23b1da8fc7b4783ec25c02649f12e1fb1","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"fa","translated":"حافظه","updated_at":"2026-07-11T21:07:48.608Z"}
{"cache_key":"d4b2926fad507bbc5290c4f93e1f1a069a55a0ae70a0fec00df71e7bb963bbb4","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.untracked","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"untracked","text_hash":"86ed2df8017823dff5b258f8082cf4be80ad80fed3388b6818d9a631a49e464e","tgt_lang":"fa","translated":"ردیابی‌نشده","updated_at":"2026-07-11T04:53:45.252Z"}
{"cache_key":"d4ba94ae0d4d84c9a3c254beecc884d0c0f96906a5f073d56e624ba79ca092ad","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.statusAdded","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Added","text_hash":"6b02e0d363a4af1c95eef50364bb0202c8b250aa05a48a69e68fd7787b4b0632","tgt_lang":"fa","translated":"افزوده‌شده","updated_at":"2026-07-11T04:53:45.252Z"}
{"cache_key":"d5c4b64d66909d8fa32afd7eb2953326bbb05f118389f56f590696ac1ae85b3c","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.statLifetimeTokens","source_path":"ui/src/i18n/locales/fa.ts","src_lang":"en","text":"Lifetime tokens","text_hash":"3d7b0d3aa231e0a255b58b67aa9eeb2b921b19ce9aa983bb867d7b7cf3e16ce9","tgt_lang":"fa","translated":"توکن‌های کل دوره","updated_at":"2026-07-09T11:29:07.982Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:12.358Z",
"generatedAt": "2026-07-11T21:07:27.617Z",
"locale": "fr",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -197,6 +197,7 @@
{"cache_key":"535a8aa891502c8f1c0a0d7ba619e8bf1ff64e4ae9309cdffb1875f961c54912","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneNoneFound","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"No microphone inputs were found.","text_hash":"3aa0952aa2a5987227a12656a28131c7e153b5efe3fca4043c742fb289eeb37c","tgt_lang":"fr","translated":"Aucune entrée microphone na été trouvée.","updated_at":"2026-07-06T17:56:30.924Z"}
{"cache_key":"54805cb2d1873f9eed23e46f2c8152a66d6b3b8448851f129f3d7ca6c1843f5f","model":"gpt-5.5","provider":"openai","segment_id":"pluginsPage.removeConfirm","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Remove this plugin?","text_hash":"f91ee570e954b92163f67bf2b37b20236e213fbee3ee1e0046a9ece5b998c4a8","tgt_lang":"fr","translated":"Supprimer ce plugin ?","updated_at":"2026-07-10T02:24:53.076Z"}
{"cache_key":"5480feb777d91dc759403e6ad76292c9cab5329cda4b349839557238494b84c9","model":"gpt-5","provider":"openai","segment_id":"codexSessions.summary.onlineHosts","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"online","text_hash":"f6fc84c9f21c24907d6bee6eec38cabab5fa9a7be8c4a7827fe9e56f245bd2d5","tgt_lang":"fr","translated":"en ligne","updated_at":"2026-07-09T10:01:43.739Z"}
{"cache_key":"54b9635a8c0a86d9ac9e7cf4ea2c7fb0754d1cad757b6ae775d291a622b9f585","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"fr","translated":"Gérez les serveurs sur la page Plugins.","updated_at":"2026-07-11T21:07:27.614Z"}
{"cache_key":"568fe723fea09ed35104036e2aaa01a0a5760ff90d42d59b39573fd16bcc3d7a","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.loadingMore","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Loading…","text_hash":"ba3bbbe10d8bef66441c88536ce7b8e724e2829b59a3da658654f4961cd61ae5","tgt_lang":"fr","translated":"Chargement…","updated_at":"2026-07-09T10:01:43.739Z"}
{"cache_key":"56aee61d9ae3c85a6d81dab063b20c35d90da97a62d763cb081dbbea016b1052","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.unknownSession","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"No workspace is associated with this session.","text_hash":"56dc1838e10ef8835cfe11fc765ef556bf9ff4d36387e74aa4ae65883d6b4a6c","tgt_lang":"fr","translated":"Aucun espace de travail nest associé à cette session.","updated_at":"2026-07-11T04:52:52.885Z"}
{"cache_key":"578bb582711633223c7729d971ee2bdb4eed82aea839375438c2d01a9ffe0053","model":"gpt-5.5","provider":"openai","segment_id":"chat.toolCards.toolError","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Tool error","text_hash":"a6c64c286a8795034ac5030b74633d3b476b5375e094485698b982879b0bb617","tgt_lang":"fr","translated":"Erreur de loutil","updated_at":"2026-05-31T06:43:56.223Z"}
@@ -628,4 +629,5 @@
{"cache_key":"feb2150897114b0cd2f0b0df4d5e4b4c1f34daf7966cb4eb60f6fc199d9df5f0","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.sortUpdated","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Last updated","text_hash":"382ac5f308f76c24b2c981e2041943bc2be2229cbd285ad362b9af1cfc386ef8","tgt_lang":"fr","translated":"Dernière mise à jour","updated_at":"2026-07-06T15:07:02.499Z"}
{"cache_key":"feb6874b8e285acef219cbca9e67d4c93a4bc22373db295723f8d267a80be379","model":"gpt-5.5","provider":"openai","segment_id":"chat.backgroundTasks.viewTranscript","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"View transcript","text_hash":"f5190d98549b91feb2368776ba76d6b5bc6aebdac5f4b4bf9b0e9d523a2db4c4","tgt_lang":"fr","translated":"Afficher la transcription","updated_at":"2026-07-11T00:45:08.252Z"}
{"cache_key":"feee58c9934ad37bdd2c1e2b593dbbef7d768b470ced137157b24b1d5e9b952c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.talkModelAuto","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Auto","text_hash":"0286249762f7c94349cdc0ba3bb2255baf9a80036e2193ead1d77696f888582f","tgt_lang":"fr","translated":"Automatique","updated_at":"2026-07-06T20:20:02.809Z"}
{"cache_key":"ff20376a732745912a833e1aceb5da78c51adeb9203ee44121c6d90ec25a3878","model":"gpt-5.5","provider":"openai","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"fr","translated":"Mémoire","updated_at":"2026-07-10T02:24:49.792Z"}
{"cache_key":"ff307f3a8cc1bf4e8ef0e94b1ac657ad4297b364b0b4b1d9c783d65d6adb0508","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.transcript.toolResult","source_path":"ui/src/i18n/locales/fr.ts","src_lang":"en","text":"Tool result","text_hash":"9bb620efa692f707a302a5f42464015a54c20843e2f76f18a1542626b886bb91","tgt_lang":"fr","translated":"Résultat de loutil","updated_at":"2026-07-11T13:50:40.595Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:12.558Z",
"generatedAt": "2026-07-11T21:07:30.656Z",
"locale": "hi",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -472,6 +472,7 @@
{"cache_key":"3b068c1621e88abbcc537b7a0a32031cbf394c220fecf4e22bd47a1ee68c889e","model":"gpt-5.5","provider":"openai","segment_id":"chat.runControls.newSession","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"New session","text_hash":"cffdba22adf299e8fc6f937ef63ca4352ca9db3022d4634004c0a9bd10aa0dfe","tgt_lang":"hi","translated":"नया सेशन","updated_at":"2026-06-26T21:36:23.330Z"}
{"cache_key":"3b483a7f7466adb9c83b2e79d4fd06ca502e0eafe784a6e314c67423b289a6f1","model":"gpt-5.5","provider":"openai","segment_id":"cron.runs.searchPlaceholder","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Summary, error, or job","text_hash":"ef9c8b23d8cb48be34ce590dd08a750fdf316b9060b4cbeb0cacb35ca39d51c7","tgt_lang":"hi","translated":"सारांश, त्रुटि, या जॉब","updated_at":"2026-06-26T21:37:23.206Z"}
{"cache_key":"3b4b10b4f539daf70b57cc5f6914754f11b4ba8fc1697cf77bd7e1cc0966d8af","model":"gpt-5.5","provider":"openai","segment_id":"workboard.eventAttemptUpdated","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Attempt updated","text_hash":"4f4c9984589da8e84df4db1f456131af2e5c645a653251dd44be503060d75ec1","tgt_lang":"hi","translated":"प्रयास अपडेट किया गया","updated_at":"2026-06-26T21:33:00.304Z"}
{"cache_key":"3b7d26a8e20fc528a1c7c8fdb96b5d277f74b825d0ecafe4541185b2a7b9f5df","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"hi","translated":"Plugins पेज पर सर्वर प्रबंधित करें।","updated_at":"2026-07-11T21:07:30.653Z"}
{"cache_key":"3bbe40d84349bca9a6e52428dffebf49f17e8831fb8c385984d12c50e57ec063","model":"gpt-5.5","provider":"openai","segment_id":"aboutPage.branch","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Branch","text_hash":"52656e8104eef3fddd3d4546903fa0de93c0625abf47b3dd8130f7705d6a513e","tgt_lang":"hi","translated":"Branch","updated_at":"2026-07-05T21:01:02.212Z"}
{"cache_key":"3bc6a33999122e8a693bd5154c32b5f74a509ee4a9a6ff0b6cd47240591dfce9","model":"gpt-5.5","provider":"openai","segment_id":"usage.scope.instance","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Current instance","text_hash":"962ffc6c660941ecc714fa817ce552f7f73ffe70e5f9f353797df5f15bdca136","tgt_lang":"hi","translated":"वर्तमान इंस्टेंस","updated_at":"2026-06-26T21:34:31.303Z"}
{"cache_key":"3c4375b061dc76f682e9672f994d59742e8bf7ac3f27306fa89734781b5a9868","model":"gpt-5.5","provider":"openai","segment_id":"channels.nostr.noProfile","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"No profile set.","text_hash":"a2d0128c8e18d50be9ac5e6f0f45a22cd31b543129a027ac17c7c06b9b0959dc","tgt_lang":"hi","translated":"कोई प्रोफ़ाइल सेट नहीं है।","updated_at":"2026-06-26T21:29:48.427Z"}
@@ -590,6 +591,7 @@
{"cache_key":"4bb13e1c851c975e7716f58040264e0302f77487b558fe1ea2e8d29883a15b82","model":"gpt-5.5","provider":"openai","segment_id":"activity.searchPlaceholder","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Filter by tool, summary, run, session","text_hash":"f8bd7464d3d4cfa89578618229d3d06859d4ddefe0647493b19f62a57940e658","tgt_lang":"hi","translated":"टूल, सारांश, रन, सेशन के अनुसार फ़िल्टर करें","updated_at":"2026-06-26T21:31:44.582Z"}
{"cache_key":"4be7468e7d6fb4a8b4e6b787f11c96c1e934e62b8b4a1a95ddce8350241b73fe","model":"gpt-5.5","provider":"openai","segment_id":"chat.workspaceFiles.path","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Workspace path","text_hash":"1fddb73e40f0f5cc6fbf747930a11f857b7a37991caeb4d8677433bbc50a2a38","tgt_lang":"hi","translated":"वर्कस्पेस पाथ","updated_at":"2026-06-26T21:36:39.137Z"}
{"cache_key":"4c0571f4fb4a5f79c610293f29dce3d580a75ce031bef955e6e346d030cbe52b","model":"gpt-5.5","provider":"openai","segment_id":"agents.tabs.channels","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Channels","text_hash":"4c8906cf76f5740ab8792aef9f0033fe21a92045e90b357816064e9f6860a03e","tgt_lang":"hi","translated":"चैनल","updated_at":"2026-06-26T21:30:41.032Z"}
{"cache_key":"4c443593b1538f2274c910f9ab90bf2e1eb98f99837e55abae545eef5edf3a81","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"hi","translated":"मेमोरी","updated_at":"2026-07-11T21:07:30.653Z"}
{"cache_key":"4c4da8b0414951d300aada4e46adbda0980983db0ef92be93cecabcc832d0b2d","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.offExplicit","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"off (explicit)","text_hash":"f1351f70a8c211140022d7dfe6a9908e38329fe93ac90e9c3a2bde2677f44520","tgt_lang":"hi","translated":"बंद (स्पष्ट)","updated_at":"2026-06-26T21:30:21.093Z"}
{"cache_key":"4cf62465548bc83380cae7a73aa4b97fce3b46ae756ef05f13bb95c9431b14b4","model":"gpt-5.5","provider":"openai","segment_id":"workboard.agentFilterConfiguredDefaultHelp","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Cards explicitly assigned to the configured default agent.","text_hash":"9bb80530da1dfd473936d94642b83cc668b7362cb65675a565f17569937af92f","tgt_lang":"hi","translated":"कॉन्फ़िगर किए गए डिफ़ॉल्ट एजेंट को स्पष्ट रूप से असाइन किए गए कार्ड।","updated_at":"2026-06-26T21:32:18.718Z"}
{"cache_key":"4d05a87594e4e835cee2ebdb954d31292508385b303d1853224e167ed351a83f","model":"gpt-5.5","provider":"openai","segment_id":"usage.empty.hint","source_path":"ui/src/i18n/locales/hi.ts","src_lang":"en","text":"Select a date range and click Refresh to load usage.","text_hash":"4dcf5dc94773068c4f25aea20473dffbbd254ea813f8890bd5bf233df13614a5","tgt_lang":"hi","translated":"उपयोग लोड करने के लिए दिनांक सीमा चुनें और Refresh पर क्लिक करें।","updated_at":"2026-06-26T21:34:51.300Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:13.543Z",
"generatedAt": "2026-07-11T21:07:40.245Z",
"locale": "id",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -343,6 +343,7 @@
{"cache_key":"aafdf0513119d28449d59b0178da95fbf0377096ebbd648fb8f5efafc7bb99b1","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.heatmapTitle","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Token activity","text_hash":"05f1f9836e5173d8ab4539357cfa050c3ad480fc049ddc22cb8fb8ea437997e2","tgt_lang":"id","translated":"Aktivitas token","updated_at":"2026-07-09T11:28:19.904Z"}
{"cache_key":"ab4087229a73b3b71e608dd538e061894816e3175b3fa75c1fa29e9353286567","model":"gpt-5.5","provider":"openai","segment_id":"workboard.badgeWorkerLogs","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"{count} worker logs","text_hash":"2923e2a84e6ed0ca048d280206198b156da6148859e474498d335a44e323e0a8","tgt_lang":"id","translated":"{count} log worker","updated_at":"2026-05-30T15:38:39.708Z"}
{"cache_key":"ab4a76ff401b4159639138b1698ea1a379f553fc22b5ac428de8f552f274e165","model":"gpt-5.5","provider":"openai","segment_id":"newSession.browse","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Browse folders","text_hash":"66279466d3bec8d3a13e816a312b62ac113cbca82d5662888aac2ec474398620","tgt_lang":"id","translated":"Jelajahi folder","updated_at":"2026-07-11T06:48:35.120Z"}
{"cache_key":"ab7b40dc41479ccd349c5fc48556ba975fc9e81384b63089966fb39c69139450","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"id","translated":"Memori","updated_at":"2026-07-11T21:07:40.243Z"}
{"cache_key":"abb8077d910504f458d6a1c5d8befe44464719438397548fb4573a4b993a6c96","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotatePrompt.introUntitled","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"I annotated the page at {url} — the attached screenshot shows my markup.","text_hash":"c54bf197cc35241ef3dcb469ef22a8c2467b6ddd47d02fbae7f4b5a4641d1429","tgt_lang":"id","translated":"Saya menganotasi halaman di {url} — tangkapan layar terlampir menunjukkan markup saya.","updated_at":"2026-07-11T02:19:28.776Z"}
{"cache_key":"abe90d9eb81d5790a273b1440f2b94a39bd61f0537841829f42a6f83d81a26ca","model":"gpt-5.5","provider":"openai","segment_id":"browser.starting","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Starting browser…","text_hash":"293860b8ed55b27ca9bc36deb118d5610841aad1fb324326ecb4a370af9a95e6","tgt_lang":"id","translated":"Memulai browser…","updated_at":"2026-07-11T02:19:28.776Z"}
{"cache_key":"ac33af0755f123eef7329b04adf42116ef03df6f657b17d9b155cb60e93ecef8","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.emptyTitle","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"A fresh shell","text_hash":"da0d613f0ec767755258b8a2c43bec5d305997daeca16068dc927fbda8194378","tgt_lang":"id","translated":"Cangkang baru","updated_at":"2026-07-09T11:28:19.904Z"}
@@ -430,6 +431,7 @@
{"cache_key":"d65a531cf330793b8bc9807c3b34ae66ed59d05a6f40d47d9ccae814e78580c5","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.transcript.loading","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Loading transcript…","text_hash":"0606d0e8977e7005f2142a85ce689aec42a867a50eefaf25fc5f1691f960eae7","tgt_lang":"id","translated":"Memuat transkrip…","updated_at":"2026-07-11T10:25:15.645Z"}
{"cache_key":"d75b732d4f3af2e3193e42ea7d9b7a764afa01c897c66939c18ba20ea1025893","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.talkSensitivity","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Sensitivity","text_hash":"ebb57a260d58207c3cce2e12e8663ecdc0c74147d138655d6714bc577a0768f6","tgt_lang":"id","translated":"Sensitivitas","updated_at":"2026-07-06T20:20:02.809Z"}
{"cache_key":"d78243b9f4340dc7d5cf0b7964e2b73c699659692c7e9da6c15d94442c162d52","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.loadingMicrophones","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Loading microphones…","text_hash":"042a481c407f31b97b0cc8ff4e6c8b8f3f6e85d798cba8549c348d6d33a9945c","tgt_lang":"id","translated":"Memuat mikrofon…","updated_at":"2026-07-06T17:33:58.361Z"}
{"cache_key":"d89b96929a41005ca7e6f33db456e50959eefdb26d1b5f67ac92af4ac295fa3a","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"id","translated":"Kelola server di halaman Plugins.","updated_at":"2026-07-11T21:07:40.243Z"}
{"cache_key":"d8b6f259af732ca15e7e1a094d8935a542077a5919ca7e5f36ebfc5a98cd307a","model":"gpt-5.5","provider":"openai","segment_id":"subtitles.mcp","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"MCP servers, auth, tools, and diagnostics.","text_hash":"3eb7bf08a81e00ed41da1b60096320c5b90ff4d4e78b3f84ecd9ce45a62eaea1","tgt_lang":"id","translated":"Server MCP, autentikasi, alat, dan diagnostik.","updated_at":"2026-05-31T05:36:49.780Z"}
{"cache_key":"d916c9efb6e2dd88be509cec8ffe5b318ba23230ff8ad732463a01cd96424d44","model":"gpt-5.5","provider":"openai","segment_id":"nodes.pairing.waiting","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Official OpenClaw mobile apps connect automatically after scanning.","text_hash":"40dd288c9aa182a2809e74f4511402a69db7b153685db075bb5d216d964c3be1","tgt_lang":"id","translated":"Aplikasi seluler resmi OpenClaw terhubung otomatis setelah dipindai.","updated_at":"2026-07-04T16:48:34.014Z"}
{"cache_key":"d9428950e8ee231b8a4af00d0b4ce85b5530bef4ebe23d089304e024850d13b8","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.unknownStatus","source_path":"ui/src/i18n/locales/id.ts","src_lang":"en","text":"Unknown","text_hash":"b764cdc0eab7137467211272fa539f1260d1bf2e71bcf6ff3bdc960f5c16aa14","tgt_lang":"id","translated":"Tidak diketahui","updated_at":"2026-06-16T14:16:50.406Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:12.988Z",
"generatedAt": "2026-07-11T21:07:34.858Z",
"locale": "it",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -130,6 +130,7 @@
{"cache_key":"3cec7f61410edbc952139da9adb2a14497f2d131b6b4de67c23ba17535d11bd2","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.browserCount","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"{count} shown","text_hash":"e57b4adfe868fd74a183650103d820176d4960bd0bdb677d9985db09f9752867","tgt_lang":"it","translated":"{count} mostrati","updated_at":"2026-06-16T14:15:52.376Z"}
{"cache_key":"3d380fd54b67a868e65927ab21cf27d42b4ac60266297a9e45748a2f9a85546c","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.restore","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Restore","text_hash":"a76e13b9839270eb73ed11417f7d8acca55df0ad52065799361631d0fff74f27","tgt_lang":"it","translated":"Ripristina","updated_at":"2026-07-05T21:01:11.440Z"}
{"cache_key":"3d7cab1d804b3c7fa41995057d9a834913a4ff28c9b0dbc023e078c32274c96d","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotatePrompt.introUntitled","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"I annotated the page at {url} — the attached screenshot shows my markup.","text_hash":"c54bf197cc35241ef3dcb469ef22a8c2467b6ddd47d02fbae7f4b5a4641d1429","tgt_lang":"it","translated":"Ho annotato la pagina all'indirizzo {url} — lo screenshot allegato mostra il mio markup.","updated_at":"2026-07-11T02:19:01.933Z"}
{"cache_key":"3dd8e05aa634698e1e46390bb19d2b064e5e60f9aa05f4c2d6998bcbf13439c8","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"it","translated":"Memoria","updated_at":"2026-07-11T21:07:34.855Z"}
{"cache_key":"3e1f5f4525137d5e5cfdf1ed9891cc8bf2793900f76ea8a4006b73fb1533df20","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.dateYesterday","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Yesterday","text_hash":"566181254b293aa66653e43313be9e39c12d44f9ac4fcd3236ef1e9c50a2903f","tgt_lang":"it","translated":"Ieri","updated_at":"2026-07-05T14:39:59.770Z"}
{"cache_key":"3ea263c874303b3a038780ec369a8922270fe0e78151112e6cd1950251ba49e2","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.dateOlder","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Older","text_hash":"03281c889c2869e091390f9ad5dd13f0f0e46b42c9c4698f857902451deb3450","tgt_lang":"it","translated":"Meno recenti","updated_at":"2026-07-05T14:39:59.770Z"}
{"cache_key":"3fdec5c35f7160e3a5856a996a52445a9c8ee0a38c6f961d9af4ed96100c7ee3","model":"gpt-5.5","provider":"openai","segment_id":"browser.closeTab","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Close tab","text_hash":"50a3f9523122bd0776d8a43c5356c47eaa9c626eb2aa849c88a3ebc2e12c4c99","tgt_lang":"it","translated":"Chiudi scheda","updated_at":"2026-07-11T02:18:56.643Z"}
@@ -268,6 +269,7 @@
{"cache_key":"78dc9236c38e4808eddc060951fb7644c37116c4669aa1bbf8b7717bf5c770a2","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.autoRefresh15s","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"15s","text_hash":"21b5f52ded33ab19c16a680c4e280b8f9992395b514290163abf272f06394a6f","tgt_lang":"it","translated":"15s","updated_at":"2026-06-17T14:19:20.279Z"}
{"cache_key":"7973f0d7f4fe77d9fa62d10be9a551cc782ce5cfde33c81e05144ebf5e4e765e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"newSession.browserUp","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Parent folder","text_hash":"158f5a01ef8cfb1e6d91f8c321dd3a63f5e457f9650eecd662857701762bd31d","tgt_lang":"it","translated":"Cartella superiore","updated_at":"2026-06-16T14:15:52.375Z"}
{"cache_key":"79f9e5c78626dfd0dd454f307c7f96215ae08ec348240a184599e2ded0f6a92d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.autoRefreshOff","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Off","text_hash":"ca7981b46ecf2c1787b6d76d81d9fd7fa0ca95842e2fcc2a452869891a9334d1","tgt_lang":"it","translated":"Disattivato","updated_at":"2026-06-17T14:19:01.168Z"}
{"cache_key":"7a124b1d17abd3f81da1e9324e4dd61bf1df0692d449f2d7ce72682f1765ef84","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"it","translated":"Gestisci i server nella pagina Plugins.","updated_at":"2026-07-11T21:07:34.855Z"}
{"cache_key":"7bb12a00109aa9d4214d5db7133ef597175d197919d724a7cf019ae07abbb19e","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.toolRuns","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"{count} runs","text_hash":"627a5f9e7cc0ba0f9bc65c55fb5e6421519e92d24f35dabffabb1eaf16aa750b","tgt_lang":"it","translated":"{count} esecuzioni","updated_at":"2026-07-09T11:27:56.887Z"}
{"cache_key":"7bbdb2b5c65d89484ca303bc32fb246b7534840ef18205d16e5172178904ed6a","model":"gpt-5.5","provider":"openai","segment_id":"newSession.createFailed","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Couldn't create the session.","text_hash":"5ba041f31fe891ed7958e64cb191ecf176c3c3d6088f383c125a04286acb7f99","tgt_lang":"it","translated":"Impossibile creare la sessione.","updated_at":"2026-07-10T17:59:29.738Z"}
{"cache_key":"7c20a7cfed226ac111a5670fae29598394a4a1216c2e1de2d0122e0838f5766d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailAutomationBoard","source_path":"ui/src/i18n/locales/it.ts","src_lang":"en","text":"Board: {board}","text_hash":"96d7493589e40e17803b3bf643dff1b891a4ebf57f5d2b36af0a7ddd09e64b84","tgt_lang":"it","translated":"Board: {board}","updated_at":"2026-06-16T14:15:39.914Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:11.913Z",
"generatedAt": "2026-07-11T21:07:24.895Z",
"locale": "ja-JP",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -177,6 +177,7 @@
{"cache_key":"5ea1a79afac20807152e5804e7874cc973149c53c727a8563f2d90bad7fb86eb","model":"gpt-5.5","provider":"openai","segment_id":"newSession.start","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Start session","text_hash":"b1c52ee3677debeb3b2e7dc8b41d1da1b08c02241ec1cc1f35d28637afcecf5c","tgt_lang":"ja-JP","translated":"セッションを開始","updated_at":"2026-07-10T17:58:54.036Z"}
{"cache_key":"5f38fa783854dec94aa204a3692c6a3b2e7ae97c53a18963b269c021779b1012","model":"gpt-5.5","provider":"openai","segment_id":"newSession.browse","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Browse folders","text_hash":"66279466d3bec8d3a13e816a312b62ac113cbca82d5662888aac2ec474398620","tgt_lang":"ja-JP","translated":"フォルダを参照","updated_at":"2026-07-11T06:48:20.944Z"}
{"cache_key":"603262ecc6d47b82918c35c4c70d1c86fec0b832705fdb6ab76625a718dcca51","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.searchResults","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Search results","text_hash":"e978b00de465a271a13bf2f6b9d74d67fdfaa7d973a37378fa32f988c3280599","tgt_lang":"ja-JP","translated":"検索結果","updated_at":"2026-06-16T14:14:19.257Z"}
{"cache_key":"61984a01dc816262f8e60ab7175adbe286be0d731861c072167d870049a60dbe","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"ja-JP","translated":"プラグインページでサーバーを管理します。","updated_at":"2026-07-11T21:07:24.892Z"}
{"cache_key":"61ac251982a83cda0c6471077df39b0c279a5c342d160d1636dc5e7750736bd3","model":"gpt-5.5","provider":"openai","segment_id":"newSession.browserEmpty","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"No subfolders","text_hash":"db964e0f5e1cdf223e00b57c10d3dac16b732698a70456ea1c45078594607dd3","tgt_lang":"ja-JP","translated":"サブフォルダはありません","updated_at":"2026-07-11T06:48:20.944Z"}
{"cache_key":"61faf56270008b3b1d72fc1b58bec747ce1b4e6c3c9ed9646992fca9a48ba469","model":"gpt-5.5","provider":"openai","segment_id":"browser.resize","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Resize browser panel","text_hash":"b9e8d91e55f65e9b1a1f765784dbc5edb55b77c01ee902203d975ae6928c02d5","tgt_lang":"ja-JP","translated":"ブラウザパネルのサイズを変更","updated_at":"2026-07-11T02:17:57.654Z"}
{"cache_key":"622b0cca1bd9d5f6fbeeafec605997f61558f68862637d5f530ed59dbc206a7b","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.contextUsage.summary","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Session context usage: {used} of {limit} ({pct}%)","text_hash":"a62b97af0e5d02b8722725e2be0a936dd3d317a1f506ea15c766e87413b66a0d","tgt_lang":"ja-JP","translated":"セッションのコンテキスト使用量: {used}/{limit} ({pct}%)","updated_at":"2026-07-05T10:16:05.198Z"}
@@ -333,6 +334,7 @@
{"cache_key":"b5da5df9f05841310e48272ac3b3a7010f1fbc69cb9f6eec02824640751960f7","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.contextUsage.limitWeekly","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Weekly · all models","text_hash":"144f0e5ca031e40c0cba8a53a9dcb4d9534c74edd976587231da2cd14b4944df","tgt_lang":"ja-JP","translated":"週次 · すべてのモデル","updated_at":"2026-07-09T11:49:17.247Z"}
{"cache_key":"b5da6546178ab3f19c2c262a7935d841b4823835bd11468f524ae11c50c20a21","model":"gpt-5","provider":"openai","segment_id":"codexSessions.summaryLabel","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Codex session summary","text_hash":"667dedf7bd0ebc80d4e312cc52f824e6a5307c1c6210f2e72e5b93da824da502","tgt_lang":"ja-JP","translated":"Codex セッションの概要","updated_at":"2026-07-09T10:01:43.715Z"}
{"cache_key":"b61346116969aed93153099a59d43c734e7f6b25a7ab861a57390a98773ab2d5","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.refresh","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Refresh","text_hash":"0e91610117029a62a478b7fa7df0b8598bebe3ab1e192d4b1882e310719c9671","tgt_lang":"ja-JP","translated":"更新","updated_at":"2026-07-09T10:01:43.715Z"}
{"cache_key":"b7e4ae3b1c85267494d3e8b49e8ea435ec40930fd524df61666240492d1c3f28","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"ja-JP","translated":"メモリ","updated_at":"2026-07-11T21:07:24.892Z"}
{"cache_key":"b87bc6805d1174940ff2f06ebc4e5561e91020c0c1917103cd5884cd7425cadd","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailWorkerLogs","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Worker logs","text_hash":"67766b9f222a7ccdae6beb7d6e7877d1a13abb8a346a8c5c803a4380bdf851b1","tgt_lang":"ja-JP","translated":"ワーカーログ","updated_at":"2026-06-16T14:14:04.101Z"}
{"cache_key":"b905388202da5f370626eccc2fbdc441dcbad0b49df25dfb38d0c158e97d71f9","model":"gpt-5.5","provider":"openai","segment_id":"browser.newTab","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"New tab","text_hash":"1e08fda9c966d3bafb00c51e70935fad9f56990d4bfd0fdb70300ce15a60c7a6","tgt_lang":"ja-JP","translated":"新しいタブ","updated_at":"2026-07-11T02:17:57.654Z"}
{"cache_key":"ba3d3413e01475592a40c0fcbd267ed5fe6d3bd3698b0080c4e886c3fde1adb3","model":"claude-opus-4-8","provider":"anthropic","segment_id":"worktrees.ownerSession","source_path":"ui/src/i18n/locales/ja-JP.ts","src_lang":"en","text":"Session","text_hash":"6959b4159575d8dd76d9f3bbe2c6437904f861e7860c35abd18deffb1c3425a0","tgt_lang":"ja-JP","translated":"セッション","updated_at":"2026-06-16T14:14:19.257Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:12.127Z",
"generatedAt": "2026-07-11T21:07:26.485Z",
"locale": "ko",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -55,6 +55,7 @@
{"cache_key":"1d58e25d5d921bab46e72a8674418e0fe5030cbe103604f645948917a63f9daf","model":"gpt-5.5","provider":"openai","segment_id":"chat.archivedSessionDisabled","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Restore this session to send messages.","text_hash":"c21bd35c2bef2266f419cbb4214cfd7b0af89386aef88ec8b11837844240e0d9","tgt_lang":"ko","translated":"메시지를 보내려면 이 세션을 복원하세요.","updated_at":"2026-07-02T14:30:10.945Z"}
{"cache_key":"1d79047022b5c5a33d6fbbadf8566da179f94d4a6f608df8b042d8346689e253","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.statusAdded","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Added","text_hash":"6b02e0d363a4af1c95eef50364bb0202c8b250aa05a48a69e68fd7787b4b0632","tgt_lang":"ko","translated":"추가됨","updated_at":"2026-07-11T04:52:50.079Z"}
{"cache_key":"1dd73abd726e45213b6e637b2d56b1acbf49232cd97d04e06a27cbd556e512a5","model":"gpt-5.5","provider":"openai","segment_id":"languages.ru","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Русский (Russian)","text_hash":"ea81bf0fd46410b501bddee074ab6f00b0cdf377a6cafe608dcf2c28f7cb2f4e","tgt_lang":"ko","translated":"Русский (Russian)","updated_at":"2026-06-26T21:43:29.284Z"}
{"cache_key":"1f7ff2ab8d08210e83caf0fd854c65a29653131d37ce5bd26a701d646e4d22af","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"ko","translated":"메모리","updated_at":"2026-07-11T21:07:26.483Z"}
{"cache_key":"1f8134e238855a3af9a0c81c44e944c5847f04cd69fa2827419baa8ba86d2593","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.groupRowCountOne","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"{count} session","text_hash":"c0975b42c84d7da963f4c962d1e2c1ee78eb18efc7ebec75fb3ce761ce9a40db","tgt_lang":"ko","translated":"{count}개 세션","updated_at":"2026-07-05T14:39:46.951Z"}
{"cache_key":"1f8271bef019b64c672efed6d52ea38702726abff41a696d283cb0f4e004293c","model":"gpt-5","provider":"openai","segment_id":"codexSessions.loadingMore","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Loading…","text_hash":"ba3bbbe10d8bef66441c88536ce7b8e724e2829b59a3da658654f4961cd61ae5","tgt_lang":"ko","translated":"불러오는 중…","updated_at":"2026-07-09T10:01:43.732Z"}
{"cache_key":"1f8427a3216fef1fc3e482fb33ea952dead5c388a59273911484170ec390379e","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.searchResults","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Search results","text_hash":"e978b00de465a271a13bf2f6b9d74d67fdfaa7d973a37378fa32f988c3280599","tgt_lang":"ko","translated":"검색 결과","updated_at":"2026-06-16T14:14:34.760Z"}
@@ -438,6 +439,7 @@
{"cache_key":"e7fb5504e4780abf13c871e43375bef3cb6e5b5f173dd6a0eeaaa9ab45787677","model":"gpt-5.5","provider":"openai","segment_id":"aboutPage.branch","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Branch","text_hash":"52656e8104eef3fddd3d4546903fa0de93c0625abf47b3dd8130f7705d6a513e","tgt_lang":"ko","translated":"브랜치","updated_at":"2026-07-05T21:00:52.598Z"}
{"cache_key":"e8081578e7e6a0677dc97db787a50cc648eb66b509828be1acd8929fc1064dda","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailNotePlaceholder","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Add a decision, blocker, or proof note...","text_hash":"0e40ea8371be2fcbd8379458b0da541ca0dce5dc86357dea64a4d8fac1c742dc","tgt_lang":"ko","translated":"결정, 차단 요소 또는 증빙 메모를 추가하세요...","updated_at":"2026-06-16T14:14:28.718Z"}
{"cache_key":"e85e1023704d5c3d9716e0f484eb307e0949367743270bfdfb7e37e3209456ce","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.empty.subtitle","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Install and use Claude CLI or Claude Desktop, then refresh this view.","text_hash":"ba8fea0aefc3937ff6e15977c78d9323c17deec9486a17a4747d78f3d8ba60e7","tgt_lang":"ko","translated":"Claude CLI 또는 Claude Desktop을 설치하고 사용한 다음 이 보기를 새로 고치세요.","updated_at":"2026-07-11T13:50:35.257Z"}
{"cache_key":"e8e7c67cfc178ee7653b6a88d200b0ba69d961adc752f88e5ca0641d6409a643","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"ko","translated":"플러그인 페이지에서 서버를 관리하세요.","updated_at":"2026-07-11T21:07:26.483Z"}
{"cache_key":"ea146c9941f403134e3e86595811fb7b5e583e275d4b1d5cd5bec46f0a3919e9","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.title","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Changes","text_hash":"bbd4b6a86bc65b6ac8e79e97afc61499158edb40f7bb404c70637b46d80a7ad2","tgt_lang":"ko","translated":"변경 사항","updated_at":"2026-07-11T04:52:50.078Z"}
{"cache_key":"eadd9751a821cdea61363c05135d0b2323daa3b53fedc5e8593194b3e285bc05","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.chats","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Chats","text_hash":"ef5b4049bb367b05531fa2c2982dbc5b710c3dde724d9a2683747c1da9b61eac","tgt_lang":"ko","translated":"채팅","updated_at":"2026-07-10T17:59:05.245Z"}
{"cache_key":"eaf134a6cfe2d6ff0da657cadf0c90e97ea1ee103cf145e90fb181a3d6e2d90c","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotatePrompt.elementDetail","source_path":"ui/src/i18n/locales/ko.ts","src_lang":"en","text":"Marked element (page-reported): {descriptor} — {width}×{height}px at ({x}, {y}).","text_hash":"26f6a06bb620377485f379992db59e348653f7dd09db7ebbad9984c6da3c1d37","tgt_lang":"ko","translated":"표시된 요소(페이지에서 보고됨): {descriptor} — ({x}, {y}) 위치의 {width}×{height}px.","updated_at":"2026-07-11T02:18:12.376Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:14.239Z",
"generatedAt": "2026-07-11T21:07:46.465Z",
"locale": "nl",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -13,6 +13,7 @@
{"cache_key":"0394bd181483ae05300a020d15d17bd35868afa8a791e24c8b36883562e78891","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotatePrompt.introUntitled","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"I annotated the page at {url} — the attached screenshot shows my markup.","text_hash":"c54bf197cc35241ef3dcb469ef22a8c2467b6ddd47d02fbae7f4b5a4641d1429","tgt_lang":"nl","translated":"Ik heb de pagina op {url} geannoteerd — de bijgevoegde screenshot toont mijn markering.","updated_at":"2026-07-11T02:20:09.408Z"}
{"cache_key":"039b405f2c3d4ba99f32c918f96ee19469b171e112e2f50880e7261c92d40ae6","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.dateOlder","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Older","text_hash":"03281c889c2869e091390f9ad5dd13f0f0e46b42c9c4698f857902451deb3450","tgt_lang":"nl","translated":"Ouder","updated_at":"2026-07-05T14:40:20.847Z"}
{"cache_key":"045789fc8109cd8a5328d056e5567e891e59cd808071f145ee059657d08310f8","model":"gpt-5.5","provider":"openai","segment_id":"pluginsPage.connectorClawHubNote","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Community plugins on ClawHub","text_hash":"b25a21cec535548e2d8dae1071188e23f10d70e4e7d4b4a846c745b41d88ceff","tgt_lang":"nl","translated":"Communityplugins op ClawHub","updated_at":"2026-07-10T02:28:53.502Z"}
{"cache_key":"04e510fc4a0e8c14461e208fefb28249a531d416e1286a0e267d9d488721eabc","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"nl","translated":"Beheer servers op de Plugins-pagina.","updated_at":"2026-07-11T21:07:46.461Z"}
{"cache_key":"051ed7fa831f0423235dcd7a4d2bb957229d8c7280f1db5cb68e076c068651f8","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.sortSessions","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Sort sessions","text_hash":"6680f07d3df817d60180acbbc6e207689d28caaa27ac23749f93261b8111a38d","tgt_lang":"nl","translated":"Sessies sorteren","updated_at":"2026-07-06T15:07:02.499Z"}
{"cache_key":"06696ef7eb525d3adda4323083d030b433a2b8eff13c04cf53c130daf12d946c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.loading","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Loading session workspace…","text_hash":"bc6b2400fad20ee1d95d8de4ec6eef9ff1818ab080f86513384029519eaf4f4e","tgt_lang":"nl","translated":"Sessiewerkruimte laden…","updated_at":"2026-06-16T14:18:17.492Z"}
{"cache_key":"074147c1fe6ae8a5c4ee3f0c15f9aac7a5c10a1b7212d529233fd2d7fd169e22","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.healthRunning","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"running","text_hash":"c071cf5f5ed6f884cc70155b6f05f755fd46a302d05e4261b7e92ce878bbfed8","tgt_lang":"nl","translated":"actief","updated_at":"2026-06-17T14:17:36.035Z"}
@@ -561,6 +562,7 @@
{"cache_key":"ecc2e58be6e2a520ef609fee14e73281d0972fd4a05253374e58a6d4e17a2bc0","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.statusModified","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Modified","text_hash":"e8ce5dcaf408935ff76747226d2e8bee4319a2f593c1d7a838115e56183d1f37","tgt_lang":"nl","translated":"Gewijzigd","updated_at":"2026-07-11T04:53:40.304Z"}
{"cache_key":"eced283124e659d7d118b62383cb001ce16b5852475fe03c9ba0e9796c3e1ed2","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.dateNoActivity","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"No activity","text_hash":"0cf9505f9f97c8359cc143ba3e88bedaba3a4ae92c2794ffd1b097270732ed18","tgt_lang":"nl","translated":"Geen activiteit","updated_at":"2026-07-05T14:40:20.847Z"}
{"cache_key":"ecf55f10effe7949c5b432c5714b8c56a9e583055e54b83d17e3ece3e1e8b45d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.commentaryLabel","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Commentary","text_hash":"4a7a75ab79cde05b0b1baa8f7a704c991586ea44d7e7793e57178ef56f778ff8","tgt_lang":"nl","translated":"Commentaar","updated_at":"2026-07-01T01:08:53.808Z"}
{"cache_key":"ed2b23e3f7331dcf6410bdcba3792ad361a7a70a6c6ff70a356715213ea8af25","model":"gpt-5.5","provider":"openai","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"nl","translated":"Geheugen","updated_at":"2026-07-10T02:28:58.148Z"}
{"cache_key":"ed2dd36ed7de22efa8a3b9b41794981db00f932f76405c9f4a683d1bfa4ee0c5","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailAddNote","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Add note","text_hash":"63565c0485fec4f743719849734553a5d7947f5962ec9e831e3bce131b3c47fb","tgt_lang":"nl","translated":"Notitie toevoegen","updated_at":"2026-06-16T14:18:17.492Z"}
{"cache_key":"ed5b8e1ae56bb7c74292ab3444118866423072ae3c1b988d5722aef81b7ff89d","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.partial","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Unavailable hosts: {count}. Other hosts remain available.","text_hash":"00ca17db32e78382e78e5877fd167f21e6baf40783b4cf581f34be5ffd1bd05b","tgt_lang":"nl","translated":"Onbeschikbare hosts: {count}. Andere hosts blijven beschikbaar.","updated_at":"2026-07-09T10:01:43.729Z"}
{"cache_key":"ed8c937b12b473e33e4aec13a124a636f3d078e30055da2426aff7472c089607","model":"gpt-5.5","provider":"openai","segment_id":"pluginsPage.filterLabel","source_path":"ui/src/i18n/locales/nl.ts","src_lang":"en","text":"Filter installed plugins","text_hash":"f349ae2a9963d44d8f99a2995afcfb8704c119ad97c6c409ce7dcf6ac080cb9f","tgt_lang":"nl","translated":"Geïnstalleerde plugins filteren","updated_at":"2026-07-10T02:28:53.502Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:13.714Z",
"generatedAt": "2026-07-11T21:07:41.599Z",
"locale": "pl",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -60,6 +60,7 @@
{"cache_key":"16eda730e1492667ae42e1f819428ed9d03e4940f28191e129da48f9da93f4d0","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneListUnsupported","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"This browser cannot list microphone inputs.","text_hash":"fa99f66cc346509afe8c5e3437ad299409a60be69d8b2b70138d8c42176052d9","tgt_lang":"pl","translated":"Ta przeglądarka nie może wyświetlić listy wejść mikrofonu.","updated_at":"2026-07-06T17:57:07.854Z"}
{"cache_key":"1801d5dc126e4a74dfaab286a9686034c0aa7210a21b7ea49a155cd489074a14","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.subtitle","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Isolated repository checkouts owned by OpenClaw.","text_hash":"6a3984ca864c9188fa8c05e732f6831b501b4caed6bd61b60e48e9b0cf74bd0c","tgt_lang":"pl","translated":"Izolowane kopie robocze repozytoriów należące do OpenClaw.","updated_at":"2026-07-05T21:01:26.445Z"}
{"cache_key":"180b3da988aa27e4b1c6ed13734840ff55a4a9fa2c60639558caa57cbedf6e1d","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.contextUsage.contextWindow","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Context window","text_hash":"7696d0855331622dc12438057f5509348f9d6f0ec2eb3580e18a99d31eba86db","tgt_lang":"pl","translated":"Okno kontekstu","updated_at":"2026-07-05T10:16:26.554Z"}
{"cache_key":"18924b09119f7ff23c595f4b2633680f8546db8ffa852741cdc0fc93c4fbb2e2","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"pl","translated":"Pamięć","updated_at":"2026-07-11T21:07:41.597Z"}
{"cache_key":"18f4b8c1d0fe46d6ad7c00bb9bf71c041df255c2bd0e510296f9a0a5c9855e59","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.host.node","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Node","text_hash":"e93372533f323b2f12783aa3a586135cf421486439c2cdcde47411b78f9839ec","tgt_lang":"pl","translated":"Węzeł","updated_at":"2026-07-09T10:01:43.766Z"}
{"cache_key":"191c24c2f9508285a26999d97d4beb9991434a4d79723acda69ec0b0c2bc7769","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneFallback","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Microphone {number}","text_hash":"357eae20db9739dfdbb59ec21db70200f6ca9ee257c28ed637712f147af419ec","tgt_lang":"pl","translated":"Mikrofon {number}","updated_at":"2026-07-06T17:57:07.854Z"}
{"cache_key":"19500a302b61d074dccd6bd51d1f4ca407c34d7640f7d617ab9097b0d6dded9d","model":"gpt-5","provider":"openai","segment_id":"codexSessions.status.idle","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Idle","text_hash":"ab0171ca0494d441cb6fe96e2efbe1c2a129f1d87cd6c17f03613cfd111149dd","tgt_lang":"pl","translated":"Bezczynna","updated_at":"2026-07-09T10:01:43.766Z"}
@@ -468,6 +469,7 @@
{"cache_key":"e3588a91d64474d8274acd311bc38b00040105b98c40c2539674e224f90acd3b","model":"gpt-5.5","provider":"openai","segment_id":"connection.retryNow","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Retry now","text_hash":"5148c3e20576923b589bd801ea84dc376213b82fbf8694f64437b621f1690615","tgt_lang":"pl","translated":"Spróbuj ponownie teraz","updated_at":"2026-07-05T21:55:48.401Z"}
{"cache_key":"e4329aa6f7f264722f4561c825055d7ada884b6242bc6c7da377c2acd8b54560","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.files","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Workspace","text_hash":"87bb59ba2f92f2a5a9f13e021fd58dd14ae5c065b1046146875e6e68d5ebc8b7","tgt_lang":"pl","translated":"Obszar roboczy","updated_at":"2026-06-16T14:17:14.640Z"}
{"cache_key":"e4521feea8208d7f2cc57a0a2820c3a7943e3a50c213afce95c1029d20fc2989","model":"gpt-5.5","provider":"openai","segment_id":"newSession.draftRow","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"New session","text_hash":"cffdba22adf299e8fc6f937ef63ca4352ca9db3022d4634004c0a9bd10aa0dfe","tgt_lang":"pl","translated":"Nowa sesja","updated_at":"2026-07-10T15:21:41.615Z"}
{"cache_key":"e4de780c6493cdd58678ad408e09e9e015e37b61c162f3128f7e108140454575","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"pl","translated":"Zarządzaj serwerami na stronie Wtyczek.","updated_at":"2026-07-11T21:07:41.597Z"}
{"cache_key":"e540128e586ccb863a84fa9f2b61468df5516e84e8eb32e8e9c218e3b0dabd2b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewStale","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Stale","text_hash":"40c9e59c5e152b0ae9affc84d8461c29b75a7709e4506307eeedf246b526014e","tgt_lang":"pl","translated":"Nieaktualne","updated_at":"2026-06-17T14:16:32.528Z"}
{"cache_key":"e544c21ba97b023a5805b9a12c81fd842688b1ec3ca863ec3249ace9d7da9674","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.emptyFilteredTitle","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"No cards match this view","text_hash":"a272617e183ba1dff3f7f140d0851b64baf95f4827ff729d23dfeb05c2069875","tgt_lang":"pl","translated":"Brak kart pasujących do tego widoku","updated_at":"2026-06-17T14:16:37.628Z"}
{"cache_key":"e56236d17b512483f573d24a5fcedf24eee2d31608fe28533962f2e8e1c70841","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotateClear","source_path":"ui/src/i18n/locales/pl.ts","src_lang":"en","text":"Clear","text_hash":"83b12c2216efb4fdc924e1deb5182e905e4926ed0c1c324d467107f46d5a26a9","tgt_lang":"pl","translated":"Wyczyść","updated_at":"2026-07-11T02:19:32.402Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:11.369Z",
"generatedAt": "2026-07-11T21:07:19.948Z",
"locale": "pt-BR",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -105,6 +105,7 @@
{"cache_key":"302767e4409b872a11e3344017d24a7def82626d42943267f8ba360e8a90fb39","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.summary.sessions","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"sessions","text_hash":"1225ae6c1ae69dcb4ee4781b703e12206f3b549cd3ca151070a8d8d8f371dd71","tgt_lang":"pt-BR","translated":"sessões","updated_at":"2026-07-09T10:01:43.718Z"}
{"cache_key":"307241a63c30b4abea7b7d03ad20fbdeadf0901648426863ea2c252a4c4ab9d5","model":"gpt-5.5","provider":"openai","segment_id":"newSession.baseBranch","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Base branch","text_hash":"9acbb9ebea63701494639b7f2b27206b28628ab7994d45a8f41edf2f8e21efc7","tgt_lang":"pt-BR","translated":"Branch base","updated_at":"2026-07-10T17:58:42.698Z"}
{"cache_key":"318b52e388ac5399bc642a065d384d064f7b098e90c2bfa66b7e275572d3c7d5","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.updateAvailable","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Update available","text_hash":"ff8b555d818f0b25bbdd1bec8b479660bac7fc276acbe993e759bf67fed32c34","tgt_lang":"pt-BR","translated":"Atualização disponível","updated_at":"2026-07-11T03:30:23.054Z"}
{"cache_key":"31e7288ec6bfecbcb9b98216ca3453442f34df25e4df4ae24aaa46cef496420a","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"pt-BR","translated":"Gerencie servidores na página de Plugins.","updated_at":"2026-07-11T21:07:19.945Z"}
{"cache_key":"31e7c6612c04fc2e36b5d973a14def704d56b18af0c46fa96872cbe6d0679c16","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.lastActive","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Last active","text_hash":"bcdf701c4dfbaee3a2162f9b9affd87a23a13426c391f95e964d983851b58a05","tgt_lang":"pt-BR","translated":"Última atividade","updated_at":"2026-07-05T21:00:34.411Z"}
{"cache_key":"322e3115a45abec088171ecf487f91e3f9d146428872caedfcaff50e560e9d1d","model":"gpt-5","provider":"openai","segment_id":"codexSessions.title","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Sessions across your computers","text_hash":"23b30c777a12daeb3e5471cd51530189b621db9fdec4e6ea976e5a97516fac22","tgt_lang":"pt-BR","translated":"Sessões em todos os seus computadores","updated_at":"2026-07-09T10:01:43.718Z"}
{"cache_key":"328b16b2532ada2bf594d3cc589637f1ec809902df1194b6f7644d4a2a78c033","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.session","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Session","text_hash":"6959b4159575d8dd76d9f3bbe2c6437904f861e7860c35abd18deffb1c3425a0","tgt_lang":"pt-BR","translated":"Sessão","updated_at":"2026-06-16T14:13:25.058Z"}
@@ -397,6 +398,7 @@
{"cache_key":"d77c54c95fde6661931fa9c02f685997d8bd8a47ede33c9e4c9a78b209eeb86b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.path","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Workspace path","text_hash":"1fddb73e40f0f5cc6fbf747930a11f857b7a37991caeb4d8677433bbc50a2a38","tgt_lang":"pt-BR","translated":"Caminho do workspace","updated_at":"2026-06-16T14:13:25.058Z"}
{"cache_key":"d7a74137ca8557480101f8f3916e6d3f5f24e7d3ef8e6ada5bf46f7568a70cf4","model":"gpt-5.5","provider":"openai","segment_id":"workboard.eventAttachmentAdded","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Attachment added","text_hash":"f39a309fb0054d8e6c512733d6f3a4791c6b63157a388d72f635574d98b49b3e","tgt_lang":"pt-BR","translated":"Anexo adicionado","updated_at":"2026-05-30T15:38:08.357Z"}
{"cache_key":"d8d4b4e03ca6780c2ce6d5c3970a5a7a142706dbbfcf5de42a4f472ed8024ae6","model":"gpt-5.5","provider":"openai","segment_id":"usage.providerUsage.last7Days","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"7 days","text_hash":"7f920bb639c9307589b65e5f639391d65dcb86b0611ac47f58f7c769215326ee","tgt_lang":"pt-BR","translated":"7 dias","updated_at":"2026-07-06T06:40:15.357Z"}
{"cache_key":"d904ced0c41cc23a8ae35075f2b8a89bff70d5021eaeb2bcb5afff8c945df9b5","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"pt-BR","translated":"Memória","updated_at":"2026-07-11T21:07:19.945Z"}
{"cache_key":"d928b24cfd222eaa174bee189584378363b53ffa772c71354a278fe93f49ddef","model":"gpt-5.5","provider":"openai","segment_id":"codexSessions.transcript.reasoning","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Reasoning","text_hash":"d8211e24e83d1600a1b0cfe2f7baa68e4d4eb71131a0b2b1b2050cba111ea481","tgt_lang":"pt-BR","translated":"Raciocínio","updated_at":"2026-07-11T10:24:43.509Z"}
{"cache_key":"d93f9231ce6cb8c62276a8c9a91dd6961908cf4e2bd9bc60e575cb200ba85432","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.changedCount","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"{count} changed","text_hash":"db3cb1c116f0a410592fe8556a43513156ce84faa3b69de7e68635474b2f6a10","tgt_lang":"pt-BR","translated":"{count} alterado(s)","updated_at":"2026-06-16T14:13:25.058Z"}
{"cache_key":"da61a9df46293a2e9361de1bd5b36dad54f6f60a0bb4dc0267efee4c81fa3733","model":"gpt-5.5","provider":"openai","segment_id":"chat.backgroundTasks.finished","source_path":"ui/src/i18n/locales/pt-BR.ts","src_lang":"en","text":"Finished ({count})","text_hash":"075b0ee69a685d3a0fbf0b009794675b56ea66104ee5c931cd909140194f6be9","tgt_lang":"pt-BR","translated":"Concluídas ({count})","updated_at":"2026-07-11T00:44:56.540Z"}
+287 -287
View File
@@ -1191,6 +1191,293 @@
"path": "ui/src/lib/skills-shared.ts",
"text": "disabled"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": ", then reload this tab."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Claims"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Close"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Contradictions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Copy archive path"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Corrections or revisions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Dreams"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Enable"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Ended on:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Id:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Import details"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Imported Insights"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Imported Insights and Memory Palace are provided by the bundled"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Labels:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Loading imported insights…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Loading memory palace…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Loading wiki page…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Memory Palace"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Memory palace is not populated yet"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Memory Wiki is not enabled"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "memory-wiki"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Messages:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "No imported insights yet"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Open Config"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Open questions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Open source page"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Open wiki page"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Page details"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "plugin."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "plugins.entries.memory-wiki.enabled = true"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Potentially useful signals"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Right now the wiki mostly has raw source imports and operational reports. This tab becomes useful once syntheses, entities, or concepts start getting written."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Risk reasons:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Run a ChatGPT import with apply to surface clustered imported insights here."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Started with:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "These are imported insights clustered from external history; use them to review what imports surfaced before any of it graduates into durable memory."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "This is the compiled memory wiki surface the system can search and reason over; use it to inspect actual memory pages, claims, open questions, and contradictions rather than raw imported source chats."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "This is the raw dream diary the system writes while replaying and consolidating memory; use it to inspect what the memory system is noticing, and where it still looks noisy or thin."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Wiki page:"
},
{
"count": 2,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "z"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/agents/memory/view.ts",
"text": "Z"
},
{
"count": 1,
"kind": "html-attribute",
@@ -3466,293 +3753,6 @@
"path": "ui/src/pages/debug/view.ts",
"text": "openclaw security audit --deep"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": ", then reload this tab."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Claims"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Close"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Contradictions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Copy archive path"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Corrections or revisions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Dreams"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Enable"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Ended on:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Id:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Import details"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Imported Insights"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Imported Insights and Memory Palace are provided by the bundled"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Labels:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Loading imported insights…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Loading memory palace…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Loading wiki page…"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Memory Palace"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Memory palace is not populated yet"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Memory Wiki is not enabled"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "memory-wiki"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Messages:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "No imported insights yet"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Open Config"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Open questions"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Open source page"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Open wiki page"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Page details"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "plugin."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "plugins.entries.memory-wiki.enabled = true"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Potentially useful signals"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Right now the wiki mostly has raw source imports and operational reports. This tab becomes useful once syntheses, entities, or concepts start getting written."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Risk reasons:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Run a ChatGPT import with apply to surface clustered imported insights here."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Started with:"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "These are imported insights clustered from external history; use them to review what imports surfaced before any of it graduates into durable memory."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "This is the compiled memory wiki surface the system can search and reason over; use it to inspect actual memory pages, claims, open questions, and contradictions rather than raw imported source chats."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "This is the raw dream diary the system writes while replaying and consolidating memory; use it to inspect what the memory system is noticing, and where it still looks noisy or thin."
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Wiki page:"
},
{
"count": 2,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "z"
},
{
"count": 1,
"kind": "html-text",
"name": "text",
"path": "ui/src/pages/dreams/view.ts",
"text": "Z"
},
{
"count": 1,
"kind": "html-text",
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:14.651Z",
"generatedAt": "2026-07-11T21:07:50.070Z",
"locale": "ru",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -376,6 +376,7 @@
{"cache_key":"3103e96a2f468c49db17fb6b72e102406477c1e72326d669bfa92826af2baa32","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.deletePreservedWorktreeConfirm","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"The session's worktree has uncommitted or unpushed work, so it was kept ({branch}). Delete the checkout anyway?","text_hash":"de74effbbd8fdc00e12e89709ca3363bf7406830f51010302ca4fc70cd9c4ec9","tgt_lang":"ru","translated":"Рабочее дерево сеанса содержит незакоммиченные или неотправленные изменения, поэтому оно было сохранено ({branch}). Всё равно удалить checkout?","updated_at":"2026-07-10T18:00:13.179Z"}
{"cache_key":"31454a591945f62cad4c518631fa421788a97f163139a064bf1f2ed3485bb792","model":"gpt-5.5","provider":"openai","segment_id":"chat.autoScrollNearBottom","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Near bottom","text_hash":"7604174593e383c8bd86a8812a17bd33f09ab343fcc74cd3500e013b0e45af94","tgt_lang":"ru","translated":"Рядом с нижним краем","updated_at":"2026-06-26T21:41:50.917Z"}
{"cache_key":"315fca9ac79538e4e13ab69b422dc56198de461dda38d0f1821ddab1818f4993","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.transcript.reasoning","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Reasoning","text_hash":"d8211e24e83d1600a1b0cfe2f7baa68e4d4eb71131a0b2b1b2050cba111ea481","tgt_lang":"ru","translated":"Рассуждение","updated_at":"2026-06-26T21:38:54.164Z"}
{"cache_key":"316d267111ec624af0f949f0bf2661229f57f2551f7617f98a8b3afa6fd42817","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"ru","translated":"Память","updated_at":"2026-07-11T21:07:50.068Z"}
{"cache_key":"31ad54bec8f2417852fec07f8be6f2f023173f077ccf2c4eb4b9bb2e842e1530","model":"gpt-5.5","provider":"openai","segment_id":"common.showAdvanced","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Show Advanced","text_hash":"365075d1bf3ed18878ba0bb50360278b7eaa5973d32ed92fa1544238c09254cb","tgt_lang":"ru","translated":"Показать дополнительные параметры","updated_at":"2026-06-26T21:38:34.337Z"}
{"cache_key":"31b5a85e182830c5b72631f0cd99faca58ad67e943c15e44a96fd41d19c307fe","model":"gpt-5.5","provider":"openai","segment_id":"debug.eventLogTitle","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Event Log","text_hash":"ad46380cee0c03bd2d8f9c6d0d91b724118c796a9d9eb5f167fc8da4d7cfd2b7","tgt_lang":"ru","translated":"Журнал событий","updated_at":"2026-06-26T21:39:17.817Z"}
{"cache_key":"321376e983562d238cd759254b532b36b8e34cf914f3583427e6cbb85ac37066","model":"gpt-5.5","provider":"openai","segment_id":"workboard.ageHours","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"{count}h","text_hash":"5828ef1c1e95e0bae1c98548d1795a2482cc8e14a8b161b183960a06018ce10d","tgt_lang":"ru","translated":"{count} ч","updated_at":"2026-06-26T21:40:00.643Z"}
@@ -1076,6 +1077,7 @@
{"cache_key":"8e98a6cef1f65a17c80d66c7022fd5dca21fdb755f9e9f2d4fada9a15e039aa7","model":"gpt-5.5","provider":"openai","segment_id":"cron.form.scheduleSub","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Control when this job runs.","text_hash":"3f706ce5406a786b764e79024a07de24c744012a2b92ada149860bb76aadc198","tgt_lang":"ru","translated":"Укажите, когда запускать это задание.","updated_at":"2026-06-26T21:42:28.070Z"}
{"cache_key":"8eaddd3f3b9888a21f41600f7284c90880829c0b0e504c3ede82895e9a56c2d8","model":"gpt-5.5","provider":"openai","segment_id":"nativeLinkMenu.openInline","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Open in Sidebar","text_hash":"ee39dc2999ce3acefff3c4c5440266e6a044feb3fb0a405a754f3ee4f697b201","tgt_lang":"ru","translated":"Открыть в боковой панели","updated_at":"2026-07-09T11:03:16.153Z"}
{"cache_key":"8ed4ab57587c5c5b8377af6b75a22c969cd55c70c627e1c7026a7f3c62855a0d","model":"gpt-5.5","provider":"openai","segment_id":"debug.noEvents","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"No events yet.","text_hash":"80c652c4eeecf7a1ad0ba8f6fdabb39a23c31906e1882cc8580002e6e0c74c14","tgt_lang":"ru","translated":"Событий пока нет.","updated_at":"2026-06-26T21:39:17.817Z"}
{"cache_key":"8edfbe1dda03adda05f95b7b8a7ce2d7091c19452001616f0c65c023b75c7e08","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"ru","translated":"Управляйте серверами на странице плагинов.","updated_at":"2026-07-11T21:07:50.068Z"}
{"cache_key":"8eeb99a81640199ea8223809a95cc4bf1797ed149939fa0f1db8ea65c976b7e4","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.realtimeTalkRequiresMicrophone","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Realtime Talk requires browser microphone access.","text_hash":"e082e85327dc5d2905a34ca4ca60e76836f9b4d7e3b1834b821c81a9c456b39d","tgt_lang":"ru","translated":"Для Realtime Talk требуется доступ браузера к микрофону.","updated_at":"2026-07-06T17:57:33.379Z"}
{"cache_key":"8ef0ceb2bbd19b2aeebf47623b29bc35407a1a707f71fe469c16b174d49ba707","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.ungrouped","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"Ungrouped","text_hash":"674b38cae72bb0c8be97cea114f7ce84a6ad4ae3c7f3ceb0c869d62db8e53fa2","tgt_lang":"ru","translated":"Без группы","updated_at":"2026-07-05T14:40:26.836Z"}
{"cache_key":"8f58194b055268e02aca86525986ea097a447f2ec9069890540bfdb830aca860","model":"gpt-5.5","provider":"openai","segment_id":"chat.workspaceFiles.changedCount","source_path":"ui/src/i18n/locales/ru.ts","src_lang":"en","text":"{count} changed","text_hash":"db3cb1c116f0a410592fe8556a43513156ce84faa3b69de7e68635474b2f6a10","tgt_lang":"ru","translated":"{count} изменено","updated_at":"2026-06-26T21:42:06.902Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:13.871Z",
"generatedAt": "2026-07-11T21:07:43.477Z",
"locale": "th",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -82,6 +82,7 @@
{"cache_key":"25660ed7f11fb44fa26d5a60aa15269864e4942d225c01046014c53be15ea523","model":"gpt-5.5","provider":"openai","segment_id":"chat.pullRequests.ciMonitoring","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"CI monitoring","text_hash":"b729ae0c12be4bfdccc13ca31d0ee718cfc6a324b564daa239a5bf2e147b3398","tgt_lang":"th","translated":"การตรวจสอบ CI","updated_at":"2026-07-10T23:12:49.455Z"}
{"cache_key":"2653b0830b0ba95a2fe990659f88ae158b5b0aeb02cb6a59096f2899a4da56f8","model":"gpt-5.5","provider":"openai","segment_id":"nativeLinkMenu.copy","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Copy Link","text_hash":"724e78a3254c899d16ef6324a7abc9a8f5240ffce8bff74976df397c68ce9d78","tgt_lang":"th","translated":"คัดลอกลิงก์","updated_at":"2026-07-09T11:03:08.210Z"}
{"cache_key":"26f0ebad149505f0c4c7c68572f873cbd989b31ed436f563c7615185e2f91ca6","model":"gpt-5.5","provider":"openai","segment_id":"workboard.dispatch","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Nudge dispatcher","text_hash":"c3d20147447cc75f5e1e8cc895af0bc287a4a720372aec4795c5dfbfa9eeda67","tgt_lang":"th","translated":"กระตุ้น dispatcher","updated_at":"2026-05-30T15:38:44.763Z"}
{"cache_key":"2775256dc271a6c14e12457879a890427a5b8ec911bca62c485aeb06fa7420c8","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"th","translated":"จัดการเซิร์ฟเวอร์ในหน้า Plugins","updated_at":"2026-07-11T21:07:43.474Z"}
{"cache_key":"277f8ed7df4cb8a16a9f6901a7973f8ebcd463b18d1562a53433c86d7cbcbaf5","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.autoRefresh30s","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"30s","text_hash":"d3382a4f0e03f8b14cf99424376886c236f1503d4b332137667484fc96d58fc4","tgt_lang":"th","translated":"30 วินาที","updated_at":"2026-06-17T14:16:55.187Z"}
{"cache_key":"28c53d38b8d1d8fd0d527e685ba8d5a256cbcf97daa3d963fad0118af0be6345","model":"gpt-5.5","provider":"openai","segment_id":"nav.settingsGeneral","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"General","text_hash":"c910d474dcd724bff83ddedeb06bf1eceaf9fb3af7c76bb282be057f36e6dffa","tgt_lang":"th","translated":"ทั่วไป","updated_at":"2026-07-09T08:08:10.509Z"}
{"cache_key":"29f101702e9923a41eb20fe3be21c50ba1904e3f64a08a9b03142368efc87931","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.talkModelAuto","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Auto","text_hash":"0286249762f7c94349cdc0ba3bb2255baf9a80036e2193ead1d77696f888582f","tgt_lang":"th","translated":"อัตโนมัติ","updated_at":"2026-07-06T20:20:02.809Z"}
@@ -116,6 +117,7 @@
{"cache_key":"3b5be79f09ac9bb10adfdd79a81f8dd24fcbe48856c16ca1057fbedfadd908cb","model":"claude-opus-4-8","provider":"anthropic","segment_id":"claudeSessions.sessionId","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Session","text_hash":"6959b4159575d8dd76d9f3bbe2c6437904f861e7860c35abd18deffb1c3425a0","tgt_lang":"th","translated":"เซสชัน","updated_at":"2026-06-16T14:17:36.173Z"}
{"cache_key":"3c5d07d156661386692b3d8c2a71ac4fe00174533cc8de778fea9eb06e18aa50","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewDetails","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"View details","text_hash":"d1bf045bb524dae5b02c471c230958bcd1bf232d7a49367b1cdf977855a06b41","tgt_lang":"th","translated":"ดูรายละเอียด","updated_at":"2026-06-16T14:17:16.747Z"}
{"cache_key":"3cc237f01333149cd053bcd99a28d2fca1bb324528fd8cc96e4cce0d36dc6084","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.talkSensitivity","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Sensitivity","text_hash":"ebb57a260d58207c3cce2e12e8663ecdc0c74147d138655d6714bc577a0768f6","tgt_lang":"th","translated":"ความไว","updated_at":"2026-07-06T20:20:02.809Z"}
{"cache_key":"3d5fe8d1e42b8cd87f49c22a9ed17bc1eaaa4ac8acc86f94300129c5ae64cb3b","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"th","translated":"หน่วยความจำ","updated_at":"2026-07-11T21:07:43.474Z"}
{"cache_key":"3d63c31b922de8f93f71559de6ed6c4ffea1f8b90a7d267c2e8540271cffbbd9","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.read","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Read","text_hash":"9b9a8d05a7ec353bda84f9c1bb3178c299de3001b5e970508ddc889c487f92ca","tgt_lang":"th","translated":"อ่านแล้ว","updated_at":"2026-06-16T14:17:36.173Z"}
{"cache_key":"3dafe38731caf2a9ea18b719e79228cc821e6c7968dd3ab5d38084da32bf0457","model":"gpt-5.5","provider":"openai","segment_id":"sessionsView.contextUsage","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"{percent}% of context used ({used} / {context} tokens)","text_hash":"f626ed78b8aca81f039ef64637bbdd4cffe0a289b402fd0c6039e977040aba72","tgt_lang":"th","translated":"ใช้บริบทไปแล้ว {percent}% ({used} / {context} โทเค็น)","updated_at":"2026-07-09T07:06:34.293Z"}
{"cache_key":"3ec7e5c1ffad1f6ff867594cf51c3872c052bd964c4a683c06217ff448b56ab0","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.commentaryToggle","source_path":"ui/src/i18n/locales/th.ts","src_lang":"en","text":"Keep commentary after the final answer","text_hash":"febdff0791d1ceeddb2b7596da8282f4dcfd5cff4cad11dea4c0a23944cd8ffe","tgt_lang":"th","translated":"เก็บคำอธิบายหลังคำตอบสุดท้าย","updated_at":"2026-07-01T01:08:34.109Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:13.189Z",
"generatedAt": "2026-07-11T21:07:36.438Z",
"locale": "tr",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -255,6 +255,7 @@
{"cache_key":"870e06883497613c0d531a9be08efe90af6da05cccf9de612f0c76f8c3d4fda3","model":"gpt-5.5","provider":"openai","segment_id":"newSession.worktreeNameInvalid","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Worktree names use lowercase letters, digits, and dashes.","text_hash":"6a34593b030e5dc2e8e8c55a2be4a5e9a6b415676d4d91e9f521b8586ea3c28f","tgt_lang":"tr","translated":"Worktree adları küçük harfler, rakamlar ve tireler kullanır.","updated_at":"2026-07-10T17:59:33.427Z"}
{"cache_key":"87234c84989d8f582ea9064c2206600e7781c0f9aecfb7ba8294e6461ae5abfc","model":"gpt-5.5","provider":"openai","segment_id":"chat.sidebar.sortCreated","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Created","text_hash":"d70b9e24bca26b409b9458ceca6c9e5c2b5c3171c37ff050c6f6a0d7a4420d2a","tgt_lang":"tr","translated":"Oluşturulma","updated_at":"2026-07-06T15:07:02.499Z"}
{"cache_key":"872feda832616c9bd77f7722ba79c2517c23e1bedcdc94ea7b7b04938f63c2fd","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.emptyFilteredTitle","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"No cards match this view","text_hash":"a272617e183ba1dff3f7f140d0851b64baf95f4827ff729d23dfeb05c2069875","tgt_lang":"tr","translated":"Bu görünümle eşleşen kart yok","updated_at":"2026-06-17T14:15:40.711Z"}
{"cache_key":"87cd6c4b39b5af90db3844c2e067479fc050a1b1e076f812b6bcadcd8f9db233","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"tr","translated":"Bellek","updated_at":"2026-07-11T21:07:36.436Z"}
{"cache_key":"881acf0c11853e1cde82358756b3ee095e830d8b4f543dd15e419c33e8a0b9b7","model":"gpt-5.5","provider":"openai","segment_id":"browser.annotateUndo","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Undo","text_hash":"a8283ade31856f71220db0e6f60a257c6889dc4dad0f275f66ad44b9ed9bf8d5","tgt_lang":"tr","translated":"Geri al","updated_at":"2026-07-11T02:19:05.554Z"}
{"cache_key":"8825b9eff1f02c8960e38e68b2fb8630108648fba80bbf3b3e2151d9ac60f855","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.browserCount","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"{count} shown","text_hash":"e57b4adfe868fd74a183650103d820176d4960bd0bdb677d9985db09f9752867","tgt_lang":"tr","translated":"{count} gösteriliyor","updated_at":"2026-06-16T14:15:55.679Z"}
{"cache_key":"899366b1af448ceb0f1e556a61d9e4cffbdd0f4cc880761fe5e30d65405578ee","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewPreset","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Workboard view","text_hash":"cc2b05179ad742029156bb45578e880c46599fd28e1c2ab66f5a6f9e7f8fa08e","tgt_lang":"tr","translated":"Workboard görünümü","updated_at":"2026-06-17T14:15:34.754Z"}
@@ -328,6 +329,7 @@
{"cache_key":"ac203fc98719af65c498de5996a14149dfbf954c21dc414b0022f4919b873b91","model":"gpt-5.5","provider":"openai","segment_id":"browser.toggle","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Toggle browser panel","text_hash":"cfd0e6c787d9b0fd9341c1bc377dca3a0987588b1fdb68ef23b5d0ce3bced9bc","tgt_lang":"tr","translated":"Tarayıcı panelini aç/kapat","updated_at":"2026-07-11T02:19:05.554Z"}
{"cache_key":"ac4d586a485e0daa2f9f81350504b00c3ebff7558e928e325b0b8efb5a12f440","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.dependenciesReadyTitle","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"{count} dependencies are done.","text_hash":"559fe92cd5fe39b4f511a146fc7ce6b51e7f528e1d388bbfde1d85dddb60604d","tgt_lang":"tr","translated":"{count} bağımlılık tamamlandı.","updated_at":"2026-06-16T14:15:44.904Z"}
{"cache_key":"acbf184463004227b7de6c67f48946333ed4de213cd5c6908fe9686210d2921e","model":"gpt-5","provider":"openai","segment_id":"codexSessions.searchPlaceholder","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Search session titles","text_hash":"9a6bdede84234fa08d6294e1636a34d26cbdd8eca425248f8d3c6cf8844a0cf9","tgt_lang":"tr","translated":"Oturum başlıklarında ara","updated_at":"2026-07-09T10:01:43.764Z"}
{"cache_key":"ad374695726368ccbf725b537c43bc7ea3705d90a9974745762ff41e9539f477","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"tr","translated":"Eklentiler sayfasında sunucuları yönetin.","updated_at":"2026-07-11T21:07:36.436Z"}
{"cache_key":"ad952a7e73aba2d0dde52ac8e044b4e414e11938bd5398655ecb08e4469ffbd5","model":"gpt-5.5","provider":"openai","segment_id":"chat.pullRequests.checksPassed","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Passed","text_hash":"436fe71bb9561f0596161c4d50c7b23327b4189acaf63dc89f4f9205b67a7528","tgt_lang":"tr","translated":"Geçti","updated_at":"2026-07-10T23:12:39.784Z"}
{"cache_key":"adc499ce22912c3e76e50f2c0b07c1dd96ab35c7c4b305e0886504bfb7cbc620","model":"gpt-5.5","provider":"openai","segment_id":"nativeLinkMenu.openInline","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Open in Sidebar","text_hash":"ee39dc2999ce3acefff3c4c5440266e6a044feb3fb0a405a754f3ee4f697b201","tgt_lang":"tr","translated":"Kenar Çubuğunda Aç","updated_at":"2026-07-09T11:02:57.343Z"}
{"cache_key":"adc81a01197719ff0254dabf3ed035c1974c6136d64ded848dfde72d71f2bec2","model":"gpt-5.5","provider":"openai","segment_id":"quickSettings.appearance.lobsterVisitsOn","source_path":"ui/src/i18n/locales/tr.ts","src_lang":"en","text":"Drops by occasionally","text_hash":"620c90596deb02d1164d4036d540b11c780b61cb04e4825230efed1cd8a45e6e","tgt_lang":"tr","translated":"Ara sıra uğrar","updated_at":"2026-07-09T20:51:40.521Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:13.372Z",
"generatedAt": "2026-07-11T21:07:38.096Z",
"locale": "uk",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -256,6 +256,7 @@
{"cache_key":"78e6166f3093d8e29e122f9935171ae71316418e3b4c5dca28db5fe2203d497b","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewStale","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Stale","text_hash":"40c9e59c5e152b0ae9affc84d8461c29b75a7709e4506307eeedf246b526014e","tgt_lang":"uk","translated":"Застарілі","updated_at":"2026-06-17T14:15:28.579Z"}
{"cache_key":"7934b54a812ea723254edb27c4d10478e6cc69fd4f261edfb9590ce0cbf19ac0","model":"gpt-5","provider":"openai","segment_id":"codexSessions.disconnected","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Reconnect to the gateway to refresh Codex sessions.","text_hash":"e5f80a33fab5ee6ffa4d7e3c58e7deb8e078e04b7a12cb9a007913904cbdb0c5","tgt_lang":"uk","translated":"Повторно підключіться до Gateway, щоб оновити сеанси Codex.","updated_at":"2026-07-09T10:01:43.750Z"}
{"cache_key":"799830ce1a506de14f16f92b06448f5c8acb8694ea1e047f03ef2610c58c3a9f","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.statPeakDay","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Peak day","text_hash":"c3a0833ac4b7cd06e29368f323fef10520637658605aa35de342df7bac6357f1","tgt_lang":"uk","translated":"Піковий день","updated_at":"2026-07-09T11:28:11.730Z"}
{"cache_key":"79f7cd62354ec0e802367773f9c3ce66cbf862c397c5789e8968c51a1d6eb6e0","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"uk","translated":"Керуйте серверами на сторінці Плагінів.","updated_at":"2026-07-11T21:07:38.094Z"}
{"cache_key":"7ab4ffec426559c2653763a5443bd6eb275a19e0ddec400f2ca765f157ecdfd9","model":"gpt-5","provider":"openai","segment_id":"claudeSessions.host.node","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Node","text_hash":"e93372533f323b2f12783aa3a586135cf421486439c2cdcde47411b78f9839ec","tgt_lang":"uk","translated":"Вузол","updated_at":"2026-07-09T10:01:43.750Z"}
{"cache_key":"7b097772ff773acdb66b039bb1db6b3aaddeb8fa1477d07fa6d0e6b1d844c4b8","model":"claude-opus-4-8","provider":"anthropic","segment_id":"modelProviders.status.expired","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Expired","text_hash":"424a2551d356754c882d04ac16c63e6b50b80b159549d23231001f629455756e","tgt_lang":"uk","translated":"Застарів","updated_at":"2026-07-01T10:32:49.580Z"}
{"cache_key":"7c5898ac6a215b61e29114bb5aaaf0c57109a837e023ae50e156967a39f68eaa","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.composer.dismissTalkError","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Dismiss Talk error","text_hash":"72f032a5a37e7197cc94ea95f5da0829abb2262396cdcc35229bd8ce9a52de1e","tgt_lang":"uk","translated":"Закрити помилку Talk","updated_at":"2026-06-16T14:15:46.702Z"}
@@ -268,6 +269,7 @@
{"cache_key":"7e10a9df2f0af32936b89801413b790ad9cd1f4437d0459edef2592dbd70f624","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphonePageInactive","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Microphone inputs are unavailable while this page is inactive.","text_hash":"775110f07819e48dc96203ed710c4df3546892e5672d7c469dedeb1e0e163882","tgt_lang":"uk","translated":"Входи мікрофона недоступні, поки ця сторінка неактивна.","updated_at":"2026-07-06T17:57:00.020Z"}
{"cache_key":"7ec1209880e73d718b0c91137f12e38520a0c56327ab469e635da3981e99af3c","model":"gpt-5.5","provider":"openai","segment_id":"chat.splitView.splitDown","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Split down","text_hash":"8730b89df7caaf5b5090f9b7365a0a03e0a13d9682dc6418f556b8a676d9e98f","tgt_lang":"uk","translated":"Розділити вниз","updated_at":"2026-07-06T07:23:57.922Z"}
{"cache_key":"7edfc82f94fd84be72782882d114008180ad639989dcb3babf7d1584e068e3d4","model":"gpt-5.5","provider":"openai","segment_id":"profilePage.sinceChip","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"In the reef since {date}","text_hash":"ded006c6417b781fc23bdac6fab292b69da412484cf516cfe8d6757551960dd7","tgt_lang":"uk","translated":"На рифі з {date}","updated_at":"2026-07-09T11:28:11.730Z"}
{"cache_key":"7f1e5423ce2f3010a16b3daabaf38644f1b5b69f042c7a518480ffcaadf4267d","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"uk","translated":"Пам'ять","updated_at":"2026-07-11T21:07:38.094Z"}
{"cache_key":"8004c11f7f65933c347886e24903e9fb25dc270be261aedbc7794bb7375cc27c","model":"gpt-5.5","provider":"openai","segment_id":"tabs.mcp","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"MCP","text_hash":"53f13ae99ed53bd346eb8e1c8cefb7ef8260683b50401caf101360967ea052aa","tgt_lang":"uk","translated":"MCP","updated_at":"2026-05-31T05:36:47.622Z"}
{"cache_key":"80b687c098489f1ab07c4211a4e337efa11c943c792a50581c5fdebde557defe","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.actions","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Actions","text_hash":"ff8059dc6752afdd30d275932b1d5031a2ec854b387a8c57ecc6689915293a43","tgt_lang":"uk","translated":"Дії","updated_at":"2026-07-05T21:01:19.646Z"}
{"cache_key":"81568196854b488c9c447f1a3367404b69bd08ac37812a905a64c91ebb75bb58","model":"gpt-5.5","provider":"openai","segment_id":"newSession.starting","source_path":"ui/src/i18n/locales/uk.ts","src_lang":"en","text":"Starting…","text_hash":"bbe5fc3b9ef39f994c259eaf233d625a500b5219784c82f73b50808d4f79d5dc","tgt_lang":"uk","translated":"Запуск…","updated_at":"2026-07-10T17:59:43.073Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:14.043Z",
"generatedAt": "2026-07-11T21:07:45.069Z",
"locale": "vi",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -2,6 +2,7 @@
{"cache_key":"0127572ab1c1a2bf59b570052f188e6743fb6e976c5afdced02782ed256b2fbe","model":"gpt-5.5","provider":"openai","segment_id":"browser.inspect","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Inspect element","text_hash":"f6493a99c5a31183042eaccd03bf7df3cb81d9f07f277fb114c1e4ccf8661675","tgt_lang":"vi","translated":"Kiểm tra phần tử","updated_at":"2026-07-11T02:19:55.107Z"}
{"cache_key":"01293668acac55eda7a2abc18dfc546bbf72961dfb6eee61e166c0542afe58b2","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.artifacts","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Artifacts","text_hash":"314ae71b8c8dc9c952f0ffc58e35e6d9a41b5cf4756471c7cab0c9476cd5d20b","tgt_lang":"vi","translated":"Hiện vật","updated_at":"2026-06-16T14:17:25.260Z"}
{"cache_key":"01423b1006b4b2b4b85049e187b14307fa3e47a37d9f2909ec009f9e7feba641","model":"claude-opus-4-8","provider":"anthropic","segment_id":"worktrees.ownerSession","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Session","text_hash":"6959b4159575d8dd76d9f3bbe2c6437904f861e7860c35abd18deffb1c3425a0","tgt_lang":"vi","translated":"Phiên","updated_at":"2026-06-16T14:17:17.661Z"}
{"cache_key":"01601027797f68585f5c5b6694ee8e2cb185ce1f25fa212f4a79e93ff8d3ec28","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"vi","translated":"Quản lý máy chủ trên trang Plugins.","updated_at":"2026-07-11T21:07:45.066Z"}
{"cache_key":"02104b4cfbde05c8f845b62d73eb4fd012ac6fd38dc2c606fd5a97bb93d11fdb","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.copyPath","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Copy path","text_hash":"720ff4160412b943370afdb8fc1c082ff057d54713d5fb4b4b7a9634bfabf5fe","tgt_lang":"vi","translated":"Sao chép đường dẫn","updated_at":"2026-06-16T14:17:27.580Z"}
{"cache_key":"024c9ae500f8606a84692cc918e93b6ee10e37f0ec8a0ab065218e010c8f357d","model":"gpt-5","provider":"openai","segment_id":"codexSessions.status.active","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Active","text_hash":"92340695899bd2d86223e4a007620e0d6502fc0e08809773634c7e0743764a9c","tgt_lang":"vi","translated":"Đang hoạt động","updated_at":"2026-07-09T10:01:43.734Z"}
{"cache_key":"029c495267d1d19fad7a7fc4bc7a3bca11cb1e5c7d63d3de7d6ed3b0582a5d5f","model":"gpt-5","provider":"openai","segment_id":"codexSessions.summary.hosts","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"hosts","text_hash":"4f8a2cc398d8664277a96a7843ab4958ab1d0a347cbe7c071fde0fcb58230793","tgt_lang":"vi","translated":"máy","updated_at":"2026-07-09T10:01:43.734Z"}
@@ -396,6 +397,7 @@
{"cache_key":"c6df2a5116d0d089a663fc5434139c780d8db1b6924a974905272efe4cfcf972","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.restore","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Restore","text_hash":"a76e13b9839270eb73ed11417f7d8acca55df0ad52065799361631d0fff74f27","tgt_lang":"vi","translated":"Khôi phục","updated_at":"2026-07-05T21:01:34.014Z"}
{"cache_key":"c6e960482a690ac3656242270fbe2e948283005461aa6c69fc8e1dde1d1041c8","model":"gpt-5.5","provider":"openai","segment_id":"nav.settingsGroupAgents","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Agents & Tools","text_hash":"493e2edea6e1c48892128656867eab52c07c16ec4f3b59e995b329a18e920328","tgt_lang":"vi","translated":"Tác nhân & Công cụ","updated_at":"2026-07-09T08:08:12.733Z"}
{"cache_key":"c774a220b056309855c53b16f81e1afe2ae174a8724ff2a98927ee38112f45f1","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneBusy","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Microphone inputs are busy or unavailable to the browser.","text_hash":"9f33c30cb2370916f2edd079ad5cabab6a94dd185a89f4f7db357b4f31d1f3dd","tgt_lang":"vi","translated":"Đầu vào micrô đang bận hoặc không khả dụng với trình duyệt.","updated_at":"2026-07-06T17:57:16.954Z"}
{"cache_key":"c7786ace6978b3261f4832d0ee8dfdc5ce9fbb976b3e857a07813265e623d7cc","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"vi","translated":"Bộ nhớ","updated_at":"2026-07-11T21:07:45.066Z"}
{"cache_key":"c79366c0fb5deb2ae3e5defc41f8b0d884ddae789182784b8af1c7d8ec40508d","model":"gpt-5.5","provider":"openai","segment_id":"chat.splitView.dropSplit","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Split","text_hash":"32afaa784333648025e24b162bece7474051bcaaa29e98e19922b400b4ceb04b","tgt_lang":"vi","translated":"Chia đôi","updated_at":"2026-07-06T22:56:36.739Z"}
{"cache_key":"c7981bda2073a6b5ad2e29dfc2416adb851da7d977f700e6073d9f2dcfa72d84","model":"gpt-5.5","provider":"openai","segment_id":"newSession.browserLoadFailed","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"Couldn't list that folder.","text_hash":"9872632bde1a61c0dac294031c716698063a3f3039ec9ddc753e754b13377086","tgt_lang":"vi","translated":"Không thể liệt kê thư mục đó.","updated_at":"2026-07-11T06:48:39.761Z"}
{"cache_key":"c8189fb07f9891a0d66114a76b221551c620abc0659550c2756c935e161a3fcc","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.empty.nonArchived","source_path":"ui/src/i18n/locales/vi.ts","src_lang":"en","text":"No non-archived sessions on this host.","text_hash":"49ecb9e9967d53ce0ffb0d1d5c1f75a595973708d03a577ba9a6e3f327a428fb","tgt_lang":"vi","translated":"Không có phiên chưa lưu trữ nào trên máy chủ này.","updated_at":"2026-07-11T13:51:25.845Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:10.810Z",
"generatedAt": "2026-07-11T21:07:16.763Z",
"locale": "zh-CN",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -276,6 +276,7 @@
{"cache_key":"92f1c79215479f144f42d04f878b63142f8523f4f6b8cb9b085bde7885f06c35","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.sidebar.title","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Claude sessions","text_hash":"45d8dde95eda96ef87a6371eefdef22b667880c6e55ef402313b25f589bd983b","tgt_lang":"zh-CN","translated":"Claude 会话","updated_at":"2026-07-11T13:50:09.084Z"}
{"cache_key":"9308e2042faf1feb027b5fa6a6ce62581855f127658a54b5acc0afbf0a7d1652","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.transcript.reasoning","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Reasoning","text_hash":"d8211e24e83d1600a1b0cfe2f7baa68e4d4eb71131a0b2b1b2050cba111ea481","tgt_lang":"zh-CN","translated":"推理","updated_at":"2026-07-11T10:24:38.322Z"}
{"cache_key":"931bb31dc9e5fc62578d7b84cddc6c28d0a91462b1d70d91346f70d2f6c5bf46","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.files","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Workspace","text_hash":"87bb59ba2f92f2a5a9f13e021fd58dd14ae5c065b1046146875e6e68d5ebc8b7","tgt_lang":"zh-CN","translated":"工作区","updated_at":"2026-06-16T14:13:02.064Z"}
{"cache_key":"9331f75d11bb6313b62d7b989f3b8706ccb05107dfebdf85b30959b96b8a36ef","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"zh-CN","translated":"记忆","updated_at":"2026-07-11T21:07:16.756Z"}
{"cache_key":"937894738293ba80620dbf2ccf6726a5eeb817d9357c54ce5d9e87ecb6eb301e","model":"gpt-5.5","provider":"openai","segment_id":"browser.noChatTarget","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Open a chat session first so the annotation has somewhere to go.","text_hash":"bf1e692535065c056cf58dcc36302ccb93b479cea40984dc57a823d3e40cfd5f","tgt_lang":"zh-CN","translated":"请先打开一个聊天会话,以便注释有发送目标。","updated_at":"2026-07-11T02:17:17.686Z"}
{"cache_key":"93b3f0fb532486b79667206faed827ca16e69cb202500af60dd3c05980ce37cb","model":"gpt-5.5","provider":"openai","segment_id":"browser.inspectFocusable","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Focusable","text_hash":"18ab85b65c8401162517e0abde980c12b0d32027eaae9a7dec2334cea85d881e","tgt_lang":"zh-CN","translated":"可聚焦","updated_at":"2026-07-11T02:17:17.686Z"}
{"cache_key":"94d027d3632d0b83dbad662a48213bff9192175966a3232a12fe80c0c3429d35","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.path","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Workspace path","text_hash":"1fddb73e40f0f5cc6fbf747930a11f857b7a37991caeb4d8677433bbc50a2a38","tgt_lang":"zh-CN","translated":"工作区路径","updated_at":"2026-06-16T14:13:07.632Z"}
@@ -399,6 +400,7 @@
{"cache_key":"d76cd0ad39b81ecb02649902742001d10e4fd137ebd05c08891798d67898e6bd","model":"gpt-5.5","provider":"openai","segment_id":"browser.forward","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Forward","text_hash":"f1c65e14817efef2b77973a4f63446a7d462cd2636bbe721207107b7d126a001","tgt_lang":"zh-CN","translated":"前进","updated_at":"2026-07-11T02:17:12.867Z"}
{"cache_key":"d783c793b1846038502c37af4680597a34dacf9f2c93108ac6b424d11c60df51","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.loading","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Loading session workspace…","text_hash":"bc6b2400fad20ee1d95d8de4ec6eef9ff1818ab080f86513384029519eaf4f4e","tgt_lang":"zh-CN","translated":"正在加载会话工作区……","updated_at":"2026-06-16T14:13:02.064Z"}
{"cache_key":"d83bb5af8ee96cd1b116828daf930cdda7f67b21b720db6ca53e5b89db2423f0","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.confirmDelete","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Snapshot and delete {name}?","text_hash":"3c3ee9b4dd86ac95d852528c6fd78c214c61cbb434f857051d8f0d73a615bd2f","tgt_lang":"zh-CN","translated":"为 {name} 创建快照并删除?","updated_at":"2026-07-05T21:00:21.877Z"}
{"cache_key":"d8766411f9944dd59365339e62205feedcf16392dbfd2d670d01c63fba932c65","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"zh-CN","translated":"在插件页面管理服务器。","updated_at":"2026-07-11T21:07:16.756Z"}
{"cache_key":"d8ba4969bd8ea9008dc15568c43fc888159393dd84f1473c3dc1fcc4403e2a70","model":"gpt-5","provider":"openai","segment_id":"codexSessions.empty.subtitle","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Enable Codex session sharing on the gateway or a paired computer, then refresh this view.","text_hash":"608ae8a39625a0da1b6804480e57835af5a1e566af2095d11cca8bf0a6e421a9","tgt_lang":"zh-CN","translated":"请在 Gateway 或已配对的电脑上启用 Codex 会话共享,然后刷新此视图。","updated_at":"2026-07-09T10:01:43.701Z"}
{"cache_key":"d8bde6c9b374882c2b8b081af81520a4d6c92c5ca88f40b645ac36cc09d0a500","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.empty","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"No changes in this session's checkout.","text_hash":"0345aa3b1a02eec8e7dbb6f8cf7fbb4c8b335ff6164c87b4ff250f753180d840","tgt_lang":"zh-CN","translated":"此会话的检出中没有更改。","updated_at":"2026-07-11T04:52:30.528Z"}
{"cache_key":"d8d059a2a919eeb288a8748c5d2bf04ec0e36ca1a6504bcbcc9cfc559ee5385c","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.detailUpdated","source_path":"ui/src/i18n/locales/zh-CN.ts","src_lang":"en","text":"Updated","text_hash":"3a5ecca188c0579c00ee24cf3cab21bd02c15a06f7a70cc8e0a8ff2381dcbbfd","tgt_lang":"zh-CN","translated":"已更新","updated_at":"2026-06-16T14:12:56.348Z"}
+6 -6
View File
@@ -1,11 +1,11 @@
{
"fallbackKeys": [],
"generatedAt": "2026-07-11T16:37:11.201Z",
"generatedAt": "2026-07-11T21:07:18.604Z",
"locale": "zh-TW",
"model": "gpt-5.6-sol",
"provider": "openai",
"sourceHash": "b2c4c817de038494f04e786edeaec576c3cb9a870324ba555b9a88b299ea438c",
"totalKeys": 2221,
"translatedKeys": 2221,
"model": "claude-sonnet-4-6",
"provider": "anthropic",
"sourceHash": "f152aebff26ce4e76b3a851c8a57bfc803620e53d32f639f4286ae019c36ec2a",
"totalKeys": 2219,
"translatedKeys": 2219,
"workflow": 1
}
+2
View File
@@ -279,6 +279,7 @@
{"cache_key":"8f747acaf2ebeab7a6f11f77f1b218b9b57bced8c0b3c00b85aec6c78bc609cb","model":"gpt-5.5","provider":"openai","segment_id":"worktrees.branch","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Branch","text_hash":"52656e8104eef3fddd3d4546903fa0de93c0625abf47b3dd8130f7705d6a513e","tgt_lang":"zh-TW","translated":"分支","updated_at":"2026-07-05T21:00:31.397Z"}
{"cache_key":"9040825fbf0485afec6e570a53176878581bf7b4eb2b939e2921c03a53c445a0","model":"gpt-5.5","provider":"openai","segment_id":"nav.search","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Search","text_hash":"49c266baaaa70981ea188fa714d5c40cf13830d786a861c9943ae0d26a7f3fe9","tgt_lang":"zh-TW","translated":"搜尋","updated_at":"2026-07-10T06:07:42.888Z"}
{"cache_key":"90d46ec9ecb0131dcdcf4564b232a72e2e214061536791801a6a045c50b2d978","model":"gpt-5","provider":"openai","segment_id":"codexSessions.host.unavailable","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Session catalog unavailable","text_hash":"7214837a3c6e83c01215e8128a4f7ac095be446b09dc0bd464178c9d1f03a039","tgt_lang":"zh-TW","translated":"工作階段目錄無法使用","updated_at":"2026-07-09T10:01:43.713Z"}
{"cache_key":"90f4795c936c2a922d322a5b3eadf0502e3f0e3745db0a5c28f92f8f35370702","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"agents.tabs.memory","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Memory","text_hash":"c3963aedaac6c83c04cf8fb997b479c61e66b3caeecfadd2f2d4bd5b0aef1778","tgt_lang":"zh-TW","translated":"記憶體","updated_at":"2026-07-11T21:07:18.601Z"}
{"cache_key":"925657f5c27104973a054ec9ac589584058de47dca67f743fc7ad5dc3bc0b27d","model":"claude-opus-4-8","provider":"anthropic","segment_id":"chat.workspaceFiles.read","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Read","text_hash":"9b9a8d05a7ec353bda84f9c1bb3178c299de3001b5e970508ddc889c487f92ca","tgt_lang":"zh-TW","translated":"已讀取","updated_at":"2026-06-16T14:13:16.738Z"}
{"cache_key":"92ab447ae071265b2f6d8682737ce5556fad717d1ff8f95de2db03b52464f862","model":"claude-opus-4-8","provider":"anthropic","segment_id":"cron.jobDetail.command","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Command","text_hash":"713166971d730f81fcf8b757f2ea239d1a0360d9f74e8f5afe60fba97105879c","tgt_lang":"zh-TW","translated":"指令","updated_at":"2026-06-16T14:13:18.599Z"}
{"cache_key":"9335936277dddcf7e632e665dd2c6f98ba8fdd81855c74d7c05469664d221774","model":"gpt-5.5","provider":"openai","segment_id":"claudeSessions.transcript.item","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Claude item","text_hash":"325d97a33be5a63ad70e4e8d6113714b8f8d8472e337db0ba459abf85b1b1d48","tgt_lang":"zh-TW","translated":"Claude 項目","updated_at":"2026-07-11T13:50:13.042Z"}
@@ -372,6 +373,7 @@
{"cache_key":"bb15588c973ce9ce76273d86e3aa27143842c226d5d0eb1ba165fdde10f8318e","model":"gpt-5","provider":"openai","segment_id":"codexSessions.untitled","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Untitled Codex session","text_hash":"c70b89c47992206d82993f9d295c9d3368a993fbc0899eef1bafb25277e5c88d","tgt_lang":"zh-TW","translated":"未命名的 Codex 工作階段","updated_at":"2026-07-09T10:01:43.713Z"}
{"cache_key":"bb30d72179bf02a357ba2c875d1730d8d4bbdede6fc387503165f47a9548b7af","model":"claude-opus-4-8","provider":"anthropic","segment_id":"workboard.viewAll","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"All cards","text_hash":"2306120917506b5998ec702f3661068b102dac538ba4c9e4634d65fe33eea98a","tgt_lang":"zh-TW","translated":"所有卡片","updated_at":"2026-06-17T14:13:17.815Z"}
{"cache_key":"bb3e10d71875b61d47bc962e2812ed3258ed178a40cbd6b0f17a77ea310ec2b4","model":"claude-opus-4-8","provider":"anthropic","segment_id":"skillWorkshop.header.useCurrentChatAria","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Use current chat for revision requests","text_hash":"9c551a423ae74aedaaa90e4df9899dbdc02f846d6ee058bf2576a812e2c52119","tgt_lang":"zh-TW","translated":"使用目前的對話進行修訂請求","updated_at":"2026-06-16T14:12:59.400Z"}
{"cache_key":"bb6328565b60c3b91776a9941a113ead0f40a9a8d8225c43152bf86a8719086c","model":"claude-sonnet-4-6","provider":"anthropic","segment_id":"mcpPage.manageServersLink","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Manage servers on the Plugins page.","text_hash":"b60c0a90e141a8742e3150a42808be62bfa40f6bfa0ffe15faff4791946a5722","tgt_lang":"zh-TW","translated":"在插件頁面管理伺服器。","updated_at":"2026-07-11T21:07:18.601Z"}
{"cache_key":"bd0a2d5ceff922535c093a50bfb99db91969e71d2163d95d4da0c14d3720286d","model":"gpt-5.5","provider":"openai","segment_id":"chat.composer.microphoneInput","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"Microphone input","text_hash":"5c8a6025b9d96fb0c090d33c9def15ee64aa520a83cf5d64c784b4f0699bb15e","tgt_lang":"zh-TW","translated":"麥克風輸入","updated_at":"2026-07-06T17:33:33.517Z"}
{"cache_key":"bd5749bda4403f97a38f0316a70bfef5ddc38fe7f190509150d267f34a6335ea","model":"gpt-5.5","provider":"openai","segment_id":"chat.sessionDiff.unknownSession","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"No workspace is associated with this session.","text_hash":"56dc1838e10ef8835cfe11fc765ef556bf9ff4d36387e74aa4ae65883d6b4a6c","tgt_lang":"zh-TW","translated":"沒有與此工作階段相關聯的工作區。","updated_at":"2026-07-11T04:52:33.969Z"}
{"cache_key":"bdb97aab9d3a44dfd2ee445bc9bc00353619bcc3cd20b9455b3647b77163eb1b","model":"gpt-5.5","provider":"openai","segment_id":"tasksPage.taskCount","source_path":"ui/src/i18n/locales/zh-TW.ts","src_lang":"en","text":"{count} tasks","text_hash":"1d43774da9d4e2aabcff69b02e03591836a632f430121f8ecdaf2f115a250233","tgt_lang":"zh-TW","translated":"{count} 個任務","updated_at":"2026-07-06T08:41:46.878Z"}
+4 -6
View File
@@ -378,6 +378,7 @@ export const ar: TranslationMap = {
skills: "Skills",
channels: "القنوات",
cronJobs: "مهام Cron",
memory: "الذاكرة",
},
context: {
title: "سياق الوكيل",
@@ -631,7 +632,6 @@ export const ar: TranslationMap = {
modelProviders: "Model Providers",
debug: "تصحيح الأخطاء",
logs: "السجلات",
dreams: "الحلم",
plugin: "المكوّن الإضافي",
},
subtitles: {
@@ -662,9 +662,11 @@ export const ar: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "اللقطات، والأحداث، وRPC.",
logs: "سجلات Gateway المباشرة.",
dreams: "حلم الذاكرة، والدمج، والتأمل.",
plugin: "لوحة مقدمة من المكوّن الإضافي.",
},
mcpPage: {
manageServersLink: "إدارة الخوادم من صفحة الإضافات.",
},
pluginsPage: {
searchLabel: "البحث في المكوّنات الإضافية",
searchPlaceholder: "البحث في المكوّنات الإضافية",
@@ -1567,10 +1569,6 @@ export const ar: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "الوكيل",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "المشهد",
diary: "اليوميات",
+4 -6
View File
@@ -383,6 +383,7 @@ export const de: TranslationMap = {
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
memory: "Speicher",
},
context: {
title: "Agent Context",
@@ -639,7 +640,6 @@ export const de: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debug",
logs: "Protokolle",
dreams: "Träume",
plugin: "Plugin",
},
subtitles: {
@@ -671,9 +671,11 @@ export const de: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Gateway-Snapshots, Ereignisse und manuelle RPC-Aufrufe.",
logs: "Live-Verfolgung der Gateway-Protokolldateien.",
dreams: "Speicherkonsolidierung im Schlaf.",
plugin: "Vom Plugin bereitgestelltes Panel.",
},
mcpPage: {
manageServersLink: "Server auf der Plugins-Seite verwalten.",
},
pluginsPage: {
searchLabel: "Plugins suchen",
searchPlaceholder: "Plugins suchen",
@@ -1603,10 +1605,6 @@ export const de: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Szene",
diary: "Tagebuch",
+4 -6
View File
@@ -377,6 +377,7 @@ export const en: TranslationMap = {
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
memory: "Memory",
},
context: {
title: "Agent Context",
@@ -632,7 +633,6 @@ export const en: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debug",
logs: "Logs",
dreams: "Dreaming",
plugin: "Plugin",
},
subtitles: {
@@ -663,9 +663,11 @@ export const en: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Snapshots, events, RPC.",
logs: "Live gateway logs.",
dreams: "Memory dreaming, consolidation, and reflection.",
plugin: "Plugin-provided panel.",
},
mcpPage: {
manageServersLink: "Manage servers on the Plugins page.",
},
pluginsPage: {
searchLabel: "Search plugins",
searchPlaceholder: "Search plugins and ClawHub",
@@ -1573,10 +1575,6 @@ export const en: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scene",
diary: "Diary",
+4 -6
View File
@@ -380,6 +380,7 @@ export const es: TranslationMap = {
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
memory: "Memoria",
},
context: {
title: "Agent Context",
@@ -634,7 +635,6 @@ export const es: TranslationMap = {
modelProviders: "Model Providers",
debug: "Depuración",
logs: "Registros",
dreams: "Sueños",
plugin: "Plugin",
},
subtitles: {
@@ -666,9 +666,11 @@ export const es: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Instantáneas de la puerta de enlace, eventos y llamadas RPC manuales.",
logs: "Seguimiento en vivo de los registros de la puerta de enlace.",
dreams: "Consolidación de la memoria durante el sueño.",
plugin: "Panel proporcionado por el plugin.",
},
mcpPage: {
manageServersLink: "Gestionar servidores en la página de Plugins.",
},
pluginsPage: {
searchLabel: "Buscar plugins",
searchPlaceholder: "Buscar plugins",
@@ -1586,10 +1588,6 @@ export const es: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agente",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Escena",
diary: "Diario",
+4 -6
View File
@@ -380,6 +380,7 @@ export const fa: TranslationMap = {
skills: "Skills",
channels: "کانال‌ها",
cronJobs: "Cron Jobs",
memory: "حافظه",
},
context: {
title: "زمینه عامل",
@@ -633,7 +634,6 @@ export const fa: TranslationMap = {
modelProviders: "Model Providers",
debug: "اشکال‌زدایی",
logs: "گزارش‌ها",
dreams: "رؤیاپردازی",
plugin: "افزونه",
},
subtitles: {
@@ -664,9 +664,11 @@ export const fa: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "نماهای لحظه‌ای، رویدادها، RPC.",
logs: "گزارش‌های زنده Gateway.",
dreams: "رؤیاپردازی حافظه، یکپارچه‌سازی و بازتاب.",
plugin: "پنل ارائه‌شده توسط افزونه.",
},
mcpPage: {
manageServersLink: "مدیریت سرورها در صفحه Plugins.",
},
pluginsPage: {
searchLabel: "جستجوی افزونه‌ها",
searchPlaceholder: "جستجوی افزونه‌ها",
@@ -1579,10 +1581,6 @@ export const fa: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "عامل",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "صحنه",
diary: "دفترچه",
+4 -6
View File
@@ -386,6 +386,7 @@ export const fr: TranslationMap = {
skills: "Skills",
channels: "Canaux",
cronJobs: "Tâches cron",
memory: "Mémoire",
},
context: {
title: "Agent Context",
@@ -640,7 +641,6 @@ export const fr: TranslationMap = {
modelProviders: "Model Providers",
debug: "Débogage",
logs: "Journaux",
dreams: "Rêves",
plugin: "Plugin",
},
subtitles: {
@@ -672,9 +672,11 @@ export const fr: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Captures, événements, RPC.",
logs: "Journaux Gateway en direct.",
dreams: "Consolidation de la mémoire pendant le sommeil.",
plugin: "Panneau fourni par le plugin.",
},
mcpPage: {
manageServersLink: "Gérez les serveurs sur la page Plugins.",
},
pluginsPage: {
searchLabel: "Rechercher des plugins",
searchPlaceholder: "Rechercher des plugins",
@@ -1601,10 +1603,6 @@ export const fr: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scène",
diary: "Journal",
+4 -6
View File
@@ -379,6 +379,7 @@ export const hi: TranslationMap = {
skills: "स्किल्स",
channels: "चैनल",
cronJobs: "Cron Jobs",
memory: "मेमोरी",
},
context: {
title: "एजेंट संदर्भ",
@@ -631,7 +632,6 @@ export const hi: TranslationMap = {
modelProviders: "Model Providers",
debug: "डीबग",
logs: "लॉग्स",
dreams: "ड्रीमिंग",
plugin: "प्लगइन",
},
subtitles: {
@@ -662,9 +662,11 @@ export const hi: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "स्नैपशॉट, इवेंट, RPC।",
logs: "लाइव gateway लॉग।",
dreams: "मेमोरी ड्रीमिंग, कंसॉलिडेशन, और रिफ्लेक्शन।",
plugin: "प्लगइन द्वारा उपलब्ध कराया गया पैनल।",
},
mcpPage: {
manageServersLink: "Plugins पेज पर सर्वर प्रबंधित करें।",
},
pluginsPage: {
searchLabel: "प्लगइन खोजें",
searchPlaceholder: "प्लगइन खोजें",
@@ -1570,10 +1572,6 @@ export const hi: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "एजेंट",
ariaLabel: "ड्रीमिंग एजेंट",
},
tabs: {
scene: "दृश्य",
diary: "डायरी",
+4 -6
View File
@@ -380,6 +380,7 @@ export const id: TranslationMap = {
skills: "Skills",
channels: "Saluran",
cronJobs: "Tugas Cron",
memory: "Memori",
},
context: {
title: "Agent Context",
@@ -634,7 +635,6 @@ export const id: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debug",
logs: "Log",
dreams: "Mimpi",
plugin: "Plugin",
},
subtitles: {
@@ -665,9 +665,11 @@ export const id: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Snapshot, peristiwa, RPC.",
logs: "Log Gateway langsung.",
dreams: "Konsolidasi memori saat tidur.",
plugin: "Panel yang disediakan plugin.",
},
mcpPage: {
manageServersLink: "Kelola server di halaman Plugins.",
},
pluginsPage: {
searchLabel: "Cari plugin",
searchPlaceholder: "Cari plugin",
@@ -1582,10 +1584,6 @@ export const id: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agen",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scene",
diary: "Diary",
+4 -6
View File
@@ -383,6 +383,7 @@ export const it: TranslationMap = {
skills: "Skills",
channels: "Canali",
cronJobs: "Processi cron",
memory: "Memoria",
},
context: {
title: "Contesto agente",
@@ -641,7 +642,6 @@ export const it: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debug",
logs: "Log",
dreams: "Sogni",
plugin: "Plugin",
},
subtitles: {
@@ -672,9 +672,11 @@ export const it: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Snapshot, eventi, RPC.",
logs: "Log gateway live.",
dreams: "Sogni della memoria, consolidamento e riflessione.",
plugin: "Pannello fornito dal plugin.",
},
mcpPage: {
manageServersLink: "Gestisci i server nella pagina Plugins.",
},
pluginsPage: {
searchLabel: "Cerca plugin",
searchPlaceholder: "Cerca plugin",
@@ -1592,10 +1594,6 @@ export const it: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agente",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scena",
diary: "Diario",
+4 -6
View File
@@ -385,6 +385,7 @@ export const ja_JP: TranslationMap = {
skills: "Skills",
channels: "チャンネル",
cronJobs: "Cron ジョブ",
memory: "メモリ",
},
context: {
title: "Agent Context",
@@ -639,7 +640,6 @@ export const ja_JP: TranslationMap = {
modelProviders: "Model Providers",
debug: "デバッグ",
logs: "ログ",
dreams: "Dreaming",
plugin: "プラグイン",
},
subtitles: {
@@ -670,9 +670,11 @@ export const ja_JP: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "スナップショット、イベント、RPC。",
logs: "ライブ Gateway ログ。",
dreams: "スリープ中のメモリ統合。",
plugin: "プラグインが提供するパネル。",
},
mcpPage: {
manageServersLink: "プラグインページでサーバーを管理します。",
},
pluginsPage: {
searchLabel: "プラグインを検索",
searchPlaceholder: "プラグインを検索",
@@ -1590,10 +1592,6 @@ export const ja_JP: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "エージェント",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scene",
diary: "Diary",
+4 -6
View File
@@ -378,6 +378,7 @@ export const ko: TranslationMap = {
skills: "Skills",
channels: "채널",
cronJobs: "Cron 작업",
memory: "메모리",
},
context: {
title: "Agent Context",
@@ -631,7 +632,6 @@ export const ko: TranslationMap = {
modelProviders: "Model Providers",
debug: "디버그",
logs: "로그",
dreams: "드리밍",
plugin: "플러그인",
},
subtitles: {
@@ -662,9 +662,11 @@ export const ko: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "스냅샷, 이벤트, RPC.",
logs: "실시간 Gateway 로그.",
dreams: "수면 중 메모리 통합.",
plugin: "플러그인이 제공하는 패널입니다.",
},
mcpPage: {
manageServersLink: "플러그인 페이지에서 서버를 관리하세요.",
},
pluginsPage: {
searchLabel: "플러그인 검색",
searchPlaceholder: "플러그인 검색",
@@ -1579,10 +1581,6 @@ export const ko: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "에이전트",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "장면",
diary: "일지",
+4 -6
View File
@@ -383,6 +383,7 @@ export const nl: TranslationMap = {
skills: "Skills",
channels: "Kanalen",
cronJobs: "Cron-taken",
memory: "Geheugen",
},
context: {
title: "Agentcontext",
@@ -636,7 +637,6 @@ export const nl: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debuggen",
logs: "Logs",
dreams: "Dromen",
plugin: "Plugin",
},
subtitles: {
@@ -667,9 +667,11 @@ export const nl: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Momentopnamen, gebeurtenissen, RPC.",
logs: "Live Gateway-logs.",
dreams: "Geheugendromen, consolidatie en reflectie.",
plugin: "Door een plugin geleverd paneel.",
},
mcpPage: {
manageServersLink: "Beheer servers op de Plugins-pagina.",
},
pluginsPage: {
searchLabel: "Plugins zoeken",
searchPlaceholder: "Plugins zoeken",
@@ -1589,10 +1591,6 @@ export const nl: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scène",
diary: "Dagboek",
+4 -6
View File
@@ -381,6 +381,7 @@ export const pl: TranslationMap = {
skills: "Skills",
channels: "Kanały",
cronJobs: "Zadania Cron",
memory: "Pamięć",
},
context: {
title: "Agent Context",
@@ -635,7 +636,6 @@ export const pl: TranslationMap = {
modelProviders: "Model Providers",
debug: "Debug",
logs: "Logi",
dreams: "Sny",
plugin: "Wtyczka",
},
subtitles: {
@@ -666,9 +666,11 @@ export const pl: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Migawki, zdarzenia, RPC.",
logs: "Logi Gateway na żywo.",
dreams: "Konsolidacja pamięci podczas snu.",
plugin: "Panel udostępniany przez wtyczkę.",
},
mcpPage: {
manageServersLink: "Zarządzaj serwerami na stronie Wtyczek.",
},
pluginsPage: {
searchLabel: "Szukaj wtyczek",
searchPlaceholder: "Szukaj wtyczek",
@@ -1589,10 +1591,6 @@ export const pl: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Scena",
diary: "Dziennik",
+4 -6
View File
@@ -379,6 +379,7 @@ export const pt_BR: TranslationMap = {
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
memory: "Memória",
},
context: {
title: "Agent Context",
@@ -631,7 +632,6 @@ export const pt_BR: TranslationMap = {
modelProviders: "Model Providers",
debug: "Depuração",
logs: "Logs",
dreams: "Sonhos",
plugin: "Plugin",
},
subtitles: {
@@ -662,9 +662,11 @@ export const pt_BR: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Snapshots, eventos, RPC.",
logs: "Logs ao vivo do gateway.",
dreams: "Consolidação de memória durante o sono.",
plugin: "Painel fornecido pelo plugin.",
},
mcpPage: {
manageServersLink: "Gerencie servidores na página de Plugins.",
},
pluginsPage: {
searchLabel: "Pesquisar plugins",
searchPlaceholder: "Pesquisar plugins",
@@ -1582,10 +1584,6 @@ export const pt_BR: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agente",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Cena",
diary: "Diário",
+4 -6
View File
@@ -383,6 +383,7 @@ export const ru: TranslationMap = {
skills: "Навыки",
channels: "Каналы",
cronJobs: "Cron Jobs",
memory: "Память",
},
context: {
title: "Контекст агента",
@@ -637,7 +638,6 @@ export const ru: TranslationMap = {
modelProviders: "Model Providers",
debug: "Отладка",
logs: "Журналы",
dreams: "Сновидения",
plugin: "Плагин",
},
subtitles: {
@@ -669,9 +669,11 @@ export const ru: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Снимки, события, RPC.",
logs: "Живые журналы шлюза.",
dreams: "Сновидения памяти, консолидация и рефлексия.",
plugin: "Панель, предоставленная плагином.",
},
mcpPage: {
manageServersLink: "Управляйте серверами на странице плагинов.",
},
pluginsPage: {
searchLabel: "Поиск плагинов",
searchPlaceholder: "Поиск плагинов",
@@ -1589,10 +1591,6 @@ export const ru: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Агент",
ariaLabel: "Агент Dreaming",
},
tabs: {
scene: "Сцена",
diary: "Дневник",
+4 -6
View File
@@ -377,6 +377,7 @@ export const th: TranslationMap = {
skills: "ทักษะ",
channels: "ช่องทาง",
cronJobs: "งาน Cron",
memory: "หน่วยความจำ",
},
context: {
title: "Agent Context",
@@ -629,7 +630,6 @@ export const th: TranslationMap = {
modelProviders: "Model Providers",
debug: "ดีบัก",
logs: "บันทึก",
dreams: "การฝัน",
plugin: "ปลั๊กอิน",
},
subtitles: {
@@ -660,9 +660,11 @@ export const th: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "สแนปช็อต เหตุการณ์ และ RPC",
logs: "บันทึกเกตเวย์แบบสด",
dreams: "การฝันของหน่วยความจำ การรวมข้อมูล และการสะท้อนคิด",
plugin: "แผงที่ปลั๊กอินจัดเตรียมไว้",
},
mcpPage: {
manageServersLink: "จัดการเซิร์ฟเวอร์ในหน้า Plugins",
},
pluginsPage: {
searchLabel: "ค้นหาปลั๊กอิน",
searchPlaceholder: "ค้นหาปลั๊กอิน",
@@ -1561,10 +1563,6 @@ export const th: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "เอเจนต์",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "ฉาก",
diary: "ไดอารี",
+4 -6
View File
@@ -383,6 +383,7 @@ export const tr: TranslationMap = {
skills: "Skills",
channels: "Kanallar",
cronJobs: "Cron İşleri",
memory: "Bellek",
},
context: {
title: "Agent Context",
@@ -636,7 +637,6 @@ export const tr: TranslationMap = {
modelProviders: "Model Providers",
debug: "Hata Ayıklama",
logs: "Günlükler",
dreams: "Düşler",
plugin: "Eklenti",
},
subtitles: {
@@ -668,9 +668,11 @@ export const tr: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Anlık görüntüler, olaylar, RPC.",
logs: "Canlı Gateway günlükleri.",
dreams: "Uyku sırasında bellek birleştirme.",
plugin: "Eklenti tarafından sağlanan panel.",
},
mcpPage: {
manageServersLink: "Eklentiler sayfasında sunucuları yönetin.",
},
pluginsPage: {
searchLabel: "Eklentileri ara",
searchPlaceholder: "Eklentileri ara",
@@ -1595,10 +1597,6 @@ export const tr: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Aracı",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Sahne",
diary: "Günlük",
+4 -6
View File
@@ -380,6 +380,7 @@ export const uk: TranslationMap = {
skills: "Навички",
channels: "Канали",
cronJobs: "Завдання Cron",
memory: "Пам'ять",
},
context: {
title: "Agent Context",
@@ -633,7 +634,6 @@ export const uk: TranslationMap = {
modelProviders: "Model Providers",
debug: "Налагодження",
logs: "Журнали",
dreams: "Сни",
plugin: "Плагін",
},
subtitles: {
@@ -665,9 +665,11 @@ export const uk: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Знімки, події, RPC.",
logs: "Журнали шлюзу в реальному часі.",
dreams: "Консолідація пам’яті під час сну.",
plugin: "Панель, надана плагіном.",
},
mcpPage: {
manageServersLink: "Керуйте серверами на сторінці Плагінів.",
},
pluginsPage: {
searchLabel: "Пошук плагінів",
searchPlaceholder: "Пошук плагінів",
@@ -1583,10 +1585,6 @@ export const uk: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Агент",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Сцена",
diary: "Щоденник",
+4 -6
View File
@@ -379,6 +379,7 @@ export const vi: TranslationMap = {
skills: "Skills",
channels: "Kênh",
cronJobs: "Cron Jobs",
memory: "Bộ nhớ",
},
context: {
title: "Ngữ cảnh agent",
@@ -633,7 +634,6 @@ export const vi: TranslationMap = {
modelProviders: "Model Providers",
debug: "Gỡ lỗi",
logs: "Nhật ký",
dreams: "Đang mơ",
plugin: "Plugin",
},
subtitles: {
@@ -665,9 +665,11 @@ export const vi: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "Ảnh chụp, sự kiện, RPC.",
logs: "Nhật ký gateway trực tiếp.",
dreams: "Mơ bộ nhớ, hợp nhất và phản chiếu.",
plugin: "Bảng điều khiển do plugin cung cấp.",
},
mcpPage: {
manageServersLink: "Quản lý máy chủ trên trang Plugins.",
},
pluginsPage: {
searchLabel: "Tìm kiếm plugin",
searchPlaceholder: "Tìm kiếm plugin",
@@ -1577,10 +1579,6 @@ export const vi: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "Agent",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "Cảnh",
diary: "Nhật ký",
+4 -6
View File
@@ -377,6 +377,7 @@ export const zh_CN: TranslationMap = {
skills: "技能",
channels: "频道",
cronJobs: "Cron Jobs",
memory: "记忆",
},
context: {
title: "代理上下文",
@@ -628,7 +629,6 @@ export const zh_CN: TranslationMap = {
modelProviders: "Model Providers",
debug: "调试",
logs: "日志",
dreams: "梦境",
plugin: "插件",
},
subtitles: {
@@ -659,9 +659,11 @@ export const zh_CN: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "快照、事件、RPC。",
logs: "实时网关日志。",
dreams: "睡眠时进行记忆巩固。",
plugin: "插件提供的面板。",
},
mcpPage: {
manageServersLink: "在插件页面管理服务器。",
},
pluginsPage: {
searchLabel: "搜索插件",
searchPlaceholder: "搜索插件",
@@ -1559,10 +1561,6 @@ export const zh_CN: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "代理",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "场景",
diary: "日记",
+4 -6
View File
@@ -377,6 +377,7 @@ export const zh_TW: TranslationMap = {
skills: "Skills",
channels: "Channels",
cronJobs: "Cron Jobs",
memory: "記憶體",
},
context: {
title: "Agent Context",
@@ -629,7 +630,6 @@ export const zh_TW: TranslationMap = {
modelProviders: "Model Providers",
debug: "調試",
logs: "日誌",
dreams: "夢境",
plugin: "外掛程式",
},
subtitles: {
@@ -660,9 +660,11 @@ export const zh_TW: TranslationMap = {
modelProviders: "Configured providers with plan, quota, and cost.",
debug: "快照、事件、RPC。",
logs: "實時網關日誌。",
dreams: "睡眠期間的記憶整合。",
plugin: "外掛程式提供的面板。",
},
mcpPage: {
manageServersLink: "在插件頁面管理伺服器。",
},
pluginsPage: {
searchLabel: "搜尋外掛程式",
searchPlaceholder: "搜尋外掛程式",
@@ -1560,10 +1562,6 @@ export const zh_TW: TranslationMap = {
},
},
dreaming: {
agentSelect: {
label: "代理",
ariaLabel: "Dreaming agent",
},
tabs: {
scene: "場景",
diary: "日誌",
+8 -1
View File
@@ -19,7 +19,14 @@ import {
resetToolsEffectiveState,
} from "./tools-effective.ts";
export type AgentsPanel = "overview" | "files" | "tools" | "skills" | "channels" | "cron";
export type AgentsPanel =
| "overview"
| "files"
| "tools"
| "skills"
| "channels"
| "cron"
| "memory";
export type AgentsState = {
client: GatewayBrowserClient | null;
-35
View File
@@ -13,7 +13,6 @@ import {
resetConfigPendingChanges,
saveConfig,
stageDefaultAgentConfigEntry,
updateMcpServerEnabled,
updateConfigFormValue,
updateConfigRawValue,
type ConfigState,
@@ -619,40 +618,6 @@ describe("updateConfigFormValue", () => {
});
});
describe("updateMcpServerEnabled", () => {
it("removes disabled-only MCP overrides when enabling", () => {
const state = createState();
applyConfigSnapshot(state, {
hash: "hash-mcp",
config: { mcp: { servers: { local: { enabled: false } } } },
valid: true,
issues: [],
raw: "{}",
});
updateMcpServerEnabled(state, "local", true);
expect(state.configForm).toEqual({ mcp: { servers: {} } });
expect(state.configFormDirty).toBe(true);
});
it("keeps real MCP server configuration when enabling", () => {
const state = createState();
applyConfigSnapshot(state, {
hash: "hash-mcp",
config: { mcp: { servers: { local: { command: "node", enabled: false } } } },
valid: true,
issues: [],
raw: "{}",
});
updateMcpServerEnabled(state, "local", true);
expect(state.configForm).toEqual({ mcp: { servers: { local: { command: "node" } } } });
expect(state.configFormDirty).toBe(true);
});
});
describe("resetConfigPendingChanges", () => {
it("restores the original form and raw config snapshot", () => {
const state = createState();
-21
View File
@@ -66,7 +66,6 @@ export type RuntimeConfigCapability = {
save: () => Promise<boolean>;
apply: () => Promise<boolean>;
openFile: () => Promise<void>;
setMcpServerEnabled: (name: string, enabled: boolean) => void;
ensureAgentEntry: (agentId: string) => number;
stageDefaultAgent: (agentId: string) => boolean;
patch: (options: ConfigPatchOptions) => Promise<boolean>;
@@ -701,24 +700,6 @@ function removeConfigFormValue(state: ConfigState, path: Array<string | number>)
mutateConfigForm(state, (draft) => removePathValue(draft, path));
}
export function updateMcpServerEnabled(state: ConfigState, name: string, enabled: boolean) {
mutateConfigForm(state, (draft) => {
const serverPath = ["mcp", "servers", name];
if (!enabled) {
setPathValue(draft, [...serverPath, "enabled"], false);
return;
}
removePathValue(draft, [...serverPath, "enabled"]);
const mcp = asConfigRecord(draft.mcp);
const servers = asConfigRecord(mcp?.servers);
const server = asConfigRecord(servers?.[name]);
if (server && Object.keys(server).length === 0) {
removePathValue(draft, serverPath);
}
});
}
export function findAgentConfigEntryIndex(
config: Record<string, unknown> | null,
agentId: string,
@@ -932,8 +913,6 @@ export function createRuntimeConfigCapability(
save: () => run(() => saveConfig(state)),
apply: () => run(() => applyConfig(state)),
openFile: () => run(() => openConfigFile(state)),
setMcpServerEnabled: (name, enabled) =>
mutate(() => updateMcpServerEnabled(state, name, enabled)),
ensureAgentEntry: (agentId) => {
const index = ensureAgentConfigEntry(state, agentId);
publish();
-71
View File
@@ -1,71 +0,0 @@
import type { SessionsListResult } from "../../api/types.ts";
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../string-coerce.ts";
import { normalizeAgentId, parseAgentSessionKey } from "./session-key.ts";
type SessionAgentOptionsState = {
agentsList?: {
defaultId?: string | null;
agents?: Array<{
id: string;
name?: string | null;
identity?: { name?: string | null } | null;
}> | null;
} | null;
sessionsResult?: SessionsListResult | null;
sessionKey: string;
};
type SessionAgentFilterOption = {
id: string;
label: string;
};
export function resolveSessionAgentFilterId(
state: SessionAgentOptionsState,
sessionKey: string,
): string {
const parsed = parseAgentSessionKey(sessionKey);
return normalizeAgentId(parsed?.agentId ?? state.agentsList?.defaultId ?? "main");
}
export function resolveSessionAgentFilterOptions(
state: SessionAgentOptionsState,
): SessionAgentFilterOption[] {
const seen = new Set<string>();
const options: SessionAgentFilterOption[] = [];
const add = (agentId: string) => {
const normalized = normalizeAgentId(agentId);
if (seen.has(normalized)) {
return;
}
seen.add(normalized);
options.push({
id: normalized,
label: resolveAgentGroupLabel(state, normalized),
});
};
add(resolveSessionAgentFilterId(state, state.sessionKey));
add(state.agentsList?.defaultId ?? "main");
for (const agent of state.agentsList?.agents ?? []) {
add(agent.id);
}
for (const row of state.sessionsResult?.sessions ?? []) {
const parsed = parseAgentSessionKey(row.key);
if (parsed) {
add(parsed.agentId);
}
}
return options;
}
function resolveAgentGroupLabel(state: SessionAgentOptionsState, agentIdRaw: string): string {
const normalized = normalizeLowercaseStringOrEmpty(agentIdRaw);
const agent = (state.agentsList?.agents ?? []).find(
(entry) => normalizeLowercaseStringOrEmpty(entry.id) === normalized,
);
const name =
normalizeOptionalString(agent?.identity?.name) ?? normalizeOptionalString(agent?.name) ?? "";
return name && name !== agentIdRaw ? `${name} (${agentIdRaw})` : agentIdRaw;
}
+39 -37
View File
@@ -10,6 +10,7 @@ import {
type ApplicationGatewaySnapshot,
} from "../../app/context.ts";
import { loadSettings } from "../../app/settings.ts";
import { renderSettingsWorkspace } from "../../components/settings-workspace.ts";
import { resolveSessionKey } from "../../lib/sessions/index.ts";
import { uiSessionEventMatches } from "../../lib/sessions/session-key.ts";
import { OpenClawLightDomElement } from "../../lit/openclaw-element.ts";
@@ -199,49 +200,50 @@ class ActivityPage extends OpenClawLightDomElement {
}
override render() {
const body = renderActivity({
entries: this.entries,
filterText: this.filterText,
statusFilters: this.statusFilters,
toolFilter: this.toolFilter,
expandedIds: this.expandedIds,
autoFollow: this.autoFollow,
onFilterTextChange: (next) => (this.filterText = next),
onToolFilterChange: (next) => (this.toolFilter = next),
onStatusToggle: (status, enabled) => {
this.statusFilters = { ...this.statusFilters, [status]: enabled };
},
onToggleAutoFollow: (next) => {
this.autoFollow = next;
if (next) {
this.scheduleScroll(true);
}
},
onClear: () => this.clearEntries(),
onExpandAll: () => {
this.expandedIds = new Set(this.entries.map((entry) => entry.id));
},
onCollapseAll: () => {
this.expandedIds = new Set();
},
onEntryToggle: (id, open) => {
const next = new Set(this.expandedIds);
if (open) {
next.add(id);
} else {
next.delete(id);
}
this.expandedIds = next;
},
onScroll: (event) => this.handleScroll(event),
});
return html`
<section class="content-header content-header--page">
<section class="content-header">
<div>
<div class="page-title">${titleForRoute("activity")}</div>
<div class="page-sub">${subtitleForRoute("activity")}</div>
</div>
</section>
${renderActivity({
entries: this.entries,
filterText: this.filterText,
statusFilters: this.statusFilters,
toolFilter: this.toolFilter,
expandedIds: this.expandedIds,
autoFollow: this.autoFollow,
onFilterTextChange: (next) => (this.filterText = next),
onToolFilterChange: (next) => (this.toolFilter = next),
onStatusToggle: (status, enabled) => {
this.statusFilters = { ...this.statusFilters, [status]: enabled };
},
onToggleAutoFollow: (next) => {
this.autoFollow = next;
if (next) {
this.scheduleScroll(true);
}
},
onClear: () => this.clearEntries(),
onExpandAll: () => {
this.expandedIds = new Set(this.entries.map((entry) => entry.id));
},
onCollapseAll: () => {
this.expandedIds = new Set();
},
onEntryToggle: (id, open) => {
const next = new Set(this.expandedIds);
if (open) {
next.add(id);
} else {
next.delete(id);
}
this.expandedIds = next;
},
onScroll: (event) => this.handleScroll(event),
})}
${renderSettingsWorkspace(body, { fillHeight: true })}
`;
}
}
@@ -1,6 +1,6 @@
// Control UI tests cover dreaming behavior.
import { describe, expect, it, vi } from "vitest";
import type { RuntimeConfigCapability } from "../../lib/config/index.ts";
import type { RuntimeConfigCapability } from "../../../lib/config/index.ts";
import {
backfillDreamDiary,
copyDreamingArchivePath,
@@ -1,8 +1,8 @@
import type { GatewayBrowserClient, GatewayHelloOk } from "../../api/gateway.ts";
import type { ConfigSnapshot } from "../../api/types.ts";
import type { RuntimeConfigCapability } from "../../lib/config/index.ts";
import { isGatewayMethodAdvertised } from "../../lib/gateway-methods.ts";
import { isPluginEnabledInConfigSnapshot } from "../../lib/plugin-activation.ts";
import type { GatewayBrowserClient, GatewayHelloOk } from "../../../api/gateway.ts";
import type { ConfigSnapshot } from "../../../api/types.ts";
import type { RuntimeConfigCapability } from "../../../lib/config/index.ts";
import { isGatewayMethodAdvertised } from "../../../lib/gateway-methods.ts";
import { isPluginEnabledInConfigSnapshot } from "../../../lib/plugin-activation.ts";
const DEFAULT_DREAM_DIARY_PATH = "DREAMS.md";
const DEFAULT_DREAMING_PLUGIN_ID = "memory-core";
@@ -2,26 +2,24 @@
import { nothing } from "lit";
import { afterEach, describe, expect, it, vi } from "vitest";
import type { GatewayBrowserClient } from "../../api/gateway.ts";
import type { ApplicationContext, ApplicationGatewaySnapshot } from "../../app/context.ts";
import { createDreamingState, type DreamingState } from "./dreaming.ts";
import type { DreamsRouteData } from "./dreams-page.ts";
import type { GatewayBrowserClient } from "../../../api/gateway.ts";
import type { ApplicationContext, ApplicationGatewaySnapshot } from "../../../app/context.ts";
import type { DreamingState } from "./dreaming.ts";
import type { DreamingViewState } from "./view.ts";
import "./dreams-page.ts";
import "./memory-panel.ts";
type TestDreamsPage = HTMLElement & {
type TestMemoryPanel = HTMLElement & {
context: ApplicationContext;
routeData?: DreamsRouteData;
agentId: string;
dreaming: DreamingState;
viewState: DreamingViewState;
restartConfirmOpen: boolean;
restartConfirmLoading: boolean;
pendingEnabled: boolean | null;
applyRouteData: () => void;
applyAgentId: () => void;
applyGatewaySnapshot: (snapshot: ApplicationGatewaySnapshot) => void;
loadAll: () => Promise<void>;
openWikiPage: (lookup: string) => Promise<unknown>;
selectAgent: (agentId: string) => void;
render: () => unknown;
requestUpdate: () => void;
readonly updateComplete: Promise<boolean>;
@@ -61,14 +59,16 @@ function contextWithGateway(client: GatewayBrowserClient, connected: boolean): A
} as unknown as ApplicationContext;
}
function createPage(context: ApplicationContext): TestDreamsPage {
const page = document.createElement("openclaw-dreams-page") as TestDreamsPage;
function createPage(context: ApplicationContext): TestMemoryPanel {
const page = document.createElement("openclaw-agent-memory-panel") as TestMemoryPanel;
page.context = context;
page.agentId = "main";
page.render = () => nothing;
page.loadAll = vi.fn(async () => undefined);
return page;
}
async function replaceContext(page: TestDreamsPage, context: ApplicationContext) {
async function replaceContext(page: TestMemoryPanel, context: ApplicationContext) {
page.context = context;
page.requestUpdate();
await page.updateComplete;
@@ -79,50 +79,35 @@ afterEach(() => {
vi.restoreAllMocks();
});
describe("DreamsPage gateway lifecycle", () => {
it("preserves matching route data on the first gateway bind", async () => {
const request = vi.fn();
const client = { request } as unknown as GatewayBrowserClient;
const context = contextWithGateway(client, true);
const status = { enabled: true } as DreamingState["dreamingStatus"];
const state = createDreamingState({ client, connected: true });
state.dreamingStatus = status;
const page = createPage(context);
page.routeData = {
gateway: context.gateway,
gatewaySnapshot: context.gateway.snapshot,
state,
};
page.applyRouteData();
document.body.append(page);
await page.updateComplete;
expect(page.dreaming.dreamingStatus).toBe(status);
expect(request).not.toHaveBeenCalled();
});
it("rejects preloaded data after a same-client gateway epoch change", async () => {
describe("AgentMemoryPanel gateway lifecycle", () => {
it("loads the selected agent on the first gateway bind", async () => {
const client = {} as GatewayBrowserClient;
const context = contextWithGateway(client, true);
const staleState = createDreamingState({ client, connected: true });
staleState.dreamDiaryContent = "stale";
const page = createPage(context);
page.loadAll = vi.fn(async () => undefined);
page.routeData = {
gateway: context.gateway,
gatewaySnapshot: { ...context.gateway.snapshot },
state: staleState,
};
document.body.append(page);
await page.updateComplete;
expect(page.dreaming).not.toBe(staleState);
expect(page.dreaming.dreamDiaryContent).toBeNull();
expect(page.dreaming.selectedAgentId).toBe("main");
expect(page.loadAll).toHaveBeenCalledOnce();
});
it("resets stale panel data when the selected agent changes", async () => {
const client = {} as GatewayBrowserClient;
const page = createPage(contextWithGateway(client, true));
document.body.append(page);
await page.updateComplete;
const previousState = page.dreaming;
previousState.dreamDiaryContent = "main-only";
page.agentId = "support";
await page.updateComplete;
expect(page.dreaming).not.toBe(previousState);
expect(page.dreaming.selectedAgentId).toBe("support");
expect(page.dreaming.dreamDiaryContent).toBeNull();
});
it("resets provider and modal state when the gateway source changes", async () => {
const client = {} as GatewayBrowserClient;
const page = createPage(contextWithGateway(client, false));
@@ -206,9 +191,9 @@ describe("DreamsPage gateway lifecycle", () => {
}));
const client = { request } as unknown as GatewayBrowserClient;
const page = createPage(contextWithGateway(client, true));
page.agentId = "support";
document.body.append(page);
await page.updateComplete;
page.dreaming.selectedAgentId = "support";
await page.openWikiPage("support.md");
@@ -226,12 +211,13 @@ describe("DreamsPage gateway lifecycle", () => {
request: vi.fn(() => pending.promise),
} as unknown as GatewayBrowserClient;
const page = createPage(contextWithGateway(client, true));
page.agentId = "support";
document.body.append(page);
await page.updateComplete;
page.dreaming.selectedAgentId = "support";
const preview = page.openWikiPage("support.md");
page.dreaming.selectedAgentId = "marketing";
page.agentId = "marketing";
await page.updateComplete;
pending.resolve({ title: "Support", path: "support.md", content: "stale" });
await expect(preview).resolves.toBeNull();
@@ -242,14 +228,15 @@ describe("DreamsPage gateway lifecycle", () => {
request: vi.fn(async () => ({})),
} as unknown as GatewayBrowserClient;
const page = createPage(contextWithGateway(client, true));
page.agentId = "support";
document.body.append(page);
await page.updateComplete;
page.dreaming.selectedAgentId = "support";
page.viewState.wikiPreviewOpen = true;
page.viewState.wikiPreviewLoading = true;
page.viewState.wikiPreviewContent = "support-only";
page.selectAgent("marketing");
page.agentId = "marketing";
await page.updateComplete;
expect(page.viewState.wikiPreviewOpen).toBe(false);
expect(page.viewState.wikiPreviewLoading).toBe(false);
@@ -1,23 +1,18 @@
import { consume } from "@lit/context";
import { html, type PropertyValues } from "lit";
import { property, state } from "lit/decorators.js";
import { subtitleForRoute, titleForRoute } from "../../app-navigation.ts";
import {
applicationContext,
type ApplicationContext,
type ApplicationGateway,
type ApplicationGatewaySnapshot,
} from "../../app/context.ts";
import { t } from "../../i18n/index.ts";
import { currentConfigObject } from "../../lib/config/index.ts";
import { formatTimeMs } from "../../lib/format.ts";
import { isPluginEnabledInConfigSnapshot } from "../../lib/plugin-activation.ts";
import {
resolveSessionAgentFilterId,
resolveSessionAgentFilterOptions,
} from "../../lib/sessions/session-options.ts";
import { OpenClawLightDomElement } from "../../lit/openclaw-element.ts";
import { SubscriptionsController } from "../../lit/subscriptions-controller.ts";
} from "../../../app/context.ts";
import { t } from "../../../i18n/index.ts";
import { currentConfigObject } from "../../../lib/config/index.ts";
import { formatTimeMs } from "../../../lib/format.ts";
import { isPluginEnabledInConfigSnapshot } from "../../../lib/plugin-activation.ts";
import { OpenClawLightDomElement } from "../../../lit/openclaw-element.ts";
import { SubscriptionsController } from "../../../lit/subscriptions-controller.ts";
import {
backfillDreamDiary,
copyDreamingArchivePath,
@@ -37,13 +32,6 @@ import {
import { renderDreamingRestartConfirmation } from "./restart-confirmation.ts";
import { createDreamingViewState, renderDreaming, type DreamingViewState } from "./view.ts";
export type DreamsRouteData = {
// Client identity alone cannot distinguish provider replacement or reconnect epochs.
gateway: ApplicationGateway;
gatewaySnapshot: ApplicationGatewaySnapshot;
state: DreamingState;
};
type WikiPagePreview = {
title: string;
path: string;
@@ -109,20 +97,18 @@ function readWikiPagePreview(value: unknown, lookup: string): WikiPagePreview {
};
}
class DreamsPage extends OpenClawLightDomElement {
class AgentMemoryPanel extends OpenClawLightDomElement {
@consume({ context: applicationContext, subscribe: true })
private context!: ApplicationContext;
@property({ attribute: false }) routeData?: DreamsRouteData;
@property({ attribute: false }) agentId = "";
@state() private dreaming = createDreamingState();
@state() private awaitingRouteData = true;
@state() private restartConfirmOpen = false;
@state() private restartConfirmLoading = false;
@state() private pendingEnabled: boolean | null = null;
private readonly viewState: DreamingViewState = createDreamingViewState();
private routeDataEnabled = true;
private gatewaySource: ApplicationGateway | null = null;
private gatewayBindingEpoch = 0;
private gatewayEpoch = 0;
@@ -145,10 +131,6 @@ class DreamsPage extends OpenClawLightDomElement {
return cleanup;
},
)
.effect(
() => this.context?.agents,
(agents) => agents.subscribe(() => this.applyAgentsState()),
)
.effect(
() => this.context?.runtimeConfig,
(runtimeConfig) => {
@@ -161,8 +143,8 @@ class DreamsPage extends OpenClawLightDomElement {
);
override willUpdate(changed: PropertyValues<this>) {
if (changed.has("routeData")) {
this.applyRouteData();
if (changed.has("agentId")) {
this.applyAgentId();
}
}
@@ -172,8 +154,6 @@ class DreamsPage extends OpenClawLightDomElement {
this.gatewayEpoch += 1;
this.gatewaySource = null;
this.resetTransientState();
this.awaitingRouteData = true;
this.routeDataEnabled = true;
this.dreaming = createDreamingState();
super.disconnectedCallback();
}
@@ -232,7 +212,7 @@ class DreamsPage extends OpenClawLightDomElement {
hello: snapshot.hello,
configSnapshot: this.context.runtimeConfig.state.configSnapshot,
applySessionKey: snapshot.sessionKey,
selectedAgentId: this.resolveSelectedAgentId(),
selectedAgentId: this.agentId.trim() || null,
});
}
@@ -250,8 +230,6 @@ class DreamsPage extends OpenClawLightDomElement {
if (replaceState) {
this.dreaming = this.createGatewayState(snapshot);
if (sourceBind !== "initial") {
this.routeDataEnabled = false;
this.awaitingRouteData = false;
this.resetTransientState();
}
} else {
@@ -259,72 +237,29 @@ class DreamsPage extends OpenClawLightDomElement {
this.dreaming.hello = snapshot.hello;
this.dreaming.applySessionKey = snapshot.sessionKey;
}
if (!this.awaitingRouteData && snapshot.connected && (replaceState || becameConnected)) {
if (snapshot.connected && (replaceState || becameConnected)) {
void this.loadAll();
}
this.requestUpdate();
}
private applyAgentsState() {
const agentsList = this.context.agents.state.agentsList;
const selected = this.dreaming.selectedAgentId;
if (agentsList && (!selected || !agentsList.agents.some((agent) => agent.id === selected))) {
this.resetWikiPreview();
this.dreaming.selectedAgentId = this.resolveSelectedAgentId();
if (!this.awaitingRouteData) {
this.routeDataEnabled = false;
this.loadSelectedAgentData();
}
}
this.requestUpdate();
}
private applyRouteData() {
const data = this.routeData;
if (!data) {
private applyAgentId() {
const agentId = this.agentId.trim();
if (!agentId || this.dreaming.selectedAgentId === agentId) {
return;
}
this.awaitingRouteData = false;
if (!this.routeDataEnabled) {
return;
}
const gateway = this.context.gateway;
const snapshot = gateway.snapshot;
if (data.gateway !== gateway || data.gatewaySnapshot !== snapshot) {
this.routeDataEnabled = false;
this.dreaming = this.createGatewayState(snapshot);
this.gatewayEpoch += 1;
this.resetTransientState();
this.dreaming = this.createGatewayState();
if (this.dreaming.connected) {
void this.loadAll();
return;
}
this.dreaming = {
...data.state,
configSnapshot: this.context.runtimeConfig.state.configSnapshot ?? data.state.configSnapshot,
};
}
private syncConfigSnapshot() {
this.dreaming.configSnapshot = this.context.runtimeConfig.state.configSnapshot;
}
private resolveSelectedAgentId(): string {
const sessionKey = this.context.gateway.snapshot.sessionKey;
return resolveSessionAgentFilterId(
{
agentsList: this.context.agents.state.agentsList,
sessionKey,
},
sessionKey,
);
}
private resolveAgentOptions() {
const sessionKey = this.context.gateway.snapshot.sessionKey;
return resolveSessionAgentFilterOptions({
agentsList: this.context.agents.state.agentsList,
sessionKey,
});
}
private async runDreamingTask<T>(
task: (state: DreamingState) => Promise<T>,
scope = this.captureTaskScope(),
@@ -349,13 +284,14 @@ class DreamsPage extends OpenClawLightDomElement {
if (!scope || !scope.state.client || !scope.state.connected) {
return;
}
this.routeDataEnabled = false;
const runtimeConfig = this.context.runtimeConfig;
if (refreshConfig) {
const runtimeConfig = this.context.runtimeConfig;
await runtimeConfig.refresh();
if (!this.isTaskScopeCurrent(scope) || this.context.runtimeConfig !== runtimeConfig) {
return;
}
} else {
await runtimeConfig.ensureLoaded();
}
if (!this.isTaskScopeCurrent(scope) || this.context.runtimeConfig !== runtimeConfig) {
return;
}
this.syncConfigSnapshot();
await Promise.all([
@@ -366,26 +302,6 @@ class DreamsPage extends OpenClawLightDomElement {
]);
}
private loadSelectedAgentData() {
const scope = this.captureTaskScope();
void Promise.all([
this.runDreamingTask(loadDreamingStatus, scope),
this.runDreamingTask(loadDreamDiary, scope),
this.runDreamingTask(loadWikiImportInsights, scope),
this.runDreamingTask(loadWikiMemoryPalace, scope),
]);
}
private selectAgent(agentId: string) {
if (agentId === this.dreaming.selectedAgentId) {
return;
}
this.routeDataEnabled = false;
this.resetWikiPreview();
this.dreaming.selectedAgentId = agentId;
this.loadSelectedAgentData();
}
private setEnabled(enabled: boolean, dreamingOn: boolean) {
if (
this.dreaming.dreamingModeSaving ||
@@ -414,7 +330,6 @@ class DreamsPage extends OpenClawLightDomElement {
if (enabled == null || this.restartConfirmLoading) {
return;
}
this.routeDataEnabled = false;
this.restartConfirmLoading = true;
this.dreaming.dreamingStatusError = null;
const scope = this.captureTaskScope();
@@ -495,18 +410,12 @@ class DreamsPage extends OpenClawLightDomElement {
const dreamingOn =
dreaming.dreamingStatus?.enabled ??
resolveConfiguredDreaming(currentConfigObject(configState)).enabled;
const loading =
this.awaitingRouteData || dreaming.dreamingStatusLoading || dreaming.dreamingModeSaving;
const refreshLoading =
this.awaitingRouteData || dreaming.dreamingStatusLoading || dreaming.dreamDiaryLoading;
const selectedAgentId = dreaming.selectedAgentId ?? this.resolveSelectedAgentId();
const loading = dreaming.dreamingStatusLoading || dreaming.dreamingModeSaving;
const refreshLoading = dreaming.dreamingStatusLoading || dreaming.dreamDiaryLoading;
const selectedAgentId = dreaming.selectedAgentId ?? this.agentId;
return html`
<section class="content-header content-header--page">
<div>
<div class="page-title">${titleForRoute("dreams")}</div>
<div class="page-sub">${subtitleForRoute("dreams")}</div>
</div>
<section class="content-header content-header--page agent-memory-panel__header">
<div class="page-meta">
<div class="dreaming-header-controls">
<button
@@ -533,7 +442,6 @@ class DreamsPage extends OpenClawLightDomElement {
viewState: this.viewState,
active: dreamingOn,
selectedAgentId,
agentOptions: this.resolveAgentOptions(),
shortTermCount: dreaming.dreamingStatus?.shortTermCount ?? 0,
groundedSignalCount: dreaming.dreamingStatus?.groundedSignalCount ?? 0,
totalSignalCount: dreaming.dreamingStatus?.totalSignalCount ?? 0,
@@ -544,10 +452,10 @@ class DreamsPage extends OpenClawLightDomElement {
dreamingOf: null,
nextCycle: resolveDreamingNextCycle(dreaming.dreamingStatus),
timezone: dreaming.dreamingStatus?.timezone ?? null,
statusLoading: this.awaitingRouteData || dreaming.dreamingStatusLoading,
statusLoading: dreaming.dreamingStatusLoading,
statusError: dreaming.dreamingStatusError,
modeSaving: dreaming.dreamingModeSaving,
dreamDiaryLoading: this.awaitingRouteData || dreaming.dreamDiaryLoading,
dreamDiaryLoading: dreaming.dreamDiaryLoading,
dreamDiaryActionLoading: dreaming.dreamDiaryActionLoading,
dreamDiaryActionMessage: dreaming.dreamDiaryActionMessage,
dreamDiaryActionArchivePath: dreaming.dreamDiaryActionArchivePath,
@@ -559,14 +467,13 @@ class DreamsPage extends OpenClawLightDomElement {
"memory-wiki",
{ enabledByDefault: false },
),
wikiImportInsightsLoading: this.awaitingRouteData || dreaming.wikiImportInsightsLoading,
wikiImportInsightsLoading: dreaming.wikiImportInsightsLoading,
wikiImportInsightsError: dreaming.wikiImportInsightsError,
wikiImportInsights: dreaming.wikiImportInsights,
wikiMemoryPalaceLoading: this.awaitingRouteData || dreaming.wikiMemoryPalaceLoading,
wikiMemoryPalaceLoading: dreaming.wikiMemoryPalaceLoading,
wikiMemoryPalaceError: dreaming.wikiMemoryPalaceError,
wikiMemoryPalace: dreaming.wikiMemoryPalace,
onRefresh: () => void this.loadAll(true),
onSelectAgent: (agentId) => this.selectAgent(agentId),
onRefreshDiary: () => void this.runDreamingTask(loadDreamDiary),
onRefreshImports: () => void this.refreshWikiData(loadWikiImportInsights),
onRefreshMemoryPalace: () => void this.refreshWikiData(loadWikiMemoryPalace),
@@ -591,6 +498,6 @@ class DreamsPage extends OpenClawLightDomElement {
}
}
if (!customElements.get("openclaw-dreams-page")) {
customElements.define("openclaw-dreams-page", DreamsPage);
if (!customElements.get("openclaw-agent-memory-panel")) {
customElements.define("openclaw-agent-memory-panel", AgentMemoryPanel);
}
@@ -1,7 +1,7 @@
// Control UI view renders dreaming restart confirmation screen content.
import { html, nothing } from "lit";
import { t } from "../../i18n/index.ts";
import "../../components/modal-dialog.ts";
import { t } from "../../../i18n/index.ts";
import "../../../components/modal-dialog.ts";
type DreamingRestartConfirmationProps = {
open: boolean;
@@ -25,10 +25,6 @@ function buildProps(overrides?: Partial<DreamingProps>): DreamingProps {
viewState,
active: true,
selectedAgentId: "main",
agentOptions: [
{ id: "main", label: "main" },
{ id: "ceo", label: "ceo" },
],
shortTermCount: 47,
groundedSignalCount: 9,
totalSignalCount: 182,
@@ -200,7 +196,6 @@ function buildProps(overrides?: Partial<DreamingProps>): DreamingProps {
],
},
onRefresh: () => {},
onSelectAgent: () => {},
onRefreshDiary: () => {},
onRefreshImports: () => {},
onRefreshMemoryPalace: () => {},
@@ -1,14 +1,13 @@
// Control UI view renders dreaming screen content.
import { html, nothing } from "lit";
import { repeat } from "lit/directives/repeat.js";
import { unsafeHTML } from "lit/directives/unsafe-html.js";
import {
createLobsterPetLook,
lobsterPetSeed,
renderLobsterSvg,
} from "../../components/lobster-pet.ts";
import { toSanitizedMarkdownHtml } from "../../components/markdown.ts";
import { t } from "../../i18n/index.ts";
} from "../../../components/lobster-pet.ts";
import { toSanitizedMarkdownHtml } from "../../../components/markdown.ts";
import { t } from "../../../i18n/index.ts";
import type { DreamingEntry, WikiImportInsights, WikiMemoryPalace } from "./dreaming.ts";
// ── Diary entry parser ─────────────────────────────────────────────────
@@ -94,16 +93,10 @@ type DreamingPhaseInfo = {
nextRunAtMs?: number;
};
type DreamingAgentOption = {
id: string;
label: string;
};
type DreamingProps = {
viewState: DreamingViewState;
active: boolean;
selectedAgentId: string;
agentOptions: DreamingAgentOption[];
shortTermCount: number;
groundedSignalCount: number;
totalSignalCount: number;
@@ -136,7 +129,6 @@ type DreamingProps = {
wikiMemoryPalaceError: string | null;
wikiMemoryPalace: WikiMemoryPalace | null;
onRefresh: () => void;
onSelectAgent: (agentId: string) => void;
onRefreshDiary: () => void;
onRefreshImports: () => void;
onRefreshMemoryPalace: () => void;
@@ -314,32 +306,6 @@ export function renderDreaming(props: DreamingProps) {
${t("dreaming.tabs.advanced")}
</button>
</nav>
${props.agentOptions.length > 1
? html`<label class="field dreams__agent-select">
<span class="sr-only">${t("dreaming.agentSelect.label")}</span>
<select
data-dreaming-agent-select="true"
aria-label=${t("dreaming.agentSelect.ariaLabel")}
.value=${props.selectedAgentId}
@change=${(e: Event) => {
const nextAgentId = (e.target as HTMLSelectElement).value;
if (nextAgentId === props.selectedAgentId) {
return;
}
props.onSelectAgent(nextAgentId);
}}
>
${repeat(
props.agentOptions,
(entry) => entry.id,
(entry) =>
html`<option value=${entry.id} ?selected=${entry.id === props.selectedAgentId}>
${entry.label}
</option>`,
)}
</select>
</label>`
: nothing}
</div>
${state.activeSubTab === "scene"
+13 -1
View File
@@ -147,6 +147,18 @@ function createProps(overrides: Partial<AgentsProps> = {}): AgentsProps {
}
describe("renderAgents", () => {
it("renders Memory after Cron and scopes the panel to the selected agent", () => {
const container = document.createElement("div");
render(renderAgents(createProps({ activePanel: "memory" })), container);
const tabs = [...container.querySelectorAll(".agent-tab")].map((tab) => directText(tab));
expect(tabs.slice(-2)).toEqual(["Cron Jobs", "Memory"]);
const panel = container.querySelector<HTMLElement & { agentId: string }>(
"openclaw-agent-memory-panel",
);
expect(panel?.agentId).toBe("beta");
});
it("renders the custom agent select with the provided agents and selected label", async () => {
const container = document.createElement("div");
document.body.append(container);
@@ -406,7 +418,7 @@ describe("renderAgents", () => {
(button) => button.textContent?.trim(),
);
expect(tabLabels).toEqual(["概览", "文件", "工具", "技能", "频道", "Cron Jobs"]);
expect(tabLabels).toEqual(["概览", "文件", "工具", "技能", "频道", "Cron Jobs", "记忆"]);
const cards = container.querySelectorAll("section.card");
expect(cards[1]?.querySelector(".muted")?.textContent?.trim()).toBe("上次刷新:从未");
} finally {
+7
View File
@@ -17,6 +17,7 @@ import type {
import { t } from "../../i18n/index.ts";
import { buildAgentContext } from "../../lib/agents/display.ts";
import type { AgentsPanel } from "../../lib/agents/index.ts";
import "./memory/memory-panel.ts";
import { renderAgentOverview } from "./panels-overview.ts";
import { renderAgentFiles, renderAgentChannels, renderAgentCron } from "./panels-status-files.ts";
import { renderAgentTools, renderAgentSkills } from "./panels-tools-skills.ts";
@@ -327,6 +328,11 @@ export function renderAgents(props: AgentsProps) {
onSelectPanel: props.onSelectPanel,
})
: nothing}
${props.activePanel === "memory"
? html`<openclaw-agent-memory-panel
.agentId=${selectedAgent.id}
></openclaw-agent-memory-panel>`
: nothing}
`}
</section>
</div>
@@ -345,6 +351,7 @@ function renderAgentTabs(
{ id: "skills", label: t("agents.tabs.skills") },
{ id: "channels", label: t("agents.tabs.channels") },
{ id: "cron", label: t("agents.tabs.cronJobs") },
{ id: "memory", label: t("agents.tabs.memory") },
];
return html`
<div class="agent-tabs">
+2 -2
View File
@@ -4,7 +4,7 @@ import { property, state } from "lit/decorators.js";
import type { SystemInfoResult } from "../../../../packages/gateway-protocol/src/index.js";
import { GatewayRequestError, type GatewayBrowserClient } from "../../api/gateway.ts";
import type { FastMode } from "../../api/types.ts";
import type { RouteId } from "../../app-route-paths.ts";
import { pathForRoute, type RouteId } from "../../app-route-paths.ts";
import {
applicationContext,
type ApplicationContext,
@@ -797,9 +797,9 @@ export class ConfigPage extends OpenClawLightDomElement {
configSaving: configState.configSaving,
configApplying: configState.configApplying,
connected: configState.connected,
pluginsHref: pathForRoute("plugins", this.context.basePath),
onSaveConfig: () => void runtimeConfig.save(),
onApplyConfig: () => void runtimeConfig.apply(),
onServerEnabledChange: (name, enabled) => runtimeConfig.setMcpServerEnabled(name, enabled),
editor: renderConfig({
...props,
activeSection: "mcp",
+8 -7
View File
@@ -26,9 +26,9 @@ function createProps(overrides: Partial<McpViewProps> = {}): McpViewProps {
configSaving: false,
configApplying: false,
connected: true,
pluginsHref: "/settings/plugins",
onSaveConfig: vi.fn(),
onApplyConfig: vi.fn(),
onServerEnabledChange: vi.fn(),
editor: html`<div class="test-editor"></div>`,
...overrides,
};
@@ -45,11 +45,10 @@ function buttonByText(container: Element, text: string): HTMLButtonElement {
}
describe("renderMcp", () => {
it("summarizes configured MCP servers and exposes enablement controls", () => {
const onServerEnabledChange = vi.fn();
it("summarizes configured MCP servers and links management to Plugins", () => {
const container = document.createElement("div");
render(renderMcp(createProps({ onServerEnabledChange })), container);
render(renderMcp(createProps()), container);
expect(container.querySelector(".mcp-page__summary")?.textContent).toContain("Servers");
expect(container.querySelector(".mcp-server-list")?.textContent).toContain("docs");
@@ -58,9 +57,11 @@ describe("renderMcp", () => {
"openclaw mcp login docs",
);
buttonByText(container, "Enable").click();
expect(onServerEnabledChange).toHaveBeenCalledWith("local", true);
expect(
container.querySelector<HTMLAnchorElement>('a[href="/settings/plugins"]')?.textContent,
).toContain("Manage servers on the Plugins page.");
expect(buttonByText.bind(null, container, "Enable")).toThrow();
expect(buttonByText.bind(null, container, "Disable")).toThrow();
});
it("renders an empty state when no MCP servers are configured", () => {
+5 -10
View File
@@ -1,6 +1,7 @@
// Control UI MCP Settings page presentation.
import { redactSensitiveUrlLikeString } from "@openclaw/net-policy/redact-sensitive-url";
import { html, nothing, type TemplateResult } from "lit";
import { t } from "../../i18n/index.ts";
type McpServerRow = {
name: string;
@@ -19,9 +20,9 @@ export type McpViewProps = {
configSaving: boolean;
configApplying: boolean;
connected: boolean;
pluginsHref: string;
onSaveConfig: () => void;
onApplyConfig: () => void;
onServerEnabledChange: (name: string, enabled: boolean) => void;
editor: TemplateResult;
};
@@ -64,7 +65,7 @@ function quoteShellArg(value: string): string {
return /^[A-Za-z0-9._:/-]+$/.test(value) ? value : `'${value.replaceAll("'", "'\\''")}'`;
}
function renderServerRow(props: McpViewProps, server: McpServerRow) {
function renderServerRow(server: McpServerRow) {
const quotedName = quoteShellArg(server.name);
const probeCommand = `openclaw mcp probe ${quotedName}`;
const loginCommand = `openclaw mcp login ${quotedName}`;
@@ -87,13 +88,6 @@ function renderServerRow(props: McpViewProps, server: McpServerRow) {
</div>
</div>
<div class="mcp-server-row__actions">
<button
class="btn btn--sm"
?disabled=${props.configSaving}
@click=${() => props.onServerEnabledChange(server.name, !server.enabled)}
>
${server.enabled ? "Disable" : "Enable"}
</button>
<code>${server.auth === "oauth" ? loginCommand : probeCommand}</code>
</div>
</article>
@@ -152,6 +146,7 @@ export function renderMcp(props: McpViewProps) {
<div class="card-sub">
Runtime changes apply after save and publish; active agents rebuild MCP runtimes on
next use.
<a href=${props.pluginsHref}>${t("mcpPage.manageServersLink")}</a>
</div>
</div>
<div class="mcp-server-list__actions">
@@ -172,7 +167,7 @@ export function renderMcp(props: McpViewProps) {
</div>
${rows.length
? html`<div class="mcp-server-list__rows">
${rows.map((row) => renderServerRow(props, row))}
${rows.map((row) => renderServerRow(row))}
</div>`
: html`<div class="data-table-empty-state">No MCP servers configured.</div>`}
</section>
-53
View File
@@ -1,53 +0,0 @@
import { definePage } from "@openclaw/uirouter";
import { html } from "lit";
import type { ApplicationContext } from "../../app/context.ts";
import { resolveSessionAgentFilterId } from "../../lib/sessions/session-options.ts";
import {
createDreamingState,
loadDreamDiary,
loadDreamingStatus,
loadWikiImportInsights,
loadWikiMemoryPalace,
} from "./dreaming.ts";
import type { DreamsRouteData } from "./dreams-page.ts";
async function loadDreamsRoute(context: ApplicationContext): Promise<DreamsRouteData> {
const gateway = context.gateway;
const gatewaySnapshot = gateway.snapshot;
await Promise.all([context.runtimeConfig.ensureLoaded(), context.agents.ensureList()]);
const sessionKey = gatewaySnapshot.sessionKey;
const state = createDreamingState({
client: gatewaySnapshot.client,
connected: gatewaySnapshot.connected,
hello: gatewaySnapshot.hello,
configSnapshot: context.runtimeConfig.state.configSnapshot,
applySessionKey: sessionKey,
selectedAgentId: resolveSessionAgentFilterId(
{
agentsList: context.agents.state.agentsList,
sessionKey,
},
sessionKey,
),
});
await Promise.all([
loadDreamingStatus(state),
loadDreamDiary(state),
loadWikiImportInsights(state),
loadWikiMemoryPalace(state),
]);
return { gateway, gatewaySnapshot, state };
}
export const page = definePage({
id: "dreams",
path: "/dreaming",
aliases: ["/dreams"],
loader: loadDreamsRoute,
component: () =>
import("./dreams-page.ts").then(() => ({
header: true,
render: (data: DreamsRouteData | undefined) =>
html`<openclaw-dreams-page .routeData=${data}></openclaw-dreams-page>`,
})),
});
-29
View File
@@ -4,8 +4,6 @@ import type { GatewayBrowserClient } from "../api/gateway.ts";
import type { ApplicationContext, ApplicationGatewaySnapshot } from "../app/context.ts";
import type { AgentsRouteData } from "./agents/agents-page.ts";
import { page as agentsPage } from "./agents/route.ts";
import type { DreamsRouteData } from "./dreams/dreams-page.ts";
import { page as dreamsPage } from "./dreams/route.ts";
import type { NodesRouteData } from "./nodes/nodes-page.ts";
import { page as nodesPage } from "./nodes/route.ts";
import type { PluginsRouteData } from "./plugins/plugins-page.ts";
@@ -191,31 +189,4 @@ describe("route preload gateway provenance", () => {
expect(data.result).toBeNull();
expect(data.error).toBeNull();
});
it("keeps dreams provenance from before capability warmup", async () => {
const client = {} as GatewayBrowserClient;
const originalSnapshot = snapshot(client, false);
const mutable = mutableGateway(originalSnapshot);
const gateway = mutable.gateway;
const configReady = deferred<void>();
const request = loadRoute<DreamsRouteData>(dreamsPage, {
gateway,
agents: {
state: { agentsList: null },
ensureList: vi.fn(async () => null),
},
runtimeConfig: {
state: { configSnapshot: null },
ensureLoaded: vi.fn(() => configReady.promise),
},
} as unknown as ApplicationContext);
mutable.replaceSnapshot(snapshot(client, true));
configReady.resolve();
const data = await request;
expect(data.gateway).toBe(gateway);
expect(data.gatewaySnapshot).toBe(originalSnapshot);
expect(data.state.connected).toBe(false);
});
});
+4
View File
@@ -10,6 +10,10 @@
overflow: hidden;
}
.agent-memory-panel__header {
justify-content: flex-end;
}
/* ---- Sub-tab bar ---- */
.dreams__tabs {