mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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",
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -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" },
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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"]);
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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 n’a é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 n’est 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 l’outil","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 l’outil","updated_at":"2026-07-11T13:50:40.595Z"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+287
-287
@@ -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",
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+6
-6
@@ -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
|
||||
}
|
||||
|
||||
Generated
+2
@@ -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"}
|
||||
|
||||
Generated
+4
-6
@@ -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: "اليوميات",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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: "دفترچه",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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: "डायरी",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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: "일지",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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: "Дневник",
|
||||
|
||||
Generated
+4
-6
@@ -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: "ไดอารี",
|
||||
|
||||
Generated
+4
-6
@@ -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",
|
||||
|
||||
Generated
+4
-6
@@ -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: "Щоденник",
|
||||
|
||||
Generated
+4
-6
@@ -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ý",
|
||||
|
||||
Generated
+4
-6
@@ -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: "日记",
|
||||
|
||||
Generated
+4
-6
@@ -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: "日誌",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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";
|
||||
+38
-51
@@ -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);
|
||||
}
|
||||
+2
-2
@@ -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"
|
||||
@@ -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 {
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>`,
|
||||
})),
|
||||
});
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.agent-memory-panel__header {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
/* ---- Sub-tab bar ---- */
|
||||
|
||||
.dreams__tabs {
|
||||
|
||||
Reference in New Issue
Block a user