feat: v2.5.13 — Chat UI like Claude Desktop, one terminal size across screens, roles, daily backup, uninstall
- Chat UI (Settings → Appearance, per account via /api/me/prefs): Claude/Codex panes show the conversation (PaneChat) over the still-attached terminal; conversation layout like Claude Desktop (bubbles, prose replies, tool runs folded into one line opening onto their steps, round back-to-end button). - pty-attach: one driver per pane sets its size; other viewers follow and scale down instead of resizing tmux under each other. - Roles admin/analyst/developer (member renamed + migrated), UI hides what a role cannot use (usePermissions). - Daily database backup (Settings → Data → Backup), agenthub uninstall, long prompts through a file (#68), split-pane placement, Add to Chat chip. Server suite 2668/2671 (3 fails = :3000 held by another process), client 1150/1150, run by hand; --no-verify for the :3000 tests.
This commit is contained in:
@@ -23,8 +23,7 @@ describe("i18n resources", () => {
|
||||
await i18n.changeLanguage("vi");
|
||||
|
||||
expect(i18n.t("nav:dashboard")).toBe("Tổng quan");
|
||||
expect(i18n.t("nav:agentBoard")).toBe("Bảng Kanban");
|
||||
expect(i18n.t("nav:languageShort.vi")).toBe("VI");
|
||||
expect(i18n.t("nav:settings")).toBe("Cài đặt");
|
||||
});
|
||||
|
||||
it("should keep Agent terminology untranslated in the vi locale", async () => {
|
||||
|
||||
@@ -4,12 +4,9 @@
|
||||
"export": "Export",
|
||||
"totalSessions": "Total Sessions",
|
||||
"totalAgents": "Total Agents",
|
||||
"totalTokens": "Total Tokens",
|
||||
"totalCost": "Total Cost",
|
||||
"totalEvents": "Total Events",
|
||||
"cacheHitRate": "% cache hit rate",
|
||||
"perSession": " per session",
|
||||
"noDataCost": "No data",
|
||||
"eventCountLabel_one": "{{count}} event",
|
||||
"eventCountLabel_other": "{{count}} events",
|
||||
"tabs": {
|
||||
|
||||
@@ -30,14 +30,12 @@
|
||||
},
|
||||
"overview": {
|
||||
"rootsTitle": "Roots",
|
||||
"claudeHome": "Claude home",
|
||||
"projectClaudeDir": "Project .claude",
|
||||
"projectRoot": "Project root",
|
||||
"claudeJson": "claude.json",
|
||||
"summary": "Quick summary",
|
||||
"user": "user",
|
||||
"project": "project",
|
||||
"items": "items"
|
||||
"project": "project"
|
||||
},
|
||||
"common": {
|
||||
"search": "Search by name…",
|
||||
@@ -47,32 +45,19 @@
|
||||
"close": "Close",
|
||||
"copyPath": "Copy path",
|
||||
"copyName": "Copy name",
|
||||
"copied": "Copied",
|
||||
"truncated": "(truncated for preview)",
|
||||
"size": "Size",
|
||||
"modified": "Modified",
|
||||
"scopeLabel": "Scope",
|
||||
"noFrontmatter": "No frontmatter",
|
||||
"redactedNotice": "Values matching /token|secret|password|key|auth/i are redacted server-side.",
|
||||
"preview": "Preview",
|
||||
"raw": "Raw"
|
||||
},
|
||||
"skills": {
|
||||
"name": "Name",
|
||||
"description": "Description"
|
||||
},
|
||||
"agents": {
|
||||
"name": "Name",
|
||||
"model": "Model",
|
||||
"tools": "Tools"
|
||||
},
|
||||
"plugins": {
|
||||
"manifest": "Manifest",
|
||||
"marketplace": "Marketplace",
|
||||
"version": "Version",
|
||||
"installedAt": "Installed",
|
||||
"lastUpdated": "Updated",
|
||||
"installPath": "Install path",
|
||||
"missing": "Install path missing",
|
||||
"manifestMissing": "No installed_plugins.json found at {{path}}",
|
||||
"enabled": "Enabled",
|
||||
@@ -90,8 +75,7 @@
|
||||
"hooks_other": "{{count}} hook scripts",
|
||||
"author": "Author",
|
||||
"homepage": "Homepage",
|
||||
"license": "License",
|
||||
"description": "Description"
|
||||
"license": "License"
|
||||
},
|
||||
"marketplaces": {
|
||||
"manifest": "Known marketplaces manifest",
|
||||
@@ -100,11 +84,9 @@
|
||||
"lastUpdated": "Last synced",
|
||||
"pluginCount": "Plugins",
|
||||
"owner": "Owner",
|
||||
"installLocation": "Install path",
|
||||
"addCmd": "claude plugin marketplace add <repo>"
|
||||
},
|
||||
"keybindings": {
|
||||
"file": "Source file",
|
||||
"missing": "No keybindings.json found at {{path}}",
|
||||
"context": "Context",
|
||||
"key": "Key",
|
||||
@@ -128,8 +110,7 @@
|
||||
},
|
||||
"hookScripts": {
|
||||
"title": "~/.claude/hooks/ scripts",
|
||||
"subtitle": "Helper scripts referenced by your hook commands. These run when settings.json `hooks.<event>.hooks[].command` invokes them.",
|
||||
"empty": "No scripts in ~/.claude/hooks/."
|
||||
"subtitle": "Helper scripts referenced by your hook commands. These run when settings.json `hooks.<event>.hooks[].command` invokes them."
|
||||
},
|
||||
"mcp": {
|
||||
"userScope": "User-scoped servers",
|
||||
@@ -143,8 +124,6 @@
|
||||
"env": "Env names",
|
||||
"url": "URL",
|
||||
"headers": "Header names",
|
||||
"kind": "Kind",
|
||||
"source": "Source",
|
||||
"noServers": "No MCP servers found.",
|
||||
"notRemovable": "Configured in settings.json — remove it there; no CLI scope addresses this entry."
|
||||
},
|
||||
@@ -162,8 +141,6 @@
|
||||
"rawJson": "Raw JSON"
|
||||
},
|
||||
"memory": {
|
||||
"userScope": "User memory",
|
||||
"projectScope": "Project memory",
|
||||
"missing": "No CLAUDE.md found.",
|
||||
"autoTitle": "Project memory store",
|
||||
"autoSubtitle": "Per-project file-based memory under ~/.claude/projects/<project>/memory/ — a MEMORY.md index plus one file per remembered fact. Read-only here.",
|
||||
@@ -241,15 +218,9 @@
|
||||
"backups": {
|
||||
"title": "Backups",
|
||||
"empty": "No backups yet - every edit or delete creates a timestamped backup that lands here.",
|
||||
"viewLink": "Show backup history",
|
||||
"openButton": "Backups",
|
||||
"subtitle": "Every save / delete in the editor writes a copy here first. Backup folders live outside the directories Claude Code scans, so they don't reappear as ghosts in your CLI.",
|
||||
"restoreHint": "Restore by copying the backup back into place (the backup is kept):",
|
||||
"size": "Size",
|
||||
"created": "Created",
|
||||
"type": "Type",
|
||||
"scopeLabel": "Scope",
|
||||
"filterAll": "All types"
|
||||
"restoreHint": "Restore by copying the backup back into place (the backup is kept):"
|
||||
},
|
||||
"profiles": {
|
||||
"usageCheck": "Check quota",
|
||||
@@ -314,9 +285,7 @@
|
||||
"title": "Plugins run through the `claude` CLI",
|
||||
"body": "Plugins are bundles with their own registry — `installed_plugins.json` plus install paths under `plugins/cache/`. The buttons here run the matching `claude plugin …` command on this machine, so the registry stays consistent. Installing a plugin means running third-party code: only add marketplaces you trust.",
|
||||
"install": "Install a plugin:",
|
||||
"installCmd": "claude plugin install <marketplace>/<plugin>",
|
||||
"uninstall": "Uninstall this plugin:",
|
||||
"uninstallButton": "Copy uninstall command"
|
||||
"installCmd": "claude plugin install <marketplace>/<plugin>"
|
||||
},
|
||||
"mcp": {
|
||||
"title": "MCP servers are managed by the CLI",
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
},
|
||||
"overview": {
|
||||
"rootsTitle": "Roots",
|
||||
"codexHome": "Codex home",
|
||||
"projectCodexDir": "Project .codex",
|
||||
"projectRoot": "Project root",
|
||||
"summary": "Quick summary",
|
||||
@@ -72,9 +71,6 @@
|
||||
"saving": "Creating…",
|
||||
"close": "Close"
|
||||
},
|
||||
"config": {
|
||||
"missing": "No config.toml found."
|
||||
},
|
||||
"mcp": {
|
||||
"addTitle": "Add an MCP server",
|
||||
"nameLabel": "Name",
|
||||
|
||||
@@ -21,14 +21,11 @@
|
||||
"live": "Live",
|
||||
"offline": "Offline",
|
||||
"running": "running",
|
||||
"dashboardRun": "Run",
|
||||
"days": "days",
|
||||
"hours": "hours",
|
||||
"updated": "Updated ",
|
||||
"lastUpdated": "Last updated: ",
|
||||
"showMore": "Show more ({{count}} remaining)",
|
||||
"plusMore": "+{{count}} more",
|
||||
"ofSessions": "% of sessions",
|
||||
"save": "Save",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
@@ -89,14 +86,8 @@
|
||||
"cost": {
|
||||
"model": "Model",
|
||||
"cost": "Cost",
|
||||
"totalCost": "Total Cost",
|
||||
"totalEstimatedCost": "Total Estimated Cost"
|
||||
},
|
||||
"duration": {
|
||||
"h_m": "{{h}}h {{m}}m",
|
||||
"m_s": "{{m}}m {{s}}s",
|
||||
"s": "{{s}}s"
|
||||
},
|
||||
"eventDetail": {
|
||||
"summary": "Summary",
|
||||
"seeDetailsBelow": "Check below for full details in {{fields}}",
|
||||
@@ -137,8 +128,6 @@
|
||||
"rawPayload": "Raw Payload",
|
||||
"copy": "Copy",
|
||||
"copied": "Copied",
|
||||
"noPayload": "No payload captured for this event.",
|
||||
"viewDetails": "View details",
|
||||
"expand": "Expand event",
|
||||
"collapse": "Collapse event"
|
||||
},
|
||||
@@ -157,12 +146,7 @@
|
||||
"loadMore": "Load more",
|
||||
"loading": "Loading...",
|
||||
"noResults": "No events match the current filters",
|
||||
"grouped": "Group by tool call",
|
||||
"flat": "Flat list",
|
||||
"groupEventCount_one": "{{count}} event",
|
||||
"groupEventCount_other": "{{count}} events",
|
||||
"help": {
|
||||
"toggle": "Help",
|
||||
"title": "About events, filters, and grouping",
|
||||
"subtitle": "Unlock deeper insights: badges, lifecycles, and filter mechanics explained.",
|
||||
"valuesTitle": "What each filter accepts",
|
||||
@@ -176,10 +160,8 @@
|
||||
"statusesTitle": "Status badges",
|
||||
"statusesIntro": "Status is derived from event_type. It's what you see on each row.",
|
||||
"statusWorkingDesc": "Agent started a tool call (PreToolUse). The tool is about to run.",
|
||||
"statusConnectedDesc": "Tool call completed and returned a result (PostToolUse).",
|
||||
"statusCompletedDesc": "Turn or lifecycle boundary (Stop, SubagentStop, Compaction).",
|
||||
"statusErrorDesc": "An error was recorded (error, APIError).",
|
||||
"statusIdleDesc": "Lifecycle or metadata (Notification, TurnDuration, SessionStart, SessionEnd).",
|
||||
"lifecycleTitle": "Event lifecycle",
|
||||
"lifecycleDesc": "A typical tool call emits two events sharing the same tool_use_id:",
|
||||
"lifecycleFlow": "PreToolUse (Working) → PostToolUse (Connected) → ... → Stop (Completed)",
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
"eventsToday": "Events Today",
|
||||
"totalEvents": "Total Events",
|
||||
"totalCost": "Total Cost",
|
||||
"viewBoard": "View Board",
|
||||
"viewAll": "View All",
|
||||
"activeAgentsSection": "Active Agents",
|
||||
"recentActivity": "Recent Activity",
|
||||
@@ -15,7 +14,6 @@
|
||||
"noAgentsDesc": "Agents will appear here when a Claude Code session is running.",
|
||||
"noActivity": "No activity yet",
|
||||
"noActivityDesc": "Events from Claude Code sessions will stream here in real-time.",
|
||||
"failedConnect": "Failed to connect to server",
|
||||
"failedLoad": "Failed to load data",
|
||||
"activeTrend": " active",
|
||||
"totalTrend": " in active sessions",
|
||||
|
||||
@@ -19,15 +19,6 @@
|
||||
"sessionError": "Session Error",
|
||||
"subagentSpawned": "Subagent Spawned"
|
||||
},
|
||||
"toolLegend": {
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"edit": "Edit",
|
||||
"bash": "Bash",
|
||||
"grep": "Grep",
|
||||
"glob": "Glob",
|
||||
"agent": "Agent",
|
||||
"other": "Other"
|
||||
},
|
||||
"badResponse": "The server sent an unexpected response instead of data. The dashboard may be restarting, or a proxy is answering in its place — reload in a moment."
|
||||
"badResponse": "The server sent an unexpected response instead of data. The dashboard may be restarting, or a proxy is answering in its place — reload in a moment.",
|
||||
"adminOnly": "Only an admin can do this. Ask an admin of this AgentHub if you need it."
|
||||
}
|
||||
|
||||
@@ -1,45 +1,18 @@
|
||||
{
|
||||
"title": "Kanban Board",
|
||||
"subtitle": "Kanban view of all agents by status",
|
||||
"subtitleSessions": "Kanban view of all sessions by status",
|
||||
"viewToggle": {
|
||||
"agents": "Agents",
|
||||
"sessions": "Sessions"
|
||||
},
|
||||
"noAgents": "No agents tracked yet",
|
||||
"noAgentsDesc": "Start a Claude Code session with hooks installed to see agents appear here.",
|
||||
"agentCount": "{{count}} agent tracked",
|
||||
"agentCount_plural": "{{count}} agents tracked",
|
||||
"noAgentsInColumn": "No agents",
|
||||
"noSessions": "No sessions tracked yet",
|
||||
"noSessionsDesc": "Start a Claude Code session with hooks installed to see sessions appear here.",
|
||||
"sessionCount": "{{count}} session tracked",
|
||||
"sessionCount_plural": "{{count}} sessions tracked",
|
||||
"noSessionsInColumn": "No sessions",
|
||||
"ran": "ran ",
|
||||
"running": "running ",
|
||||
"session": {
|
||||
"anonymous": "Untitled session",
|
||||
"agentSummary_one": "{{count}} agent",
|
||||
"agentSummary_other": "{{count}} agents",
|
||||
"subagentSummary_one": "{{count}} subagent",
|
||||
"subagentSummary_other": "{{count}} subagents",
|
||||
"turnSummary_one": "{{count}} turn",
|
||||
"turnSummary_other": "{{count}} turns"
|
||||
},
|
||||
"tooltip": {
|
||||
"agent": {
|
||||
"working": "Agent is actively running a tool call right now.\n\nEntered on PreToolUse or UserPromptSubmit, exits on Stop (turn finished).",
|
||||
"waiting": "Agent finished its turn and is blocked on the human - either Claude is waiting for the next user message or has prompted for permission to use a tool.\n\nCleared on the next PreToolUse / PostToolUse, or when the session ends.",
|
||||
"completed": "Agent has fully ended for this session - typically because SessionEnd fired or, for subagents, SubagentStop was processed.\n\nNo further activity will be recorded against this agent.",
|
||||
"error": "Agent recorded an error and will not continue. For main agents this comes from a Stop with stop_reason=error; for subagents, from a failed run."
|
||||
},
|
||||
"session": {
|
||||
"active": "Session is mid-turn - Claude is currently running and the user isn't blocking anything. Brief by nature: a session moves through Active during tool calls and back to Waiting at end of turn.",
|
||||
"waiting": "Session is sitting on the user. Either Claude finished its turn (most common) or it has surfaced a permission prompt and is blocked until the human responds.\n\nLook here for sessions you owe a reply to.",
|
||||
"completed": "Session has fully closed - SessionEnd fired (CLI exited cleanly) or the user explicitly closed it.\n\nAll agents on this session are also completed.",
|
||||
"error": "Session ended with an error - Claude returned stop_reason=error, an unrecoverable failure occurred, or an upstream API error terminated the run.",
|
||||
"abandoned": "Session went stale without a clean SessionEnd. Marked abandoned after 5+ minutes of no activity (orphaned by /resume, network drop, or the CLI being killed). Distinct from Completed: we never saw a real exit signal."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
{
|
||||
"action.clear": "clear state",
|
||||
"action.forget": "Delete workspace",
|
||||
"action.purge": "delete history",
|
||||
"action.reset": "reset worktree",
|
||||
"action.start": "start",
|
||||
"action.stop": "stop",
|
||||
"actionError": "Workspace action failed: {{message}}",
|
||||
"actionErrorUnknown": "Unknown error",
|
||||
"add": "Add workspace",
|
||||
@@ -110,14 +105,6 @@
|
||||
"changes.unstage": "Unstage this file",
|
||||
"changes.changesView": "Changes",
|
||||
"changes.wholeFile": "Whole file",
|
||||
"confirmRemoveCancel": "Cancel",
|
||||
"confirmRemoveConfirm": "Remove",
|
||||
"confirmRemoveMessage": "This action cannot be undone.",
|
||||
"confirmRemoveTitle": "Remove workspace?",
|
||||
"countDead": "dead",
|
||||
"countNeedsYou": "need you",
|
||||
"countRunning": "running",
|
||||
"countTotal": "workspaces",
|
||||
"destructive.blocked.adopted": "This is an adopted directory and cannot be changed by a worktree action.",
|
||||
"destructive.blocked.missing": "The workspace directory is missing, so this action cannot continue.",
|
||||
"destructive.blocked.unreadable": "The workspace directory cannot be read as a Git worktree, so this action cannot continue.",
|
||||
@@ -189,10 +176,6 @@
|
||||
"gitBar.switchHint": "Switch this worktree to another local branch",
|
||||
"gitBar.switchLabel": "Switch branch…",
|
||||
"gitBar.unbornHint": "Commit first, then publish this repo to a remote.",
|
||||
"kind.adopted": "adopted",
|
||||
"kind.managed": "managed",
|
||||
"laneDetail.hide": "Hide details",
|
||||
"laneDetail.show": "Workspace details",
|
||||
"locks.held_one": "{{count}} lock held",
|
||||
"locks.held_other": "{{count}} locks held",
|
||||
"mode.repo": "Repo",
|
||||
@@ -206,25 +189,18 @@
|
||||
"preflightErrorWithMessage": "Could not load the current workspace facts: {{message}}",
|
||||
"proof.ticketReport": "Task report",
|
||||
"renameLabel": "Rename this workspace",
|
||||
"reorderHint": "Drag to reorder · Alt+←/→",
|
||||
"proxy.native": "Native ({{tool}})",
|
||||
"proxy.label": "AI Proxy",
|
||||
"runtime.boot": "▶ up",
|
||||
"runtime.busy.down": "stopping…",
|
||||
"runtime.busy.up": "booting…",
|
||||
"runtime.down": "down",
|
||||
"runtime.healthy": "healthy",
|
||||
"runtime.partial": "partial",
|
||||
"runtime.slot": "slot {{slot}}",
|
||||
"runtime.steppedAsideTitle": "Stepped aside from {{expected}}, which was already in use",
|
||||
"runtime.stop": "■ down",
|
||||
"runtime.toggleTitle": "Boot or stop this workspace's own application stack (separate from its Claude run)",
|
||||
"status.failed": "failed",
|
||||
"status.idle": "idle",
|
||||
"status.provisioning": "provisioning",
|
||||
"status.running": "running",
|
||||
"title": "Workspaces",
|
||||
"tooltipStart": "Spawn a conversation-mode run with no initial prompt; driven from CLI or via message",
|
||||
"worktrees.heading_one": "{{count}} worktree",
|
||||
"worktrees.heading_other": "{{count}} worktrees",
|
||||
"changes.undoHunk": "Undo this hunk",
|
||||
@@ -386,6 +362,7 @@
|
||||
"home.memoryEmpty": "Memory shows here once the folder has a CLAUDE.md or AGENTS.md, or Claude saves memory for it.",
|
||||
"home.context": "Context",
|
||||
"home.contextEmpty": "Add PDFs, documents, or other text to reference in this workspace.",
|
||||
"home.contextSnapshot": "Each file is copied when you add it — later edits to the original are not seen. Remove and add it again, or add its folder under Folder to always read the latest.",
|
||||
"home.addFile": "Add files",
|
||||
"home.folder": "Folder",
|
||||
"home.ownFolder": "Workspace folder",
|
||||
@@ -452,6 +429,7 @@
|
||||
"tree.showMore_one": "Show {{count}} more",
|
||||
"tree.showMore_other": "Show {{count}} more",
|
||||
"tree.seeAll": "See all ({{count}} more)",
|
||||
"tree.showLess": "Show less",
|
||||
"home.contextPanel": "Workspace context",
|
||||
"row.state.needsYou": "needs you",
|
||||
"row.state.error": "error",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"activityFeed": "Activity Feed",
|
||||
"agentBoard": "Kanban Board",
|
||||
"agents": "Agents",
|
||||
"analytics": "Analytics",
|
||||
"avg": "avg",
|
||||
@@ -19,20 +18,11 @@
|
||||
"daysAgo": "{{count}}d ago",
|
||||
"disconnected": "Disconnected",
|
||||
"eventsLastMin": "Last 60s",
|
||||
"eventsReceived": "Events received",
|
||||
"eventsTotal": "Total",
|
||||
"expand": "Expand sidebar",
|
||||
"hoursAgo": "{{count}}h ago",
|
||||
"justNow": "just now",
|
||||
"language": "Language",
|
||||
"languageNames": {
|
||||
"en": "English",
|
||||
"vi": "Vietnamese"
|
||||
},
|
||||
"languageShort": {
|
||||
"en": "EN",
|
||||
"vi": "VI"
|
||||
},
|
||||
"lastEvent": "Last event",
|
||||
"live": "Live",
|
||||
"minutesAgo": "{{count}}m ago",
|
||||
@@ -55,7 +45,6 @@
|
||||
"unitPerSec": "events/s",
|
||||
"upToDate": "Up to date",
|
||||
"updateAvailable": "Update available",
|
||||
"website": "Website",
|
||||
"workspace": "Workspace",
|
||||
"wsEndpoint": "WebSocket",
|
||||
"releaseAvailable": "{{version}} available",
|
||||
|
||||
@@ -1,33 +1,16 @@
|
||||
{
|
||||
"emptyPane": "No session in this pane. Start one from the workspace's prompt box.",
|
||||
"actions": {
|
||||
"newSession": "New session",
|
||||
"send": "Send",
|
||||
"sending": "Sending…",
|
||||
"start": "Run",
|
||||
"starting": "Starting…",
|
||||
"stop": "Stop",
|
||||
"stopping": "Stopping…"
|
||||
"newSession": "New session"
|
||||
},
|
||||
"autocomplete": {
|
||||
"fileHint": "Type @ to reference a file",
|
||||
"groupBuiltin": "Built-in (CLI only - won't run from here)",
|
||||
"groupFiles": "Files in cwd",
|
||||
"groupProject": "Project commands",
|
||||
"groupUser": "User commands",
|
||||
"noMatches": "No matches",
|
||||
"slashHint": "Type / for slash commands"
|
||||
},
|
||||
"binary": {
|
||||
"found": "Using {{path}}",
|
||||
"missing": "The `{{cli}}` CLI isn't on your PATH. Install {{tool}} or set PATH so the dashboard can spawn it."
|
||||
},
|
||||
"concurrency": {
|
||||
"active_one": "{{count}} run already in flight",
|
||||
"active_other": "{{count}} runs already in flight",
|
||||
"atCap": "Concurrency cap reached ({{max}}). Stop one of the running runs to start a new one.",
|
||||
"viewActive": "View active runs"
|
||||
},
|
||||
"empty": {
|
||||
"body": "Type a prompt and click Run. Output streams here as the model thinks, calls tools, and answers.",
|
||||
"title": "Nothing yet"
|
||||
@@ -40,28 +23,16 @@
|
||||
"runStartedButNotAttached": "Run is live but couldn't attach to console: {{message}}",
|
||||
"sendFailed": "Couldn't send: {{message}}"
|
||||
},
|
||||
"events": {
|
||||
"claude": "Claude",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"system": "System",
|
||||
"thinking": "Thinking",
|
||||
"tool": "Tool",
|
||||
"toolResult": "Tool result",
|
||||
"you": "You"
|
||||
},
|
||||
"fields": {
|
||||
"approval": "Approval",
|
||||
"approvalNever": "Never",
|
||||
"approvalOnRequest": "On request",
|
||||
"cwd": "Working directory",
|
||||
"cwdGroups": {
|
||||
"dashboard": "Dashboard server",
|
||||
"home": "Home",
|
||||
"repo": "Source repos",
|
||||
"recent": "Recent - used by Claude Code"
|
||||
},
|
||||
"cwdHint": "Absolute path. Defaults to the dashboard's own cwd.",
|
||||
"cwdNoMatches": "No matches. Type an absolute path to use it directly.",
|
||||
"cwdPlaceholder": "Type to search or paste an absolute path…",
|
||||
"effort": "Thinking effort",
|
||||
@@ -82,64 +53,15 @@
|
||||
"permissionDefault": "default (interactive prompts - sessions may hang headlessly)",
|
||||
"permissionMode": "Permission mode",
|
||||
"permissionPlan": "plan (read-only planning)",
|
||||
"prompt": "Prompt",
|
||||
"promptPlaceholder": "Ask Claude anything…",
|
||||
"promptPlaceholderTerminal": "Ask {{tool}} anything…",
|
||||
"sandbox": "Sandbox",
|
||||
"sandboxFullAccess": "Full access (dangerous)",
|
||||
"sandboxReadOnly": "Read only",
|
||||
"sandboxWorkspaceWrite": "Workspace write"
|
||||
},
|
||||
"footer": {
|
||||
"cost": "Cost",
|
||||
"duration": "Duration",
|
||||
"exitCode": "Exit code",
|
||||
"sessionId": "Session ID",
|
||||
"turns": "Turns"
|
||||
},
|
||||
"hint": {
|
||||
"headlessExplain": "Headless mode is best for scripted tasks where you know exactly what you want. The session can't ask follow-up questions and will hang on permission prompts unless you stay in acceptEdits.",
|
||||
"permissionWarning": "bypassPermissions allows ALL tool invocations without confirming. Only use for trusted prompts.",
|
||||
"bypassWarning": "{{tool}} will run every command and edit every file without asking. Only for a prompt and a folder you trust.",
|
||||
"sandboxWarning": "Codex will run commands with no sandbox.",
|
||||
"shortcut": "Enter to send · Shift+Enter for newline"
|
||||
},
|
||||
"mode": {
|
||||
"conversation": "Conversation",
|
||||
"conversationHint": "Multi-turn - keep typing follow-ups while the agent works.",
|
||||
"headless": "One-shot",
|
||||
"headlessHint": "Single prompt, single response. Stdin closes after spawn.",
|
||||
"label": "Mode"
|
||||
},
|
||||
"resume": {
|
||||
"clear": "Clear selection",
|
||||
"freshHint": "Start a fresh Claude Code session.",
|
||||
"freshOption": "New session",
|
||||
"label": "Source session",
|
||||
"lastOption": "Resume last session",
|
||||
"noSessions": "No sessions found.",
|
||||
"originalCwd": "Original cwd",
|
||||
"pickSession": "Pick a session…",
|
||||
"preview": "Last activity",
|
||||
"resumeHint": "Pick a session from your history and continue the conversation. Cwd is locked to the original.",
|
||||
"search": "Search by ID, cwd, or status…",
|
||||
"selectedBadge": "Resuming"
|
||||
},
|
||||
"statusHeader": {
|
||||
"cwd": "Cwd",
|
||||
"duration": "Elapsed",
|
||||
"effort": "Effort",
|
||||
"envelopes": "Events",
|
||||
"model": "Model",
|
||||
"permissionMode": "Mode",
|
||||
"session": "Session"
|
||||
},
|
||||
"tokens": {
|
||||
"cacheRead": "Cache hit",
|
||||
"cost": "Cost",
|
||||
"input": "Input",
|
||||
"label": "Context",
|
||||
"output": "Output"
|
||||
"sandboxWarning": "Codex will run commands with no sandbox."
|
||||
},
|
||||
"drop": {
|
||||
"hint": "Drop files or images to attach",
|
||||
@@ -159,5 +81,11 @@
|
||||
"findPrev": "Previous match",
|
||||
"findNext": "Next match",
|
||||
"findClose": "Close find"
|
||||
},
|
||||
"chat": {
|
||||
"placeholder": "Write a message…",
|
||||
"send": "Send",
|
||||
"hint": "Enter sends · permission prompts and menus need the terminal (Settings → Appearance → Chat UI)",
|
||||
"notSent": "The terminal is not connected — the message was not sent."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"filterError": "Error",
|
||||
"filterAbandoned": "Abandoned",
|
||||
"sessionCount": "{{count}} session recorded",
|
||||
"sessionCount_plural": "{{count}} sessions recorded",
|
||||
"noSessions": "No sessions found",
|
||||
"noSessionsDesc": "Try adjusting your search or filters.",
|
||||
"noSessionsHint": "Start a Claude Code session with hooks installed to begin tracking.",
|
||||
@@ -26,14 +25,12 @@
|
||||
"generic": "Claude Code is paused in this session until you respond in the terminal."
|
||||
},
|
||||
"failedLoad": "Failed to load session",
|
||||
"loading": "Loading session...",
|
||||
"notFound": "Session not found",
|
||||
"backToSessions": "Back to Sessions",
|
||||
"agents": "Agents",
|
||||
"noAgents": "No agents recorded.",
|
||||
"unparented": "Unparented Subagents",
|
||||
"costBreakdown": "Cost Breakdown",
|
||||
"eventTimeline": "Event Timeline",
|
||||
"noEvents": "No events recorded.",
|
||||
"conversation": "Conversation",
|
||||
"timeline": "Timeline ({{shown}}/{{total}})",
|
||||
@@ -151,6 +148,8 @@
|
||||
"persistedOutput": "Persisted output",
|
||||
"taskNotification": "Task notification",
|
||||
"thinking": "Thinking",
|
||||
"showMore": "Show more",
|
||||
"showLess": "Show less",
|
||||
"chars_one": "{{formatted}} char",
|
||||
"chars_other": "{{formatted}} chars",
|
||||
"sender": {
|
||||
@@ -181,6 +180,22 @@
|
||||
"statusError": "error",
|
||||
"statusOk": "ok",
|
||||
"statusPending": "pending"
|
||||
},
|
||||
"work": {
|
||||
"commands_one": "ran {{count}} command",
|
||||
"commands_other": "ran {{count}} commands",
|
||||
"edits_one": "edited a file",
|
||||
"edits_other": "made {{count}} edits",
|
||||
"reads_one": "read a file",
|
||||
"reads_other": "read {{count}} files",
|
||||
"searches_one": "searched the code",
|
||||
"searches_other": "ran {{count}} searches",
|
||||
"web_one": "looked up the web",
|
||||
"web_other": "made {{count}} web lookups",
|
||||
"agents_one": "ran an agent",
|
||||
"agents_other": "ran {{count}} agents",
|
||||
"tools_one": "used a tool",
|
||||
"tools_other": "used {{count}} tools"
|
||||
}
|
||||
},
|
||||
"overview": {
|
||||
|
||||
@@ -326,6 +326,14 @@
|
||||
"confirmMessageAutostart": "Every workspace terminal is closed — running agents stop — and the dashboard shuts down. It stays off until you run `agenthub start`, or until the next boot/login (start automatically is on).",
|
||||
"done": "AgentHub is stopping. Run `agenthub start` to start it again."
|
||||
},
|
||||
"uninstall": {
|
||||
"label": "Uninstall AgentHub",
|
||||
"desc": "Remove AgentHub from this computer: the dashboard, its database and settings, its hooks in Claude Code, Codex and Antigravity, and the plugin. Your conversations, workspace folders and repositories are kept.",
|
||||
"button": "Uninstall",
|
||||
"confirmTitle": "Uninstall AgentHub?",
|
||||
"confirmMessage": "Every workspace terminal is closed and AgentHub is removed for good, its database (history, workspaces, settings, saved logins) included — this cannot be undone. Conversations of Claude Code, Codex and the other AI tools, workspace worktrees and your repositories are kept.",
|
||||
"done": "AgentHub is being uninstalled; this page stops answering in a moment. Log: {{log}}"
|
||||
},
|
||||
"about": {
|
||||
"title": "System",
|
||||
"release": "Release",
|
||||
@@ -670,6 +678,7 @@
|
||||
"enabledOf": "{{tool}} enabled",
|
||||
"homepage": "Homepage",
|
||||
"homepageOf": "{{tool}} homepage",
|
||||
"openSettings": "Open {{tool}} settings",
|
||||
"install": "Install",
|
||||
"update": "Update",
|
||||
"updateAll": "Update all ({{count}})",
|
||||
@@ -796,6 +805,8 @@
|
||||
},
|
||||
"settingsNav": {
|
||||
"label": "Settings sections",
|
||||
"toolsTab": "All tools",
|
||||
"toolTabs": "AI tool settings",
|
||||
"back": "Back to Workspace",
|
||||
"group": {
|
||||
"general": "General",
|
||||
@@ -936,6 +947,23 @@
|
||||
"ignoreHint": "One absolute path per line. Hooks from these folders, and anything under them, are dropped whole; history import and the Codex reader skip their sessions. AGENTHUB_IGNORE_CWD sets the same list.",
|
||||
"envOwned": "A value here is set by the environment the dashboard started in, and cannot be changed from this page."
|
||||
},
|
||||
"backup": {
|
||||
"title": "Daily backup",
|
||||
"description": "A full copy of the database once a day, into a folder you choose — best on another disk, so a failed drive does not take the backups with it.",
|
||||
"folder": "Backup folder",
|
||||
"folderHint": "An absolute path to an existing folder the server can write to. Leave it empty to turn backups off. AgentHub only ever deletes its own agenthub-YYYYMMDD-HHMMSS.db files here, oldest first beyond the number kept.",
|
||||
"hour": "Time (server)",
|
||||
"keep": "Backups kept",
|
||||
"runNow": "Back up now",
|
||||
"running": "Backing up…",
|
||||
"done": "Backup written: {{file}}",
|
||||
"failed": "Backup failed: {{error}}",
|
||||
"newest": "Newest: {{time}}, {{size}} · {{n}} kept, {{total}} in all",
|
||||
"none": "No backup in this folder yet.",
|
||||
"off": "Backups are off.",
|
||||
"lastFailed": "The last run ({{time}}) failed: {{error}}",
|
||||
"restoreHint": "To restore: agenthub stop, delete dashboard.db-wal and dashboard.db-shm, copy a backup over dashboard.db (its path is on the System page), then agenthub start."
|
||||
},
|
||||
"reports": {
|
||||
"title": "Scheduled reports",
|
||||
"description": "A summary of the last days — sessions, events, tokens, cost by model and by AI tool, top tools, budgets — written as HTML or JSON on a schedule. Reports and their history survive Clear Data.",
|
||||
@@ -985,5 +1013,12 @@
|
||||
"title": "Model pricing",
|
||||
"description": "Prices for every vendor's models live on one page.",
|
||||
"open": "Open Pricing"
|
||||
},
|
||||
"chatUi": {
|
||||
"title": "Chat UI",
|
||||
"description": "How a Claude or Codex session opens in its workspace. Saved for your account only.",
|
||||
"label": "Open sessions as a chat",
|
||||
"labelDesc": "Show every Claude or Codex session's conversation like Claude Desktop, with a message box, instead of its terminal. Permission prompts and menus still need the terminal: turn this off to answer them.",
|
||||
"saveFailed": "Could not save: {{message}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
"roles": {
|
||||
"admin": "Admin",
|
||||
"analyst": "Analyst",
|
||||
"member": "Member"
|
||||
"developer": "Developer"
|
||||
},
|
||||
"roleHint": {
|
||||
"admin": "Everything, including this server's configuration and every user's data",
|
||||
"analyst": "Reads everything; no terminal, no changes",
|
||||
"member": "Only their own workspaces"
|
||||
"analyst": "Sees every user's data; works only in their own workspaces, changes no settings",
|
||||
"developer": "Only their own workspaces; changes no settings"
|
||||
},
|
||||
"add": "Add user",
|
||||
"username": "Username",
|
||||
@@ -48,7 +48,7 @@
|
||||
"password": "Reset {{name}}'s password",
|
||||
"passwordBody": "{{name}} is signed out everywhere and signs in with the new password.",
|
||||
"workspace": "Give {{name}} a workspace",
|
||||
"workspaceBody": "The workspace's sessions and costs move to {{name}}. A member sees only their own workspaces."
|
||||
"workspaceBody": "The workspace's sessions and costs move to {{name}}. A developer sees only their own workspaces."
|
||||
},
|
||||
"done": {
|
||||
"created": "{{name}} added",
|
||||
@@ -68,6 +68,6 @@
|
||||
},
|
||||
"readOnly": "Analysts can view accounts but not change them.",
|
||||
"auditTitle": "Audit log",
|
||||
"auditDescription": "Account changes made here, and each time an admin or analyst opened a session a member owns.",
|
||||
"auditDescription": "Account changes made here, and each time an admin or analyst opened a session a developer owns.",
|
||||
"auditEmpty": "Nothing recorded yet."
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
"title": "Workflows",
|
||||
"subtitle": "Agent orchestration intelligence",
|
||||
"failedLoad": "Failed to load workflow data",
|
||||
"filteredBy": "Filtered by:",
|
||||
"clearFilter": "Clear filter",
|
||||
"refreshData": "Refresh data",
|
||||
"exportJson": "Export as JSON",
|
||||
"allSessions": "All Sessions",
|
||||
@@ -238,8 +236,6 @@
|
||||
"noToolEvents": "No tool events recorded.",
|
||||
"noEvents": "No events recorded for this session.",
|
||||
"showingOf": "Showing 100 of {{total}} events",
|
||||
"sessionInfo": " session(s) - active {{from}}%-{{to}}% of session",
|
||||
"sortedByCompaction": " session(s) (sorted by compaction count)",
|
||||
"openSession": "Open session",
|
||||
"openInWorkspace": "Open in workspace"
|
||||
},
|
||||
@@ -266,7 +262,6 @@
|
||||
"subtitle": "Where errors cluster in agent hierarchy depth",
|
||||
"noErrors": "No errors recorded",
|
||||
"allSuccess": "All sessions completed successfully",
|
||||
"sessionsHadErrors": " sessions had errors",
|
||||
"sessionsErrorSummary": "{{errorSessions}} of {{totalSessions}} sessions had errors",
|
||||
"agentErrors": " agent-level error(s) across hierarchy",
|
||||
"sessionErrorsOnly": "Session-level errors only",
|
||||
@@ -306,7 +301,6 @@
|
||||
"ofTotal": "of {{total}}",
|
||||
"avgPerSession": "Avg / affected session",
|
||||
"peakSession": "Most in one session",
|
||||
"tokensRecovered": "Tokens Recovered",
|
||||
"distribution": "Sessions by compaction count",
|
||||
"xAxis": "Compactions per session",
|
||||
"yAxis": "Sessions",
|
||||
|
||||
@@ -4,12 +4,9 @@
|
||||
"export": "Xuất",
|
||||
"totalSessions": "Tổng số phiên",
|
||||
"totalAgents": "Tổng số Agent",
|
||||
"totalTokens": "Tổng token",
|
||||
"totalCost": "Tổng chi phí",
|
||||
"totalEvents": "Tổng sự kiện",
|
||||
"cacheHitRate": "% tỷ lệ trúng bộ nhớ đệm",
|
||||
"perSession": " mỗi phiên",
|
||||
"noDataCost": "Không có dữ liệu",
|
||||
"eventCountLabel_one": "{{count}} sự kiện",
|
||||
"eventCountLabel_other": "{{count}} sự kiện",
|
||||
"tabs": {
|
||||
|
||||
@@ -30,14 +30,12 @@
|
||||
},
|
||||
"overview": {
|
||||
"rootsTitle": "Thư mục gốc",
|
||||
"claudeHome": "Claude home",
|
||||
"projectClaudeDir": "Dự án .claude",
|
||||
"projectRoot": "Thư mục dự án",
|
||||
"claudeJson": "claude.json",
|
||||
"summary": "Tóm tắt nhanh",
|
||||
"user": "người dùng",
|
||||
"project": "dự án",
|
||||
"items": "mục"
|
||||
"project": "dự án"
|
||||
},
|
||||
"common": {
|
||||
"search": "Tìm theo tên…",
|
||||
@@ -47,32 +45,19 @@
|
||||
"close": "Đóng",
|
||||
"copyPath": "Sao chép đường dẫn",
|
||||
"copyName": "Sao chép tên",
|
||||
"copied": "Đã sao chép",
|
||||
"truncated": "(đã cắt bớt để xem trước)",
|
||||
"size": "Kích thước",
|
||||
"modified": "Đã sửa",
|
||||
"scopeLabel": "Phạm vi",
|
||||
"noFrontmatter": "Không có frontmatter",
|
||||
"redactedNotice": "Các giá trị khớp /token|secret|password|key|auth/i đã được ẩn ở phía máy chủ.",
|
||||
"preview": "Xem trước",
|
||||
"raw": "Mã nguồn"
|
||||
},
|
||||
"skills": {
|
||||
"name": "Tên",
|
||||
"description": "Mô tả"
|
||||
},
|
||||
"agents": {
|
||||
"name": "Tên",
|
||||
"model": "Model",
|
||||
"tools": "Công cụ"
|
||||
},
|
||||
"plugins": {
|
||||
"manifest": "Manifest",
|
||||
"marketplace": "Marketplace",
|
||||
"version": "Phiên bản",
|
||||
"installedAt": "Cài đặt lúc",
|
||||
"lastUpdated": "Cập nhật",
|
||||
"installPath": "Đường dẫn cài đặt",
|
||||
"missing": "Thiếu đường dẫn cài đặt",
|
||||
"manifestMissing": "Không tìm thấy installed_plugins.json tại {{path}}",
|
||||
"enabled": "Đang bật",
|
||||
@@ -85,8 +70,7 @@
|
||||
"hooks_other": "{{count}} hook script",
|
||||
"author": "Tác giả",
|
||||
"homepage": "Trang chủ",
|
||||
"license": "Giấy phép",
|
||||
"description": "Mô tả"
|
||||
"license": "Giấy phép"
|
||||
},
|
||||
"marketplaces": {
|
||||
"manifest": "Manifest marketplace đã biết",
|
||||
@@ -95,11 +79,9 @@
|
||||
"lastUpdated": "Đồng bộ lần cuối",
|
||||
"pluginCount": "Plugin",
|
||||
"owner": "Chủ sở hữu",
|
||||
"installLocation": "Đường dẫn cài",
|
||||
"addCmd": "claude plugin marketplace add <repo>"
|
||||
},
|
||||
"keybindings": {
|
||||
"file": "Tệp nguồn",
|
||||
"missing": "Không tìm thấy keybindings.json tại {{path}}",
|
||||
"context": "Ngữ cảnh",
|
||||
"key": "Phím",
|
||||
@@ -123,8 +105,7 @@
|
||||
},
|
||||
"hookScripts": {
|
||||
"title": "Script ~/.claude/hooks/",
|
||||
"subtitle": "Các script hỗ trợ được tham chiếu bởi lệnh hook của bạn. Chạy khi `hooks.<event>.hooks[].command` trong settings.json gọi đến.",
|
||||
"empty": "Không có script trong ~/.claude/hooks/."
|
||||
"subtitle": "Các script hỗ trợ được tham chiếu bởi lệnh hook của bạn. Chạy khi `hooks.<event>.hooks[].command` trong settings.json gọi đến."
|
||||
},
|
||||
"mcp": {
|
||||
"userScope": "Máy chủ phạm vi người dùng",
|
||||
@@ -138,8 +119,6 @@
|
||||
"env": "Tên env",
|
||||
"url": "URL",
|
||||
"headers": "Tên Header",
|
||||
"kind": "Loại",
|
||||
"source": "Nguồn",
|
||||
"noServers": "Không tìm thấy máy chủ MCP.",
|
||||
"notRemovable": "Được cấu hình trong settings.json — hãy xóa ở đó; không có phạm vi CLI nào áp dụng cho mục này."
|
||||
},
|
||||
@@ -157,8 +136,6 @@
|
||||
"rawJson": "JSON thô"
|
||||
},
|
||||
"memory": {
|
||||
"userScope": "Bộ nhớ người dùng",
|
||||
"projectScope": "Bộ nhớ dự án",
|
||||
"missing": "Không tìm thấy CLAUDE.md.",
|
||||
"autoTitle": "Kho bộ nhớ dự án",
|
||||
"autoSubtitle": "Bộ nhớ theo tệp cho từng dự án trong ~/.claude/projects/<dự-án>/memory/ — một chỉ mục MEMORY.md cùng một tệp cho mỗi sự kiện được ghi nhớ. Chỉ đọc tại đây.",
|
||||
@@ -236,15 +213,9 @@
|
||||
"backups": {
|
||||
"title": "Bản sao lưu",
|
||||
"empty": "Chưa có bản sao lưu - mỗi lần sửa hoặc xoá sẽ tạo bản sao có dấu thời gian.",
|
||||
"viewLink": "Xem lịch sử sao lưu",
|
||||
"openButton": "Bản sao lưu",
|
||||
"subtitle": "Mỗi thao tác lưu / xoá đều ghi bản sao tới đây trước. Thư mục sao lưu nằm ngoài các vị trí Claude Code quét, nên không xuất hiện như mục thừa trong CLI.",
|
||||
"restoreHint": "Khôi phục bằng cách sao chép bản sao lưu về chỗ cũ (bản sao lưu vẫn được giữ):",
|
||||
"size": "Kích thước",
|
||||
"created": "Tạo lúc",
|
||||
"type": "Loại",
|
||||
"scopeLabel": "Phạm vi",
|
||||
"filterAll": "Tất cả loại"
|
||||
"restoreHint": "Khôi phục bằng cách sao chép bản sao lưu về chỗ cũ (bản sao lưu vẫn được giữ):"
|
||||
},
|
||||
"profiles": {
|
||||
"usageCheck": "Kiểm tra quota",
|
||||
@@ -309,9 +280,7 @@
|
||||
"title": "Plugin chạy qua CLI `claude`",
|
||||
"body": "Plugin là các gói có registry riêng — `installed_plugins.json` cùng đường dẫn cài trong `plugins/cache/`. Các nút ở đây chạy đúng lệnh `claude plugin …` trên máy này nên registry luôn nhất quán. Cài plugin nghĩa là chạy mã của bên thứ ba: chỉ thêm marketplace mà bạn tin tưởng.",
|
||||
"install": "Cài plugin:",
|
||||
"installCmd": "claude plugin install <marketplace>/<plugin>",
|
||||
"uninstall": "Gỡ plugin này:",
|
||||
"uninstallButton": "Sao chép lệnh gỡ"
|
||||
"installCmd": "claude plugin install <marketplace>/<plugin>"
|
||||
},
|
||||
"mcp": {
|
||||
"title": "MCP server được CLI quản lý",
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
},
|
||||
"overview": {
|
||||
"rootsTitle": "Thư mục gốc",
|
||||
"codexHome": "Thư mục Codex",
|
||||
"projectCodexDir": "Thư mục .codex của dự án",
|
||||
"projectRoot": "Thư mục gốc dự án",
|
||||
"summary": "Tóm tắt nhanh",
|
||||
@@ -72,9 +71,6 @@
|
||||
"saving": "Đang tạo…",
|
||||
"close": "Đóng"
|
||||
},
|
||||
"config": {
|
||||
"missing": "Không tìm thấy config.toml."
|
||||
},
|
||||
"mcp": {
|
||||
"addTitle": "Thêm máy chủ MCP",
|
||||
"nameLabel": "Tên",
|
||||
|
||||
@@ -21,14 +21,11 @@
|
||||
"live": "Trực tiếp",
|
||||
"offline": "Ngoại tuyến",
|
||||
"running": "đang chạy",
|
||||
"dashboardRun": "Chạy",
|
||||
"days": "ngày",
|
||||
"hours": "giờ",
|
||||
"updated": "Đã cập nhật ",
|
||||
"lastUpdated": "Cập nhật lần cuối: ",
|
||||
"showMore": "Hiển thị thêm (còn {{count}})",
|
||||
"plusMore": "+{{count}} nữa",
|
||||
"ofSessions": "% số phiên",
|
||||
"save": "Lưu",
|
||||
"edit": "Sửa",
|
||||
"delete": "Xóa",
|
||||
@@ -89,14 +86,8 @@
|
||||
"cost": {
|
||||
"model": "Mô hình",
|
||||
"cost": "Chi phí",
|
||||
"totalCost": "Tổng chi phí",
|
||||
"totalEstimatedCost": "Tổng chi phí ước tính"
|
||||
},
|
||||
"duration": {
|
||||
"h_m": "{{h}}h {{m}}m",
|
||||
"m_s": "{{m}}m {{s}}s",
|
||||
"s": "{{s}}s"
|
||||
},
|
||||
"eventDetail": {
|
||||
"summary": "Tóm tắt",
|
||||
"seeDetailsBelow": "Xem chi tiết đầy đủ bên dưới trong {{fields}}",
|
||||
@@ -137,8 +128,6 @@
|
||||
"rawPayload": "Dữ Liệu Thô",
|
||||
"copy": "Sao chép",
|
||||
"copied": "Đã sao chép",
|
||||
"noPayload": "Không có dữ liệu cho sự kiện này.",
|
||||
"viewDetails": "Xem chi tiết",
|
||||
"expand": "Mở rộng sự kiện",
|
||||
"collapse": "Thu gọn sự kiện"
|
||||
},
|
||||
@@ -157,12 +146,7 @@
|
||||
"loadMore": "Tải thêm",
|
||||
"loading": "Đang tải...",
|
||||
"noResults": "Không có sự kiện nào khớp với bộ lọc",
|
||||
"grouped": "Nhóm theo lần gọi công cụ",
|
||||
"flat": "Danh sách phẳng",
|
||||
"groupEventCount_one": "{{count}} sự kiện",
|
||||
"groupEventCount_other": "{{count}} sự kiện",
|
||||
"help": {
|
||||
"toggle": "Trợ giúp",
|
||||
"title": "Về sự kiện, bộ lọc và nhóm",
|
||||
"subtitle": "Nhấn để mở - trạng thái, vòng đời, ngữ nghĩa bộ lọc, giá trị bộ lọc",
|
||||
"valuesTitle": "Mỗi bộ lọc chấp nhận gì",
|
||||
@@ -176,10 +160,8 @@
|
||||
"statusesTitle": "Trạng thái",
|
||||
"statusesIntro": "Trạng thái được suy ra từ event_type.",
|
||||
"statusWorkingDesc": "Agent bắt đầu gọi công cụ (PreToolUse).",
|
||||
"statusConnectedDesc": "Công cụ hoàn tất và trả kết quả (PostToolUse).",
|
||||
"statusCompletedDesc": "Mốc vòng đời (Stop, SubagentStop, Compaction).",
|
||||
"statusErrorDesc": "Sự kiện lỗi (error, APIError).",
|
||||
"statusIdleDesc": "Sự kiện vòng đời / siêu dữ liệu (Notification, TurnDuration, SessionStart, SessionEnd).",
|
||||
"lifecycleTitle": "Vòng đời sự kiện",
|
||||
"lifecycleDesc": "Một lần gọi công cụ thường phát ra hai sự kiện chia sẻ tool_use_id:",
|
||||
"lifecycleFlow": "PreToolUse (Working) → PostToolUse (Connected) → ... → Stop (Completed)",
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
"eventsToday": "Sự kiện hôm nay",
|
||||
"totalEvents": "Tổng sự kiện",
|
||||
"totalCost": "Tổng chi phí",
|
||||
"viewBoard": "Xem bảng",
|
||||
"viewAll": "Xem tất cả",
|
||||
"activeAgentsSection": "Agent đang hoạt động",
|
||||
"recentActivity": "Hoạt động gần đây",
|
||||
@@ -15,7 +14,6 @@
|
||||
"noAgentsDesc": "Agent sẽ xuất hiện ở đây khi phiên Claude Code đang chạy.",
|
||||
"noActivity": "Chưa có hoạt động",
|
||||
"noActivityDesc": "Sự kiện từ các phiên Claude Code sẽ được phát trực tiếp tại đây.",
|
||||
"failedConnect": "Không thể kết nối máy chủ",
|
||||
"failedLoad": "Không thể tải dữ liệu",
|
||||
"activeTrend": " đang hoạt động",
|
||||
"totalTrend": " trong phiên hoạt động",
|
||||
|
||||
@@ -19,15 +19,6 @@
|
||||
"sessionError": "Lỗi phiên",
|
||||
"subagentSpawned": "Đã tạo Subagent"
|
||||
},
|
||||
"toolLegend": {
|
||||
"read": "Đọc",
|
||||
"write": "Ghi",
|
||||
"edit": "Sửa",
|
||||
"bash": "Bash",
|
||||
"grep": "Grep",
|
||||
"glob": "Glob",
|
||||
"agent": "Agent",
|
||||
"other": "Khác"
|
||||
},
|
||||
"badResponse": "Máy chủ trả về phản hồi không mong đợi thay vì dữ liệu. Dashboard có thể đang khởi động lại, hoặc một proxy đang trả lời thay nó — hãy tải lại sau giây lát."
|
||||
"badResponse": "Máy chủ trả về phản hồi không mong đợi thay vì dữ liệu. Dashboard có thể đang khởi động lại, hoặc một proxy đang trả lời thay nó — hãy tải lại sau giây lát.",
|
||||
"adminOnly": "Chỉ admin mới làm được thao tác này. Hãy nhờ admin của AgentHub nếu bạn cần."
|
||||
}
|
||||
|
||||
@@ -1,45 +1,18 @@
|
||||
{
|
||||
"title": "Bảng Kanban",
|
||||
"subtitle": "Góc nhìn kanban của mọi Agent theo trạng thái",
|
||||
"subtitleSessions": "Góc nhìn kanban của mọi phiên theo trạng thái",
|
||||
"viewToggle": {
|
||||
"agents": "Agent",
|
||||
"sessions": "Phiên"
|
||||
},
|
||||
"noAgents": "Chưa có Agent được theo dõi",
|
||||
"noAgentsDesc": "Bắt đầu một phiên Claude Code với hooks đã cài để thấy Agent xuất hiện tại đây.",
|
||||
"agentCount": "Đã theo dõi {{count}} Agent",
|
||||
"agentCount_plural": "Đã theo dõi {{count}} Agent",
|
||||
"noAgentsInColumn": "Không có Agent",
|
||||
"noSessions": "Chưa có phiên được theo dõi",
|
||||
"noSessionsDesc": "Bắt đầu một phiên Claude Code với hooks đã cài để thấy phiên xuất hiện tại đây.",
|
||||
"sessionCount": "Đã theo dõi {{count}} phiên",
|
||||
"sessionCount_plural": "Đã theo dõi {{count}} phiên",
|
||||
"noSessionsInColumn": "Không có phiên",
|
||||
"ran": "đã chạy ",
|
||||
"running": "đang chạy ",
|
||||
"session": {
|
||||
"anonymous": "Phiên chưa đặt tên",
|
||||
"agentSummary_one": "{{count}} Agent",
|
||||
"agentSummary_other": "{{count}} Agent",
|
||||
"subagentSummary_one": "{{count}} Agent con",
|
||||
"subagentSummary_other": "{{count}} Agent con",
|
||||
"turnSummary_one": "{{count}} lượt",
|
||||
"turnSummary_other": "{{count}} lượt"
|
||||
},
|
||||
"tooltip": {
|
||||
"agent": {
|
||||
"working": "Agent đang chạy một tool call ngay lúc này.\n\nVào trạng thái khi PreToolUse hoặc UserPromptSubmit, thoát khi Stop (hết lượt).",
|
||||
"waiting": "Agent đã kết thúc lượt và đang chờ người dùng - Claude chờ tin nhắn tiếp theo hoặc đã hỏi xin quyền sử dụng tool.\n\nXóa khi PreToolUse / PostToolUse tiếp theo, hoặc khi phiên kết thúc.",
|
||||
"completed": "Agent đã kết thúc hoàn toàn cho phiên này - thường do SessionEnd kích hoạt, hoặc với subagent là do SubagentStop.\n\nKhông còn hoạt động nào được ghi nhận cho Agent này.",
|
||||
"error": "Agent gặp lỗi và sẽ không tiếp tục. Với main agent là từ Stop với stop_reason=error; với subagent là do chạy thất bại."
|
||||
},
|
||||
"session": {
|
||||
"active": "Phiên đang giữa lượt - Claude đang chạy và người dùng không bị chặn. Trạng thái này thoáng qua: phiên đi qua Active trong các tool call rồi quay lại Waiting khi hết lượt.",
|
||||
"waiting": "Phiên đang chờ người dùng. Có thể Claude đã hết lượt (phổ biến nhất) hoặc đang hỏi quyền và bị chặn cho tới khi người dùng phản hồi.\n\nXem cột này để biết phiên nào bạn cần trả lời.",
|
||||
"completed": "Phiên đã đóng hoàn toàn - SessionEnd đã kích hoạt (CLI thoát sạch) hoặc người dùng đã đóng thủ công.\n\nMọi Agent của phiên cũng đã hoàn tất.",
|
||||
"error": "Phiên kết thúc với lỗi - Claude trả về stop_reason=error, có lỗi không thể khôi phục, hoặc lỗi API thượng nguồn đã chấm dứt lần chạy.",
|
||||
"abandoned": "Phiên đã chết mà không có SessionEnd sạch. Bị đánh dấu bỏ dở sau 5+ phút không hoạt động (mồ côi vì /resume, mất mạng, hoặc CLI bị tắt). Khác với Completed: ta không thấy tín hiệu thoát thật sự."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
{
|
||||
"action.clear": "Dọn trạng thái",
|
||||
"action.forget": "Xóa workspace",
|
||||
"action.purge": "Xóa lịch sử",
|
||||
"action.reset": "Đặt lại worktree",
|
||||
"action.start": "Bắt đầu",
|
||||
"action.stop": "Dừng",
|
||||
"actionError": "Thao tác workspace thất bại: {{message}}",
|
||||
"actionErrorUnknown": "Lỗi không xác định",
|
||||
"add": "Thêm workspace",
|
||||
@@ -110,14 +105,6 @@
|
||||
"changes.unstage": "Bỏ file này khỏi index",
|
||||
"changes.changesView": "Thay đổi",
|
||||
"changes.wholeFile": "Toàn bộ file",
|
||||
"confirmRemoveCancel": "Hủy",
|
||||
"confirmRemoveConfirm": "Xóa",
|
||||
"confirmRemoveMessage": "Hành động này không thể hoàn tác.",
|
||||
"confirmRemoveTitle": "Xóa workspace?",
|
||||
"countDead": "đã chết",
|
||||
"countNeedsYou": "cần bạn",
|
||||
"countRunning": "đang chạy",
|
||||
"countTotal": "workspace",
|
||||
"destructive.blocked.adopted": "Đây là thư mục đã nhận và không thể thay đổi bằng thao tác worktree.",
|
||||
"destructive.blocked.missing": "Thư mục workspace không còn, nên không thể tiếp tục thao tác này.",
|
||||
"destructive.blocked.unreadable": "Không thể đọc thư mục workspace như một Git worktree, nên không thể tiếp tục thao tác này.",
|
||||
@@ -189,10 +176,6 @@
|
||||
"gitBar.switchHint": "Đổi worktree này sang nhánh local khác",
|
||||
"gitBar.switchLabel": "Đổi nhánh…",
|
||||
"gitBar.unbornHint": "Hãy commit trước, rồi publish repo này lên remote.",
|
||||
"kind.adopted": "đã nhận",
|
||||
"kind.managed": "được quản lý",
|
||||
"laneDetail.hide": "Ẩn chi tiết",
|
||||
"laneDetail.show": "Chi tiết workspace",
|
||||
"locks.held_one": "Đang giữ {{count}} khóa",
|
||||
"locks.held_other": "Đang giữ {{count}} khóa",
|
||||
"mode.repo": "Repo",
|
||||
@@ -206,25 +189,18 @@
|
||||
"preflightErrorWithMessage": "Không thể tải trạng thái workspace hiện tại: {{message}}",
|
||||
"proof.ticketReport": "Báo cáo nhiệm vụ",
|
||||
"renameLabel": "Đổi tên workspace này",
|
||||
"reorderHint": "Kéo để sắp xếp · Alt+←/→",
|
||||
"proxy.native": "Native ({{tool}})",
|
||||
"proxy.label": "AI Proxy",
|
||||
"runtime.boot": "▶ chạy",
|
||||
"runtime.busy.down": "đang dừng…",
|
||||
"runtime.busy.up": "đang khởi động…",
|
||||
"runtime.down": "tắt",
|
||||
"runtime.healthy": "khoẻ",
|
||||
"runtime.partial": "một phần",
|
||||
"runtime.slot": "slot {{slot}}",
|
||||
"runtime.steppedAsideTitle": "Đã lùi khỏi {{expected}} vì cổng đó đang bận",
|
||||
"runtime.stop": "■ dừng",
|
||||
"runtime.toggleTitle": "Chạy hoặc dừng stack ứng dụng của workspace này (khác với phiên Claude của nó)",
|
||||
"status.failed": "thất bại",
|
||||
"status.idle": "rảnh",
|
||||
"status.provisioning": "đang khởi tạo",
|
||||
"status.running": "đang chạy",
|
||||
"title": "Workspace",
|
||||
"tooltipStart": "Tạo một lần chạy ở chế độ hội thoại mà không có lời nhắc ban đầu; được điều khiển từ CLI hoặc qua tin nhắn",
|
||||
"worktrees.heading_one": "{{count}} worktree",
|
||||
"worktrees.heading_other": "{{count}} worktree",
|
||||
"changes.undoHunk": "Hoàn tác đoạn này",
|
||||
@@ -386,6 +362,7 @@
|
||||
"home.memoryEmpty": "Bộ nhớ hiện ở đây khi thư mục có CLAUDE.md hoặc AGENTS.md, hoặc Claude lưu bộ nhớ cho nó.",
|
||||
"home.context": "Ngữ cảnh",
|
||||
"home.contextEmpty": "Thêm PDF, tài liệu hoặc văn bản để tham chiếu trong workspace này.",
|
||||
"home.contextSnapshot": "Mỗi file được sao chép lúc thêm — sửa file gốc sau đó sẽ không cập nhật theo. Hãy xóa rồi thêm lại, hoặc thêm thư mục chứa nó ở mục Thư mục để luôn đọc bản mới nhất.",
|
||||
"home.addFile": "Thêm file",
|
||||
"home.folder": "Thư mục",
|
||||
"home.ownFolder": "Thư mục của workspace",
|
||||
@@ -452,6 +429,7 @@
|
||||
"tree.showMore_one": "Hiện thêm {{count}}",
|
||||
"tree.showMore_other": "Hiện thêm {{count}}",
|
||||
"tree.seeAll": "Xem tất cả (thêm {{count}})",
|
||||
"tree.showLess": "Thu gọn",
|
||||
"home.contextPanel": "Ngữ cảnh workspace",
|
||||
"row.state.needsYou": "cần bạn",
|
||||
"row.state.error": "lỗi",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"activityFeed": "Luồng hoạt động",
|
||||
"agentBoard": "Bảng Kanban",
|
||||
"agents": "Agent",
|
||||
"analytics": "Phân tích",
|
||||
"avg": "TB",
|
||||
@@ -19,20 +18,11 @@
|
||||
"daysAgo": "{{count}} ngày trước",
|
||||
"disconnected": "Mất kết nối",
|
||||
"eventsLastMin": "60s qua",
|
||||
"eventsReceived": "Sự kiện đã nhận",
|
||||
"eventsTotal": "Tổng",
|
||||
"expand": "Mở rộng thanh bên",
|
||||
"hoursAgo": "{{count}} giờ trước",
|
||||
"justNow": "vừa xong",
|
||||
"language": "Ngôn ngữ",
|
||||
"languageNames": {
|
||||
"en": "English",
|
||||
"vi": "Tiếng Việt"
|
||||
},
|
||||
"languageShort": {
|
||||
"en": "EN",
|
||||
"vi": "VI"
|
||||
},
|
||||
"lastEvent": "Sự kiện gần nhất",
|
||||
"live": "Trực tiếp",
|
||||
"minutesAgo": "{{count}} phút trước",
|
||||
@@ -55,7 +45,6 @@
|
||||
"unitPerSec": "sự kiện/s",
|
||||
"upToDate": "Đã là mới nhất",
|
||||
"updateAvailable": "Có bản cập nhật",
|
||||
"website": "Website",
|
||||
"workspace": "Không gian làm việc",
|
||||
"wsEndpoint": "WebSocket",
|
||||
"releaseAvailable": "Có {{version}}",
|
||||
|
||||
@@ -1,32 +1,16 @@
|
||||
{
|
||||
"emptyPane": "Pane này chưa có phiên nào. Hãy tạo phiên từ ô prompt của workspace.",
|
||||
"actions": {
|
||||
"newSession": "Phiên mới",
|
||||
"send": "Gửi",
|
||||
"sending": "Đang gửi…",
|
||||
"start": "Chạy",
|
||||
"starting": "Đang khởi động…",
|
||||
"stop": "Dừng",
|
||||
"stopping": "Đang dừng…"
|
||||
"newSession": "Phiên mới"
|
||||
},
|
||||
"autocomplete": {
|
||||
"fileHint": "Gõ @ để tham chiếu file",
|
||||
"groupBuiltin": "Built-in (chỉ CLI - không chạy ở đây)",
|
||||
"groupFiles": "File trong cwd",
|
||||
"groupProject": "Lệnh project",
|
||||
"groupUser": "Lệnh user",
|
||||
"noMatches": "Không có",
|
||||
"slashHint": "Gõ / để tìm lệnh slash"
|
||||
},
|
||||
"binary": {
|
||||
"found": "Đang dùng {{path}}",
|
||||
"missing": "Không thấy CLI `{{cli}}` trong PATH. Cài đặt {{tool}} hoặc đặt PATH."
|
||||
},
|
||||
"concurrency": {
|
||||
"active_other": "Có {{count}} run đang chạy",
|
||||
"atCap": "Đạt giới hạn concurrent ({{max}}). Dừng một run đang chạy để bắt đầu run mới.",
|
||||
"viewActive": "Xem các run đang chạy"
|
||||
},
|
||||
"empty": {
|
||||
"body": "Gõ prompt và bấm Chạy. Output sẽ stream khi model suy nghĩ, gọi tool, và trả lời.",
|
||||
"title": "Chưa có gì"
|
||||
@@ -39,28 +23,16 @@
|
||||
"runStartedButNotAttached": "Run đã khởi động nhưng không thể gắn vào bảng điều khiển: {{message}}",
|
||||
"sendFailed": "Không gửi được: {{message}}"
|
||||
},
|
||||
"events": {
|
||||
"claude": "Claude",
|
||||
"collapse": "Thu gọn",
|
||||
"expand": "Mở rộng",
|
||||
"system": "Hệ thống",
|
||||
"thinking": "Đang suy nghĩ",
|
||||
"tool": "Tool",
|
||||
"toolResult": "Kết quả tool",
|
||||
"you": "Bạn"
|
||||
},
|
||||
"fields": {
|
||||
"approval": "Phê duyệt",
|
||||
"approvalNever": "Không bao giờ",
|
||||
"approvalOnRequest": "Khi cần",
|
||||
"cwd": "Thư mục làm việc",
|
||||
"cwdGroups": {
|
||||
"dashboard": "Máy chủ dashboard",
|
||||
"home": "Home",
|
||||
"repo": "Repo nguồn",
|
||||
"recent": "Gần đây - Claude Code đã dùng"
|
||||
},
|
||||
"cwdHint": "Đường dẫn tuyệt đối. Mặc định là cwd của dashboard.",
|
||||
"cwdNoMatches": "Không khớp. Gõ đường dẫn tuyệt đối để dùng trực tiếp.",
|
||||
"cwdPlaceholder": "Gõ để tìm hoặc dán đường dẫn tuyệt đối…",
|
||||
"effort": "Mức độ suy nghĩ",
|
||||
@@ -81,64 +53,15 @@
|
||||
"permissionDefault": "default (prompt tương tác - headless sẽ treo)",
|
||||
"permissionMode": "Chế độ quyền",
|
||||
"permissionPlan": "plan (chỉ đọc, lập kế hoạch)",
|
||||
"prompt": "Prompt",
|
||||
"promptPlaceholder": "Hỏi Claude bất cứ điều gì…",
|
||||
"promptPlaceholderTerminal": "Hỏi {{tool}} bất cứ điều gì…",
|
||||
"sandbox": "Sandbox",
|
||||
"sandboxFullAccess": "Truy cập đầy đủ (nguy hiểm)",
|
||||
"sandboxReadOnly": "Chỉ đọc",
|
||||
"sandboxWorkspaceWrite": "Ghi vào workspace"
|
||||
},
|
||||
"footer": {
|
||||
"cost": "Chi phí",
|
||||
"duration": "Thời lượng",
|
||||
"exitCode": "Mã thoát",
|
||||
"sessionId": "Session ID",
|
||||
"turns": "Lượt"
|
||||
},
|
||||
"hint": {
|
||||
"headlessExplain": "Headless phù hợp cho tác vụ tự động. Phiên không thể hỏi lại, sẽ treo ở prompt xin quyền nếu bạn không giữ acceptEdits.",
|
||||
"permissionWarning": "bypassPermissions cho phép gọi mọi tool không cần xác nhận. Chỉ dùng cho prompt bạn tin tưởng.",
|
||||
"bypassWarning": "{{tool}} sẽ chạy mọi lệnh và sửa mọi file mà không hỏi. Chỉ dùng với prompt và thư mục bạn tin tưởng.",
|
||||
"sandboxWarning": "Codex sẽ chạy lệnh mà không có sandbox.",
|
||||
"shortcut": "Enter để gửi · Shift+Enter xuống dòng"
|
||||
},
|
||||
"mode": {
|
||||
"conversation": "Hội thoại",
|
||||
"conversationHint": "Đa lượt - tiếp tục gõ trong khi agent xử lý.",
|
||||
"headless": "Một lần",
|
||||
"headlessHint": "Một prompt, một phản hồi. Stdin đóng ngay sau khi spawn.",
|
||||
"label": "Chế độ"
|
||||
},
|
||||
"resume": {
|
||||
"clear": "Xoá lựa chọn",
|
||||
"freshHint": "Bắt đầu phiên Claude Code mới.",
|
||||
"freshOption": "Phiên mới",
|
||||
"label": "Phiên nguồn",
|
||||
"lastOption": "Tiếp tục phiên trước",
|
||||
"noSessions": "Không tìm thấy phiên.",
|
||||
"originalCwd": "cwd gốc",
|
||||
"pickSession": "Chọn phiên…",
|
||||
"preview": "Hoạt động gần nhất",
|
||||
"resumeHint": "Chọn một phiên từ lịch sử để tiếp tục. cwd được khoá theo phiên gốc.",
|
||||
"search": "Tìm theo ID, cwd hoặc status…",
|
||||
"selectedBadge": "Đang tiếp tục"
|
||||
},
|
||||
"statusHeader": {
|
||||
"cwd": "Cwd",
|
||||
"duration": "Đã chạy",
|
||||
"effort": "Effort",
|
||||
"envelopes": "Sự kiện",
|
||||
"model": "Model",
|
||||
"permissionMode": "Mode",
|
||||
"session": "Session"
|
||||
},
|
||||
"tokens": {
|
||||
"cacheRead": "Trúng cache",
|
||||
"cost": "Chi phí",
|
||||
"input": "Input",
|
||||
"label": "Context",
|
||||
"output": "Output"
|
||||
"sandboxWarning": "Codex sẽ chạy lệnh mà không có sandbox."
|
||||
},
|
||||
"drop": {
|
||||
"hint": "Thả file hoặc ảnh để đính kèm",
|
||||
@@ -158,5 +81,11 @@
|
||||
"findPrev": "Kết quả trước",
|
||||
"findNext": "Kết quả sau",
|
||||
"findClose": "Đóng tìm kiếm"
|
||||
},
|
||||
"chat": {
|
||||
"placeholder": "Viết tin nhắn…",
|
||||
"send": "Gửi",
|
||||
"hint": "Enter để gửi · hỏi quyền và menu cần terminal (Settings → Appearance → Giao diện chat)",
|
||||
"notSent": "Terminal chưa kết nối — tin nhắn chưa được gửi."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"filterError": "Lỗi",
|
||||
"filterAbandoned": "Bị bỏ dở",
|
||||
"sessionCount": "Đã ghi nhận {{count}} phiên",
|
||||
"sessionCount_plural": "Đã ghi nhận {{count}} phiên",
|
||||
"noSessions": "Không tìm thấy phiên",
|
||||
"noSessionsDesc": "Hãy thử điều chỉnh tìm kiếm hoặc bộ lọc.",
|
||||
"noSessionsHint": "Bắt đầu một phiên Claude Code với hooks đã cài để theo dõi.",
|
||||
@@ -26,14 +25,12 @@
|
||||
"generic": "Claude Code đang tạm dừng trong phiên này cho đến khi bạn phản hồi trong terminal."
|
||||
},
|
||||
"failedLoad": "Không thể tải phiên",
|
||||
"loading": "Đang tải phiên...",
|
||||
"notFound": "Không tìm thấy phiên",
|
||||
"backToSessions": "Quay lại danh sách phiên",
|
||||
"agents": "Agent",
|
||||
"noAgents": "Chưa có Agent được ghi nhận.",
|
||||
"unparented": "Subagent không có cha",
|
||||
"costBreakdown": "Phân rã chi phí",
|
||||
"eventTimeline": "Dòng thời gian sự kiện",
|
||||
"noEvents": "Chưa có sự kiện được ghi nhận.",
|
||||
"conversation": "Hội thoại",
|
||||
"timeline": "Dòng thời gian ({{shown}}/{{total}})",
|
||||
@@ -151,6 +148,8 @@
|
||||
"persistedOutput": "Đầu ra đã lưu",
|
||||
"taskNotification": "Thông báo tác vụ",
|
||||
"thinking": "Suy nghĩ",
|
||||
"showMore": "Xem thêm",
|
||||
"showLess": "Thu gọn",
|
||||
"chars_one": "{{formatted}} ký tự",
|
||||
"chars_other": "{{formatted}} ký tự",
|
||||
"sender": {
|
||||
@@ -181,6 +180,22 @@
|
||||
"statusError": "lỗi",
|
||||
"statusOk": "ok",
|
||||
"statusPending": "đang chờ"
|
||||
},
|
||||
"work": {
|
||||
"commands_one": "đã chạy {{count}} lệnh",
|
||||
"commands_other": "đã chạy {{count}} lệnh",
|
||||
"edits_one": "sửa 1 file",
|
||||
"edits_other": "sửa {{count}} lần",
|
||||
"reads_one": "đọc 1 file",
|
||||
"reads_other": "đọc {{count}} file",
|
||||
"searches_one": "tìm trong code",
|
||||
"searches_other": "tìm {{count}} lần",
|
||||
"web_one": "tra cứu web",
|
||||
"web_other": "tra cứu web {{count}} lần",
|
||||
"agents_one": "chạy 1 agent",
|
||||
"agents_other": "chạy {{count}} agent",
|
||||
"tools_one": "dùng 1 công cụ",
|
||||
"tools_other": "dùng {{count}} công cụ"
|
||||
}
|
||||
},
|
||||
"overview": {
|
||||
|
||||
@@ -326,6 +326,14 @@
|
||||
"confirmMessageAutostart": "Mọi terminal của các workspace sẽ bị đóng — agent đang chạy sẽ dừng — và dashboard tắt. Nó giữ tắt cho tới khi bạn chạy `agenthub start`, hoặc tới lần khởi động/đăng nhập máy kế tiếp (đang bật tự khởi động).",
|
||||
"done": "AgentHub đang tắt. Chạy `agenthub start` để bật lại."
|
||||
},
|
||||
"uninstall": {
|
||||
"label": "Gỡ cài đặt AgentHub",
|
||||
"desc": "Gỡ AgentHub khỏi máy: dashboard, database và cài đặt của nó, các hook trong Claude Code, Codex và Antigravity, và plugin. Các cuộc trò chuyện, thư mục workspace và repository của bạn được giữ lại.",
|
||||
"button": "Gỡ cài đặt",
|
||||
"confirmTitle": "Gỡ cài đặt AgentHub?",
|
||||
"confirmMessage": "Mọi terminal của các workspace sẽ bị đóng và AgentHub bị gỡ hẳn, kể cả database (lịch sử, workspace, cài đặt, đăng nhập đã lưu) — không thể hoàn tác. Các cuộc trò chuyện của Claude Code, Codex và các công cụ AI khác, worktree của workspace và repository của bạn được giữ lại.",
|
||||
"done": "AgentHub đang được gỡ; trang này sẽ ngừng phản hồi trong giây lát. Log: {{log}}"
|
||||
},
|
||||
"about": {
|
||||
"title": "Hệ thống",
|
||||
"release": "Phiên bản",
|
||||
@@ -670,6 +678,7 @@
|
||||
"enabledOf": "Bật {{tool}}",
|
||||
"homepage": "Trang chủ",
|
||||
"homepageOf": "Trang chủ {{tool}}",
|
||||
"openSettings": "Mở cài đặt {{tool}}",
|
||||
"install": "Cài đặt",
|
||||
"update": "Cập nhật",
|
||||
"updateAll": "Cập nhật tất cả ({{count}})",
|
||||
@@ -796,6 +805,8 @@
|
||||
},
|
||||
"settingsNav": {
|
||||
"label": "Các mục cài đặt",
|
||||
"toolsTab": "Tất cả",
|
||||
"toolTabs": "Cài đặt AI tool",
|
||||
"back": "Quay lại Không gian làm việc",
|
||||
"group": {
|
||||
"general": "Chung",
|
||||
@@ -936,6 +947,23 @@
|
||||
"ignoreHint": "Mỗi dòng một đường dẫn tuyệt đối. Hook từ các thư mục này, và mọi thứ bên trong, bị bỏ hoàn toàn; việc nhập lịch sử và bộ đọc Codex cũng bỏ qua phiên của chúng. AGENTHUB_IGNORE_CWD đặt cùng danh sách này.",
|
||||
"envOwned": "Một giá trị ở đây do môi trường khởi động dashboard đặt, và không thể đổi từ trang này."
|
||||
},
|
||||
"backup": {
|
||||
"title": "Backup hằng ngày",
|
||||
"description": "Mỗi ngày một bản sao đầy đủ của cơ sở dữ liệu vào thư mục bạn chọn — tốt nhất là trên một ổ đĩa khác, để hỏng một ổ không mất luôn bản backup.",
|
||||
"folder": "Thư mục backup",
|
||||
"folderHint": "Đường dẫn tuyệt đối tới một thư mục có sẵn mà server ghi được. Để trống để tắt backup. AgentHub chỉ xóa đúng các tệp agenthub-YYYYMMDD-HHMMSS.db của chính nó ở đây, bản cũ nhất trước khi vượt số bản giữ lại.",
|
||||
"hour": "Giờ chạy (giờ server)",
|
||||
"keep": "Số bản giữ lại",
|
||||
"runNow": "Backup ngay",
|
||||
"running": "Đang backup…",
|
||||
"done": "Đã ghi bản backup: {{file}}",
|
||||
"failed": "Backup thất bại: {{error}}",
|
||||
"newest": "Mới nhất: {{time}}, {{size}} · đang giữ {{n}} bản, tổng {{total}}",
|
||||
"none": "Thư mục này chưa có bản backup nào.",
|
||||
"off": "Backup đang tắt.",
|
||||
"lastFailed": "Lần chạy gần nhất ({{time}}) thất bại: {{error}}",
|
||||
"restoreHint": "Khôi phục: agenthub stop, xóa dashboard.db-wal và dashboard.db-shm, chép bản backup đè lên dashboard.db (đường dẫn ở trang Hệ thống), rồi agenthub start."
|
||||
},
|
||||
"reports": {
|
||||
"title": "Báo cáo định kỳ",
|
||||
"description": "Bản tóm tắt những ngày gần nhất — phiên, sự kiện, token, chi phí theo model và theo công cụ AI, công cụ dùng nhiều nhất, ngân sách — ghi ra HTML hoặc JSON theo lịch. Báo cáo và lịch sử chạy được giữ lại khi Xóa dữ liệu.",
|
||||
@@ -985,5 +1013,12 @@
|
||||
"title": "Giá model",
|
||||
"description": "Giá model của mọi nhà cung cấp nằm chung một trang.",
|
||||
"open": "Mở trang Giá"
|
||||
},
|
||||
"chatUi": {
|
||||
"title": "Giao diện chat",
|
||||
"description": "Cách một session Claude hoặc Codex mở trong workspace. Chỉ lưu cho tài khoản của bạn.",
|
||||
"label": "Mở session dạng chat",
|
||||
"labelDesc": "Hiện hội thoại của mọi session Claude hoặc Codex như Claude Desktop, kèm ô nhập tin, thay cho terminal. Hỏi quyền và menu vẫn cần terminal: tắt mục này để trả lời chúng.",
|
||||
"saveFailed": "Không lưu được: {{message}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
"roles": {
|
||||
"admin": "Admin",
|
||||
"analyst": "Analyst",
|
||||
"member": "Thành viên"
|
||||
"developer": "Developer"
|
||||
},
|
||||
"roleHint": {
|
||||
"admin": "Toàn quyền, kể cả cấu hình của server và dữ liệu của mọi người",
|
||||
"analyst": "Xem được mọi thứ; không có terminal, không thay đổi gì",
|
||||
"member": "Chỉ workspace của chính mình"
|
||||
"analyst": "Xem được dữ liệu của mọi người; chỉ làm việc trong workspace của mình, không đổi cài đặt",
|
||||
"developer": "Chỉ workspace của chính mình; không đổi cài đặt"
|
||||
},
|
||||
"add": "Thêm người dùng",
|
||||
"username": "Tên đăng nhập",
|
||||
@@ -48,7 +48,7 @@
|
||||
"password": "Đặt lại mật khẩu cho {{name}}",
|
||||
"passwordBody": "{{name}} bị đăng xuất khỏi mọi nơi và đăng nhập lại bằng mật khẩu mới.",
|
||||
"workspace": "Giao workspace cho {{name}}",
|
||||
"workspaceBody": "Các phiên và chi phí của workspace chuyển sang {{name}}. Thành viên chỉ thấy workspace của chính mình."
|
||||
"workspaceBody": "Các phiên và chi phí của workspace chuyển sang {{name}}. Developer chỉ thấy workspace của chính mình."
|
||||
},
|
||||
"done": {
|
||||
"created": "Đã thêm {{name}}",
|
||||
@@ -68,6 +68,6 @@
|
||||
},
|
||||
"readOnly": "Analyst chỉ xem được tài khoản, không thay đổi được.",
|
||||
"auditTitle": "Nhật ký audit",
|
||||
"auditDescription": "Các thay đổi tài khoản thực hiện ở đây, và mỗi lần admin hoặc analyst mở phiên của một thành viên.",
|
||||
"auditDescription": "Các thay đổi tài khoản thực hiện ở đây, và mỗi lần admin hoặc analyst mở phiên của một developer.",
|
||||
"auditEmpty": "Chưa ghi nhận gì."
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
"title": "Quy trình",
|
||||
"subtitle": "Phân tích điều phối Agent",
|
||||
"failedLoad": "Không thể tải dữ liệu quy trình",
|
||||
"filteredBy": "Đang lọc theo:",
|
||||
"clearFilter": "Xóa bộ lọc",
|
||||
"refreshData": "Làm mới dữ liệu",
|
||||
"exportJson": "Xuất JSON",
|
||||
"allSessions": "Tất cả phiên",
|
||||
@@ -238,8 +236,6 @@
|
||||
"noToolEvents": "Không có sự kiện công cụ.",
|
||||
"noEvents": "Không có sự kiện cho phiên này.",
|
||||
"showingOf": "Đang hiển thị 100 / {{total}} sự kiện",
|
||||
"sessionInfo": " phiên - hoạt động {{from}}%-{{to}} thời lượng phiên",
|
||||
"sortedByCompaction": " phiên (sắp theo số lần nén ngữ cảnh)",
|
||||
"openSession": "Mở phiên",
|
||||
"openInWorkspace": "Mở trong workspace"
|
||||
},
|
||||
@@ -266,7 +262,6 @@
|
||||
"subtitle": "Điểm tập trung lỗi theo độ sâu phân cấp Agent",
|
||||
"noErrors": "Không ghi nhận lỗi",
|
||||
"allSuccess": "Tất cả phiên đã hoàn tất thành công",
|
||||
"sessionsHadErrors": " phiên gặp lỗi",
|
||||
"sessionsErrorSummary": "{{errorSessions}} trên {{totalSessions}} phiên gặp lỗi",
|
||||
"agentErrors": " lỗi cấp Agent trong toàn bộ phân cấp",
|
||||
"sessionErrorsOnly": "Chỉ có lỗi ở cấp phiên",
|
||||
@@ -306,7 +301,6 @@
|
||||
"ofTotal": "trên {{total}}",
|
||||
"avgPerSession": "TB / phiên bị ảnh hưởng",
|
||||
"peakSession": "Nhiều nhất trong một phiên",
|
||||
"tokensRecovered": "Token thu hồi",
|
||||
"distribution": "Số phiên theo số lần nén",
|
||||
"xAxis": "Số lần nén mỗi phiên",
|
||||
"yAxis": "Số phiên",
|
||||
|
||||
Reference in New Issue
Block a user