feat: Claude Code Monitor — lanes, pipelines and a merged workspace
Internal SmartGift build of a Claude Code monitoring dashboard. Lanes: a durable unit of parallel agent work, one per working directory, tracked across session restarts. Managed lanes are git worktrees the dashboard provisions and can reset or remove behind a three-check destroy guard and a counted preflight; adopted lanes are directories you already own and are never destroyable. Pipelines: a lane moves through pipeline stages. A stage the agent declares with evidence renders green; a stage inferred from the tool-event stream renders dashed amber and never counts as done. Detection is forward-only within a 30-minute window, and never writes the declared stage. Workspace: one page at /run with a lane grid, the selected lane's pipeline, and a full Claude console behind a disclosure.
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"title": "Luồng hoạt động",
|
||||
"subtitle": "Luồng thời gian thực của mọi sự kiện Agent",
|
||||
"paused": "(đã tạm dừng - {{count}} mục đệm)",
|
||||
"resume": "Tiếp tục",
|
||||
"pause": "Tạm dừng",
|
||||
"noActivity": "Chưa có hoạt động",
|
||||
"noActivityDesc": "Sự kiện sẽ được phát trực tiếp tại đây khi các Agent Claude Code làm việc.",
|
||||
"viewSession": "Phiên"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"title": "Cảnh báo",
|
||||
"subtitle": "Cảnh báo theo quy tắc cho phiên, agent, sự kiện và mức dùng token",
|
||||
"refresh": "Làm mới",
|
||||
"ackAll": "Xác nhận tất cả ({{count}})",
|
||||
"ruleTypes": {
|
||||
"event_pattern": "Mẫu sự kiện",
|
||||
"inactivity": "Không hoạt động",
|
||||
"status_duration": "Agent bị kẹt",
|
||||
"token_threshold": "Ngưỡng token"
|
||||
},
|
||||
"ruleTypeHints": {
|
||||
"event_pattern": "Kích hoạt khi một sự kiện khớp với mẫu. Đặt số lần lớn hơn 1 để yêu cầu N sự kiện khớp trong khung thời gian (ví dụ: hơn 5 lỗi trong 2 phút).",
|
||||
"inactivity": "Kích hoạt khi một phiên đang hoạt động không nhận được sự kiện nào trong số phút đã cấu hình.",
|
||||
"status_duration": "Kích hoạt khi một agent giữ nguyên trạng thái đã chọn mà không có hoạt động trong số phút đã cấu hình.",
|
||||
"token_threshold": "Kích hoạt khi tổng mức dùng token của phiên (đầu vào + đầu ra + bộ nhớ đệm) vượt ngưỡng."
|
||||
},
|
||||
"ruleDesc": {
|
||||
"eventPattern": "Khớp {{pattern}}",
|
||||
"eventPatternCount": "≥{{count}} × {{pattern}} trong {{window}} phút",
|
||||
"inactivity": "Phiên không hoạt động trong {{minutes}} phút",
|
||||
"statusDuration": "Agent kẹt ở trạng thái {{status}} trong {{minutes}} phút",
|
||||
"tokenThreshold": "Token của phiên vượt {{tokens}}"
|
||||
},
|
||||
"rules": {
|
||||
"title": "Quy tắc cảnh báo",
|
||||
"add": "Thêm quy tắc",
|
||||
"cancel": "Hủy",
|
||||
"create": "Tạo quy tắc",
|
||||
"saving": "Đang lưu…",
|
||||
"empty": "Chưa có quy tắc cảnh báo nào. Thêm một quy tắc để bắt đầu theo dõi agent bị kẹt, lỗi dồn dập, phiên nhàn rỗi hoặc token tăng vọt.",
|
||||
"enabled": "Đang bật",
|
||||
"disabled": "Đang tắt",
|
||||
"enable": "Bật quy tắc",
|
||||
"disable": "Tắt quy tắc",
|
||||
"delete": "Xóa quy tắc",
|
||||
"confirmDelete": "Xóa quy tắc \"{{name}}\" và lịch sử cảnh báo của nó?",
|
||||
"cooldown": "thời gian chờ {{seconds}}s",
|
||||
"form": {
|
||||
"name": "Tên quy tắc",
|
||||
"namePlaceholder": "ví dụ: Lỗi dồn dập",
|
||||
"type": "Loại quy tắc",
|
||||
"eventType": "Loại sự kiện (chính xác)",
|
||||
"toolName": "Tên công cụ (chính xác)",
|
||||
"summaryContains": "Tóm tắt chứa",
|
||||
"count": "Số lần kích hoạt",
|
||||
"windowMinutes": "Khung thời gian (phút)",
|
||||
"agentStatus": "Trạng thái agent",
|
||||
"minutes": "Phút",
|
||||
"totalTokens": "Tổng token",
|
||||
"cooldown": "Thời gian chờ (giây)"
|
||||
},
|
||||
"deleteTitle": "Xóa quy tắc cảnh báo?",
|
||||
"help": {
|
||||
"name": "Nhãn cho quy tắc này. Hiển thị trong danh sách cảnh báo và đính kèm trong payload webhook (rule_name). vd: 'Lỗi Bash lặp lại'.",
|
||||
"type": "Quy tắc theo dõi gì. event_pattern khớp luồng sự kiện trực tiếp; inactivity = phiên đang hoạt động im lặng; status_duration = agent kẹt ở một trạng thái; token_threshold = token của phiên vượt ngưỡng.",
|
||||
"eventType": "Sự kiện hook của Claude Code cần khớp. Để trống để khớp mọi loại. Khớp chính xác (phân biệt hoa thường).",
|
||||
"toolName": "Công cụ mà agent gọi (trong sự kiện PreToolUse / PostToolUse). Để trống để khớp mọi công cụ. Khớp chính xác.",
|
||||
"summaryContains": "Khớp chuỗi con (không phân biệt hoa thường) trong tóm tắt sự kiện. Hữu ích để bắt lỗi hoặc cụm từ cụ thể. Để trống để bỏ qua.",
|
||||
"count": "Cần bao nhiêu sự kiện khớp trước khi cảnh báo kích hoạt. 1 = kích hoạt ở lần khớp đầu. Đặt lớn hơn 1 để phát hiện bùng phát (vd lỗi lặp lại).",
|
||||
"window": "Cửa sổ nhìn lại cho bộ đếm. vd count 5 + window 2 nghĩa là '5 sự kiện khớp trong bất kỳ khoảng 2 phút nào'.",
|
||||
"status": "Trạng thái agent cần theo dõi. 'working' bắt agent kẹt giữa tác vụ; 'waiting' bắt agent chờ nhập liệu/quyền.",
|
||||
"minutesInactivity": "Kích hoạt khi một phiên đang hoạt động không có sự kiện nào trong bấy nhiêu phút (phiên bị treo hoặc bị quên).",
|
||||
"minutesStatus": "Kích hoạt khi agent ở trạng thái đã chọn mà không có hoạt động trong bấy nhiêu phút (agent bị kẹt).",
|
||||
"totalTokens": "Kích hoạt khi tổng token của phiên (input + output + cache read + cache write) vượt số này. vd 1000000 = 1 triệu token.",
|
||||
"cooldown": "Số giây tối thiểu giữa các cảnh báo lặp cho cùng quy tắc + phiên + agent. Tránh trùng lặp gây nhiễu. Mặc định 300 (5 phút); 0 = không có thời gian chờ."
|
||||
}
|
||||
},
|
||||
"feed": {
|
||||
"title": "Luồng cảnh báo",
|
||||
"unackedCount": "{{count}} chưa xác nhận",
|
||||
"unackedOnly": "Chỉ chưa xác nhận",
|
||||
"ack": "Xác nhận",
|
||||
"viewSession": "Xem phiên",
|
||||
"loadMore": "Tải thêm ({{shown}} / {{total}})",
|
||||
"emptyTitle": "Không có cảnh báo",
|
||||
"emptyDescription": "Cảnh báo do các quy tắc của bạn kích hoạt sẽ hiển thị tại đây theo thời gian thực.",
|
||||
"emptyUnacked": "Tất cả đã được xác nhận. Cảnh báo mới sẽ hiển thị tại đây khi được kích hoạt."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"title": "Phân tích",
|
||||
"subtitle": "Giám sát và phân tích thời gian thực cho các phiên Claude Code",
|
||||
"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": {
|
||||
"tokenAnalytics": "Phân tích token",
|
||||
"costAnalytics": "Phân tích chi phí",
|
||||
"workflowIntelligence": "Thông minh quy trình",
|
||||
"productivityAnalytics": "Phân tích năng suất"
|
||||
},
|
||||
"eventActivity": "Hoạt động sự kiện - 52 tuần gần nhất",
|
||||
"last30Days": "30 ngày gần nhất",
|
||||
"dailyEventCount": "Số sự kiện theo ngày",
|
||||
"peakDay": "Ngày cao điểm",
|
||||
"total30d": "Tổng (30 ngày)",
|
||||
"tokenDistribution": "Phân bố token",
|
||||
"tokenMix": "Tỷ trọng token",
|
||||
"cacheEfficiency": "Hiệu quả bộ nhớ đệm",
|
||||
"tokenBreakdown": "Chi tiết token",
|
||||
"tokenInfo": "Dữ liệu token được ghi nhận từ sự kiện Stop của Claude Code.",
|
||||
"costByModel": "Chi phí theo mô hình",
|
||||
"dailyCostTrends": "Xu hướng chi phí theo ngày",
|
||||
"costByWeekday": "Chi phí theo thứ",
|
||||
"costPerDay": "Chi phí mỗi ngày",
|
||||
"peakCostDay": "Ngày chi phí cao nhất",
|
||||
"totalCost30d": "Tổng chi phí (30 ngày)",
|
||||
"noDailyCostData": "Chưa có dữ liệu chi phí theo ngày.",
|
||||
"noCostData": "Chưa có dữ liệu chi phí.",
|
||||
"subagentTypes": "Loại Subagent",
|
||||
"noSubagentData": "Chưa có dữ liệu Subagent.",
|
||||
"agentStatus": "Trạng thái Agent",
|
||||
"totalAgentsLabel": "Tổng Agent",
|
||||
"eventTypes": "Loại sự kiện",
|
||||
"noEventData": "Chưa có dữ liệu sự kiện.",
|
||||
"toolUsage": "Mức dùng công cụ",
|
||||
"noToolData": "Chưa có dữ liệu dùng công cụ.",
|
||||
"sessionOutcomes": "Kết quả phiên",
|
||||
"totalSessionsLabel": "Tổng phiên",
|
||||
"dailySessionTrends": "Xu hướng phiên theo ngày",
|
||||
"noSessionTrendData": "Chưa có dữ liệu xu hướng phiên.",
|
||||
"last7Days": "7 ngày gần nhất",
|
||||
"less": "Ít",
|
||||
"more": "Nhiều"
|
||||
}
|
||||
@@ -0,0 +1,259 @@
|
||||
{
|
||||
"title": "Trình khám phá cấu hình Claude",
|
||||
"subtitle": "Toàn cảnh thiết lập Claude Code của bạn - plugin, skill, subagent, máy chủ MCP, hook và cài đặt.",
|
||||
"refresh": "Làm mới",
|
||||
"refreshing": "Đang làm mới…",
|
||||
"lastUpdated": "Cập nhật lần cuối {{time}}",
|
||||
"loadError": "Tải thất bại: {{message}}",
|
||||
"scope": {
|
||||
"all": "Tất cả phạm vi",
|
||||
"user": "Người dùng",
|
||||
"project": "Dự án",
|
||||
"projectLocal": "Dự án (cục bộ)",
|
||||
"home": "Home"
|
||||
},
|
||||
"tabs": {
|
||||
"overview": "Tổng quan",
|
||||
"skills": "Skills",
|
||||
"agents": "Subagent",
|
||||
"commands": "Lệnh slash",
|
||||
"outputStyles": "Kiểu xuất",
|
||||
"plugins": "Plugin",
|
||||
"marketplaces": "Marketplace",
|
||||
"mcp": "Máy chủ MCP",
|
||||
"hooks": "Hooks",
|
||||
"keybindings": "Phím tắt",
|
||||
"settings": "Cài đặt",
|
||||
"memory": "Bộ nhớ"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"common": {
|
||||
"search": "Tìm theo tên…",
|
||||
"clearSearch": "Xóa tìm kiếm",
|
||||
"empty": "Chưa có nội dung.",
|
||||
"viewSource": "Xem nguồn",
|
||||
"close": "Đóng",
|
||||
"copyPath": "Sao chép đường dẫ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ủ."
|
||||
},
|
||||
"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",
|
||||
"disabled": "Đã tắt",
|
||||
"contributes": "Cung cấp",
|
||||
"skills_other": "{{count}} skill",
|
||||
"agents_other": "{{count}} agent",
|
||||
"commands_other": "{{count}} lệnh",
|
||||
"outputStyles_other": "{{count}} output style",
|
||||
"hooks_other": "{{count}} hook script",
|
||||
"author": "Tác giả",
|
||||
"homepage": "Trang chủ",
|
||||
"license": "Giấy phép",
|
||||
"description": "Mô tả"
|
||||
},
|
||||
"marketplaces": {
|
||||
"manifest": "Manifest marketplace đã biết",
|
||||
"noMarketplaces": "Chưa đăng ký marketplace.",
|
||||
"source": "Nguồn",
|
||||
"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",
|
||||
"action": "Hành động",
|
||||
"docsLink": "Xem tài liệu phím tắt",
|
||||
"contextPlaceholder": "Ngữ cảnh (vd: Global, Chat)",
|
||||
"addContext": "Thêm ngữ cảnh",
|
||||
"removeContext": "Xoá ngữ cảnh",
|
||||
"addBinding": "Thêm phím tắt",
|
||||
"removeBinding": "Xoá phím tắt",
|
||||
"errContext": "Mỗi ngữ cảnh cần có tên.",
|
||||
"errDupContext": "Ngữ cảnh trùng lặp: {{context}}",
|
||||
"errEmpty": "Mỗi phím tắt trong \"{{context}}\" cần cả phím và hành động.",
|
||||
"errDupKey": "Phím trùng lặp \"{{key}}\" trong ngữ cảnh \"{{context}}\"."
|
||||
},
|
||||
"statusline": {
|
||||
"title": "Statusline",
|
||||
"configured": "Lệnh statusline đã cấu hình",
|
||||
"scripts": "Script statusline trong CLAUDE_HOME",
|
||||
"noStatusline": "Chưa cấu hình statusline."
|
||||
},
|
||||
"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/."
|
||||
},
|
||||
"mcp": {
|
||||
"userScope": "Máy chủ phạm vi người dùng",
|
||||
"projectScope": "Máy chủ phạm vi dự án",
|
||||
"command": "Lệnh",
|
||||
"args": "Tham số",
|
||||
"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."
|
||||
},
|
||||
"hooks": {
|
||||
"noHooks": "Chưa cấu hình hook.",
|
||||
"matcher": "Bộ khớp",
|
||||
"command": "Lệnh",
|
||||
"type": "Loại",
|
||||
"timeout": "Timeout",
|
||||
"fileMissing": "(không có file settings trong phạm vi này)"
|
||||
},
|
||||
"settings": {
|
||||
"fileMissing": "(không có file settings trong phạm vi này)"
|
||||
},
|
||||
"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.",
|
||||
"noMatches": "Không có tệp bộ nhớ nào khớp với tìm kiếm.",
|
||||
"indexFiles": "Chỉ mục",
|
||||
"jumpTo": "Nhảy tới tệp",
|
||||
"fileCount_one": "{{count}} tệp",
|
||||
"fileCount_other": "{{count}} tệp",
|
||||
"factFiles_one": "{{count}} sự kiện",
|
||||
"factFiles_other": "{{count}} sự kiện",
|
||||
"newFile": "Tệp mới",
|
||||
"newFileTitle": "Tệp bộ nhớ mới trong {{project}}",
|
||||
"namePlaceholder": "vd: my_fact.md",
|
||||
"nameHelp": "Tên tệp kết thúc bằng .md (sẽ tự thêm .md nếu bạn bỏ qua).",
|
||||
"projectLabel": "Dự án",
|
||||
"projectHelp": "Được tạo trong thư mục bộ nhớ của dự án này."
|
||||
},
|
||||
"edit": {
|
||||
"newButton": "Tạo mới",
|
||||
"editButton": "Sửa",
|
||||
"deleteButton": "Xoá",
|
||||
"save": "Lưu",
|
||||
"cancel": "Huỷ",
|
||||
"saving": "Đang lưu…",
|
||||
"deleting": "Đang xoá…",
|
||||
"newTitle": "Tạo mới {{type}}",
|
||||
"editTitle": "Sửa {{name}}",
|
||||
"namePlaceholder": "tên (kebab-case, không khoảng trắng)",
|
||||
"nameLabel": "Tên",
|
||||
"nameHelp": "Chữ, số, dấu chấm, gạch ngang, gạch dưới. Tối đa 64 ký tự.",
|
||||
"contentLabel": "Nội dung",
|
||||
"scopePicker": "Phạm vi",
|
||||
"writeError": "Lưu thất bại: {{message}}",
|
||||
"deleteError": "Xoá thất bại: {{message}}",
|
||||
"saveSuccess": "Đã lưu · bản sao tại {{path}}",
|
||||
"saveSuccessNew": "Đã tạo.",
|
||||
"deleteSuccess": "Đã xoá · bản sao tại {{path}}",
|
||||
"confirmDelete": "Xoá mục này?",
|
||||
"confirmDeleteBody": "Tệp (hoặc thư mục skill cùng tài nguyên đi kèm) sẽ được sao lưu kèm dấu thời gian trước khi xoá. Bản sao nằm ngoài thư mục Claude Code quét, nên mục này sẽ biến mất khỏi CLI.",
|
||||
"confirmDeletePath": "Đường dẫn: {{path}}",
|
||||
"confirmDeleteAction": "Xác nhận sao lưu và xoá",
|
||||
"templates": {
|
||||
"skills": "---\nname: my-skill\ndescription: Mô tả ngắn gọn\n---\n\nNội dung - skill làm gì, khi nào dùng, ví dụ.\n",
|
||||
"agents": "---\nname: my-agent\ndescription: Khi nào gọi subagent này\ntools: Read, Grep\nmodel: sonnet\n---\n\nSystem prompt cho subagent.\n",
|
||||
"commands": "---\ndescription: Mô tả hiển thị trong menu /\n---\n\n/my-command làm gì.\n",
|
||||
"output-styles": "---\nname: my-style\ndescription: Mô tả kiểu xuất\n---\n\nChỉ thị về kiểu.\n",
|
||||
"memory": "# Bộ nhớ dự án\n\nClaude đọc tệp này khi bắt đầu phiên.\n",
|
||||
"auto-memory": "---\nname: my-fact\ndescription: Tóm tắt một dòng về sự kiện được ghi nhớ\nmetadata:\n type: feedback\n---\n\nNội dung cần ghi nhớ.\n"
|
||||
}
|
||||
},
|
||||
"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 đổi tên bản sao về vị trí cũ:",
|
||||
"size": "Kích thước",
|
||||
"created": "Tạo lúc",
|
||||
"type": "Loại",
|
||||
"scopeLabel": "Phạm vi",
|
||||
"filterAll": "Tất cả loại"
|
||||
},
|
||||
"explain": {
|
||||
"hooks": {
|
||||
"title": "Hooks ở đây cố tình chỉ đọc",
|
||||
"body": "Hooks nằm trong khối `hooks` của các tệp `settings.json` mà Claude Code liên tục ghi vào. Sửa từ dashboard sẽ tranh chấp với CLI đang chạy và có thể ngầm phá hỏng đường tiếp nhận sự kiện của chính dashboard (`hook-handler.js` bên dưới).",
|
||||
"howTo": "Tự sửa bằng một trong các cách:",
|
||||
"cmd1": "claude config /hooks",
|
||||
"cmd1Note": "Trình chỉnh sửa hooks tương tác trong Claude Code",
|
||||
"cmd2": "$EDITOR ~/.claude/settings.json",
|
||||
"cmd2Note": "Sửa thủ công khối hooks ở phạm vi user",
|
||||
"cmd3": "$EDITOR .claude/settings.json",
|
||||
"cmd3Note": "Sửa thủ công khối hooks ở phạm vi dự án"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings ở đây cố tình chỉ đọc",
|
||||
"body": "Các tệp JSON này được CLI `claude` ghi đè mỗi khi đổi model, theme, bật plugin… Việc dashboard ghi sẽ tranh chấp với CLI và mất trạng thái.",
|
||||
"howTo": "Sửa settings qua chính Claude Code:",
|
||||
"cmd1": "claude config set <key> <value>",
|
||||
"cmd1Note": "Đặt một khoá riêng lẻ an toàn",
|
||||
"cmd2": "/config",
|
||||
"cmd2Note": "Mở giao diện config tương tác trong CLI",
|
||||
"cmd3": "$EDITOR ~/.claude/settings.json",
|
||||
"cmd3Note": "Sửa thủ công (chỉ khi không có process claude nào đang chạy)"
|
||||
},
|
||||
"plugins": {
|
||||
"title": "Plugin được CLI quản lý",
|
||||
"body": "Plugin là bundle có registry riêng - `installed_plugins.json` và đường dẫn cài trong `plugins/cache/`. Dashboard đọc thôi; install/uninstall giao cho `claude plugin …` để giữ registry nhất quán.",
|
||||
"install": "Cài plugin:",
|
||||
"installCmd": "claude plugin install <marketplace>/<plugin>",
|
||||
"uninstall": "Gỡ plugin này:",
|
||||
"uninstallButton": "Sao chép lệnh gỡ"
|
||||
},
|
||||
"mcp": {
|
||||
"title": "MCP server được CLI quản lý",
|
||||
"body": "Cấu hình MCP server nằm trong `~/.claude.json`, đúng tệp mà CLI đang chạy ghi liên tục. Ghi đồng thời từ dashboard sẽ phá hỏng trạng thái dự án, nên flow add/remove đi qua chính Claude Code.",
|
||||
"list": "Liệt kê server đã cấu hình:",
|
||||
"listCmd": "claude mcp list",
|
||||
"add": "Thêm server:",
|
||||
"addCmd": "claude mcp add <name> <command> [args…]",
|
||||
"remove": "Gỡ server này:",
|
||||
"removeButton": "Sao chép lệnh gỡ"
|
||||
}
|
||||
},
|
||||
"snippet": {
|
||||
"copy": "Sao chép",
|
||||
"copied": "Đã sao chép"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"refresh": "Làm mới",
|
||||
"retry": "Thử lại",
|
||||
"cancel": "Hủy",
|
||||
"export": "Xuất",
|
||||
"loading": "Đang tải...",
|
||||
"noData": "Không có dữ liệu",
|
||||
"total": "Tổng",
|
||||
"active": "đang hoạt động",
|
||||
"total_lower": "tổng",
|
||||
"subagent": "Subagent",
|
||||
"subagents": "Subagent",
|
||||
"subagent_label_one": "{{count}} Subagent",
|
||||
"subagent_label_other": "{{count}} Subagent",
|
||||
"events": "sự kiện",
|
||||
"event": "sự kiện",
|
||||
"sessions": "phiên",
|
||||
"session": "phiên",
|
||||
"agents": "Agent",
|
||||
"agent": "Agent",
|
||||
"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",
|
||||
"actions": "Thao tác",
|
||||
"close": "Đóng",
|
||||
"unexpectedError": "Lỗi không xác định",
|
||||
"depth": "Độ sâu",
|
||||
"type": "Loại",
|
||||
"statusLabel": "Trạng thái",
|
||||
"status": {
|
||||
"working": "Đang xử lý",
|
||||
"waiting": "Đang chờ",
|
||||
"completed": "Hoàn tất",
|
||||
"error": "Lỗi",
|
||||
"active": "Đang hoạt động",
|
||||
"abandoned": "Bị bỏ dở"
|
||||
},
|
||||
"awaitingReason": {
|
||||
"notification": {
|
||||
"label": "Cần phản hồi",
|
||||
"desc": "Đang bị chặn bởi lời nhắc cấp quyền hoặc yêu cầu nhập — Claude không thể tiếp tục cho đến khi bạn phản hồi."
|
||||
},
|
||||
"stop": {
|
||||
"label": "Xong lượt",
|
||||
"desc": "Claude đã trả lời xong; phiên sẽ chờ cho đến khi bạn gửi prompt tiếp theo."
|
||||
},
|
||||
"session_start": {
|
||||
"label": "Chờ prompt",
|
||||
"desc": "Phiên vừa khởi động hoặc tiếp tục và đang ở prompt trống — chưa có yêu cầu nào được gửi."
|
||||
},
|
||||
"interrupted": {
|
||||
"label": "Bị ngắt",
|
||||
"desc": "Lượt vừa rồi bị ngắt (Esc hoặc hook được khôi phục) — Claude đang chờ chỉ dẫn của bạn."
|
||||
}
|
||||
},
|
||||
"time": {
|
||||
"justNow": "vừa xong",
|
||||
"mAgo": "{{count}} phút trước",
|
||||
"hAgo": "{{count}} giờ trước",
|
||||
"dAgo": "{{count}} ngày trước"
|
||||
},
|
||||
"pagination": {
|
||||
"previous": "Trước",
|
||||
"next": "Tiếp",
|
||||
"showing": "Hiển thị {{from}}-{{to}} / {{total}}"
|
||||
},
|
||||
"token": {
|
||||
"input": "Đầu vào",
|
||||
"output": "Đầu ra",
|
||||
"cacheRead": "Đọc bộ nhớ đệm",
|
||||
"cacheWrite": "Ghi bộ nhớ đệm",
|
||||
"totalTokens": "Tổng token"
|
||||
},
|
||||
"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}}",
|
||||
"eventId": "ID sự kiện",
|
||||
"recordedAt": "Ghi lúc",
|
||||
"session": "Phiên",
|
||||
"sessionId": "ID phiên",
|
||||
"agentId": "ID Agent",
|
||||
"agent": "Agent",
|
||||
"cwd": "Thư mục làm việc",
|
||||
"permissionMode": "Chế độ quyền",
|
||||
"toolUseId": "ID Lượt Dùng Công Cụ",
|
||||
"toolName": "Công Cụ",
|
||||
"toolInput": "Đầu Vào Công Cụ",
|
||||
"toolResponse": "Phản Hồi Công Cụ",
|
||||
"isError": "Lỗi",
|
||||
"transcriptPath": "Đường Dẫn Bản Ghi",
|
||||
"agentTranscriptPath": "Đường Dẫn Bản Ghi Subagent",
|
||||
"hookEventName": "Tên Sự Kiện Hook",
|
||||
"stopReason": "Lý Do Dừng",
|
||||
"stopHookActive": "Hook Dừng Đang Bật",
|
||||
"subagentType": "Loại Subagent",
|
||||
"agentType": "Loại Agent",
|
||||
"notificationType": "Loại Thông Báo",
|
||||
"message": "Tin Nhắn",
|
||||
"prompt": "Câu Lệnh",
|
||||
"model": "Mô Hình",
|
||||
"reason": "Lý Do",
|
||||
"source": "Nguồn",
|
||||
"imported": "Đã Nhập",
|
||||
"type": "Loại",
|
||||
"timestamp": "Thời Điểm",
|
||||
"uuid": "UUID",
|
||||
"durationMs": "Thời Lượng (ms)",
|
||||
"compactionNumber": "Số Lần Nén",
|
||||
"totalCompactions": "Tổng Số Lần Nén",
|
||||
"lastAssistantMessage": "Tin Nhắn Trợ Lý Cuối",
|
||||
"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"
|
||||
},
|
||||
"eventFilters": {
|
||||
"searchPlaceholder": "Tìm tóm tắt, công cụ, dữ liệu...",
|
||||
"status": "Trạng thái",
|
||||
"eventType": "Loại sự kiện",
|
||||
"toolName": "Công cụ",
|
||||
"agentId": "Agent",
|
||||
"sessionId": "Phiên",
|
||||
"from": "Từ",
|
||||
"to": "Đến",
|
||||
"clearAll": "Xóa bộ lọc",
|
||||
"noOptions": "Không có lựa chọn",
|
||||
"showing": "Hiển thị {{shown}} / {{total}}",
|
||||
"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ì",
|
||||
"valueStatusDesc": "Lối tắt mở rộng thành event_type (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...).",
|
||||
"valueEventTypeDesc": "Giá trị event_type thực có trong DB. Lấy từ /api/events/facets.",
|
||||
"valueToolNameDesc": "Giá trị tool_name có trong DB (Bash, Edit, Read, Grep, mcp__...). Lấy từ /api/events/facets.",
|
||||
"valueAgentIdDesc": "UUID đầy đủ của agent (main + subagent). Chọn để giới hạn theo các agent cụ thể.",
|
||||
"valueSessionIdDesc": "UUID của phiên. Thường bạn sẽ vào /sessions/:id, nhưng cái này cho phép giao nhiều phiên.",
|
||||
"valueSearchDesc": "Khớp chuỗi con trong summary, tool_name và payload JSON thô. Debounce 300ms.",
|
||||
"valueDateRangeDesc": "Mốc thời gian ISO dưới/trên cho created_at của sự kiện.",
|
||||
"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)",
|
||||
"filtersTitle": "Cách bộ lọc hoạt động",
|
||||
"filterTip1": "Các bộ lọc kết hợp AND giữa các danh mục. Trong một danh mục, nhiều lựa chọn là OR.",
|
||||
"filterTip2": "Status là lối tắt mở rộng thành event_type (Working → PreToolUse, Completed → Stop/SubagentStop/Compaction, ...).",
|
||||
"filterTipGrouping": "Mẹo nhóm: một hàng nhóm cần cả Pre và Post. Khi lọc theo Status, hãy chọn Working + Connected cùng lúc để giữ nguyên cặp - nếu không, nhóm chỉ hiện một nửa.",
|
||||
"filterTip3": "Tìm kiếm văn bản khớp summary, tool_name và dữ liệu thô.",
|
||||
"filterTip4": "Khoảng ngày áp dụng cho created_at của mỗi sự kiện."
|
||||
}
|
||||
},
|
||||
"examples": "Ví dụ",
|
||||
"help": "Trợ giúp"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"title": "Tổng quan",
|
||||
"subtitle": "Góc nhìn thời gian thực về hoạt động Agent Claude Code",
|
||||
"totalSessions": "Tổng số phiên",
|
||||
"activeAgents": "Agent đang hoạt động",
|
||||
"activeSubagents": "Subagent đang hoạt động",
|
||||
"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",
|
||||
"noAgents": "Không có Agent đang hoạt động",
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"notFound": {
|
||||
"code": "404",
|
||||
"title": "Không tìm thấy trang",
|
||||
"description": "Đường dẫn bạn yêu cầu không tồn tại. Hãy dùng điều hướng để quay về trang hợp lệ.",
|
||||
"goDashboard": "Đi tới Tổng quan",
|
||||
"goBack": "Quay lại"
|
||||
},
|
||||
"notifications": {
|
||||
"newSession": "Phiên mới",
|
||||
"sessionDefault": "Phiên ",
|
||||
"sessionError": "Lỗi phiên",
|
||||
"subagentSpawned": "Đã tạo Subagent",
|
||||
"finishedResponding": "Claude đã phản hồi xong",
|
||||
"readyForInput": "Sẵn sàng nhận đầu vào",
|
||||
"sessionCompleted": "Phiên đã hoàn tất",
|
||||
"sessionClosed": "Phiên đã đóng",
|
||||
"defaultTitle": "Claude Code",
|
||||
"defaultBody": "Thông báo"
|
||||
},
|
||||
"toolLegend": {
|
||||
"read": "Đọc",
|
||||
"write": "Ghi",
|
||||
"edit": "Sửa",
|
||||
"bash": "Bash",
|
||||
"grep": "Grep",
|
||||
"glob": "Glob",
|
||||
"agent": "Agent",
|
||||
"other": "Khác"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"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ự."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"action.clear": "xóa",
|
||||
"action.forget": "quên làn đường",
|
||||
"action.purge": "xóa lịch sử",
|
||||
"action.remove": "xóa bỏ",
|
||||
"action.reset": "đặt lại worktree",
|
||||
"action.start": "bắt đầu",
|
||||
"action.stop": "dừng",
|
||||
"actionError": "Thao tác làn đường thất bại: {{message}}",
|
||||
"actionErrorUnknown": "Lỗi không xác định",
|
||||
"add": "Thêm lane",
|
||||
"addLane": "Tạo lane từ một thư mục làm việc",
|
||||
"addLaneBaseLabel": "Nhánh để tạo nhánh mới",
|
||||
"addLaneNoBranches": "Repo này chưa có commit nào — worktree sẽ bắt đầu trống.",
|
||||
"addLaneNotARepo": "Chưa phải repo git (hoặc không có quyền đọc).",
|
||||
"addLaneRepoHint": "Một repo git có sẵn. Dashboard tự tạo worktree mới cho lane, không phải thư mục bạn chọn.",
|
||||
"addLaneRepoLabel": "Repo nguồn",
|
||||
"addLaneTitleLabel": "Tiêu đề",
|
||||
"addLaneTitlePlaceholder": "Không bắt buộc",
|
||||
"autoStage": "tự động: {{stage}}",
|
||||
"cardId": "Làn đường {{id}}",
|
||||
"confirmRemoveCancel": "Hủy",
|
||||
"confirmRemoveConfirm": "Xóa",
|
||||
"confirmRemoveMessage": "Hành động này không thể hoàn tác.",
|
||||
"confirmRemoveTitle": "Xóa làn đường?",
|
||||
"countDead": "đã chết",
|
||||
"countNeedsYou": "cần bạn",
|
||||
"countRunning": "đang chạy",
|
||||
"countTotal": "làn đường",
|
||||
"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 làn đường 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 làn đường như một Git worktree, nên không thể tiếp tục thao tác này.",
|
||||
"destructive.cancel": "Hủy",
|
||||
"destructive.count.bytesEstimate": "Dung lượng giải phóng (ước tính)",
|
||||
"destructive.count.dirty": "Tệp đã sửa",
|
||||
"destructive.count.events": "Sự kiện",
|
||||
"destructive.count.head": "HEAD",
|
||||
"destructive.count.sessions": "Phiên",
|
||||
"destructive.count.tokenRows": "Dòng token",
|
||||
"destructive.count.unpushed": "Commit chưa đẩy",
|
||||
"destructive.count.untracked": "Tệp chưa theo dõi",
|
||||
"destructive.force": "Tôi hiểu các commit chưa đẩy này sẽ bị loại bỏ.",
|
||||
"destructive.loading": "Đang tải trạng thái hiện tại…",
|
||||
"destructive.notice.activeSessionSkipped": "Một hoặc nhiều phiên trong làn đường này vẫn đang hoạt động và sẽ được giữ lại, không bị dọn.",
|
||||
"destructive.notice.adopted": "Làn đường này trỏ tới thư mục của bạn. Chỉ bản ghi trên bảng điều khiển bị xóa — thư mục và các tệp bên trong không bị thay đổi.",
|
||||
"destructive.notice.missing": "Thư mục làn đường đã không còn. Việc xóa chỉ bỏ bản ghi trên bảng điều khiển và dọn mục worktree cũ trong Git; không tệp nào bị xóa khỏi đĩa.",
|
||||
"destructive.notice.unreadable": "Không thể đọc thư mục làn đường như một Git worktree. Hệ thống sẽ thử xóa; nếu Git tự chối, mục ghi worktree của nó sẽ được dọn trực tiếp thay thế. Trong mọi trường hợp, thư mục vẫn không bị thay đổi.",
|
||||
"destructive.purge.confirm": "Xóa lịch sử",
|
||||
"destructive.purge.message": "Hãy xác nhận các số liệu hiện tại trước khi xóa lịch sử phiên đã lưu.",
|
||||
"destructive.purge.title": "Xóa lịch sử làn đường?",
|
||||
"destructive.remove.confirm": "Xóa làn đường",
|
||||
"destructive.remove.message": "Hãy xác nhận các số liệu hiện tại trước khi thực hiện thao tác này.",
|
||||
"destructive.remove.title": "Xóa làn đường?",
|
||||
"destructive.reset.confirm": "Đặt lại worktree",
|
||||
"destructive.reset.message": "Hãy xác nhận các số liệu hiện tại trước khi đặt lại worktree này.",
|
||||
"destructive.reset.survives": "Các tệp Git bỏ qua như node_modules và .env được giữ lại; các tệp chưa theo dõi sẽ bị xóa.",
|
||||
"destructive.reset.title": "Đặt lại worktree được quản lý?",
|
||||
"destructive.warning.no-remote": "Chưa cấu hình Git remote, nên không có bản sao lưu ở xa. Bạn vẫn có thể tiếp tục.",
|
||||
"emptyState": "Chưa có làn đường nào. Tạo một từ thư mục làm việc:",
|
||||
"git.uncommitted": "{{dirty}} đã sửa · {{untracked}} chưa theo dõi",
|
||||
"kind.adopted": "đã nhận",
|
||||
"kind.managed": "được quản lý",
|
||||
"laneHeader": "Làn đường {{id}} · {{title}} · {{pipeline}}",
|
||||
"moreActions": "Thêm hành động",
|
||||
"preflightError": "Không thể tải trạng thái làn đường hiện tại.",
|
||||
"preflightErrorWithMessage": "Không thể tải trạng thái làn đường hiện tại: {{message}}",
|
||||
"status.failed": "thất bại",
|
||||
"status.idle": "rảnh",
|
||||
"status.provisioning": "đang khởi tạo",
|
||||
"status.running": "đang chạy",
|
||||
"statusDead": "ĐÃ CHẾT",
|
||||
"title": "Làn đường",
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"activityFeed": "Luồng hoạt động",
|
||||
"agentBoard": "Bảng Kanban",
|
||||
"analytics": "Phân tích",
|
||||
"avg": "TB",
|
||||
"brand": "Bảng điều khiển Agent",
|
||||
"brandSub": "Giám sát Claude Code",
|
||||
"ccConfig": "Cấu hình Claude",
|
||||
"checkFailed": "Kiểm tra cập nhật thất bại",
|
||||
"checkForUpdates": "Kiểm tra cập nhật",
|
||||
"checkingForUpdates": "Đang kiểm tra cập nhật...",
|
||||
"close": "Đóng",
|
||||
"collapse": "Thu gọn thanh bên",
|
||||
"collapseShort": "Thu gọn",
|
||||
"connection": "Kết nối",
|
||||
"connectionDetails": "Chi tiết kết nối",
|
||||
"connectionUptime": "Đã kết nối",
|
||||
"dashboard": "Tổng quan",
|
||||
"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",
|
||||
"noEventsYet": "Chưa có sự kiện",
|
||||
"notConnected": "Chưa kết nối",
|
||||
"notFound": "Không tìm thấy",
|
||||
"peakRate": "Đỉnh",
|
||||
"recentActivity": "Hoạt động gần đây",
|
||||
"resetStats": "Đặt lại",
|
||||
"scrollDown": "Cuộn danh mục xuống",
|
||||
"scrollUp": "Cuộn danh mục lên",
|
||||
"secondsAgo": "{{count}} giây trước",
|
||||
"sessions": "Phiên",
|
||||
"settings": "Cài đặt",
|
||||
"skipToContent": "Bỏ qua đến nội dung",
|
||||
"statsPersisted": "Số liệu được lưu sau khi tải lại",
|
||||
"switchLanguage": "Chuyển sang {{language}}",
|
||||
"throughput60s": "Lưu lượng · 60s qua",
|
||||
"topEventTypes": "Loại sự kiện phổ biến",
|
||||
"unitEvents": "sự kiện",
|
||||
"unitPerSec": "sự kiện/s",
|
||||
"upToDate": "Đã là mới nhất",
|
||||
"updateAvailable": "Có bản cập nhật",
|
||||
"website": "Website",
|
||||
"workflows": "Quy trình",
|
||||
"workspace": "Không gian làm việc",
|
||||
"wsEndpoint": "WebSocket"
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"actions": {
|
||||
"newRun": "Lượt chạy mới",
|
||||
"send": "Gửi",
|
||||
"sending": "Đang gửi…",
|
||||
"start": "Chạy",
|
||||
"starting": "Đang khởi động…",
|
||||
"stop": "Dừng",
|
||||
"stopping": "Đang dừng…",
|
||||
"viewSession": "Xem phiên"
|
||||
},
|
||||
"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 `claude` trong PATH. Cài đặt Claude Code 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ì"
|
||||
},
|
||||
"errors": {
|
||||
"attachFailed": "Không gắn được vào run: {{message}}",
|
||||
"cwdRequired": "Cần thư mục làm việc để bắt đầu run",
|
||||
"killFailed": "Không dừng được: {{message}}",
|
||||
"laneCreateFailed": "Không thể tạo làn đường: {{message}}",
|
||||
"noLaneSelected": "Chưa chọn làn đường hoặc không thể tạo làn đường",
|
||||
"noRunIdReturned": "Không trả về ID run từ khởi động làn đường",
|
||||
"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}}",
|
||||
"startFailed": "Không khởi động đượ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": {
|
||||
"cwd": "Thư mục làm việc",
|
||||
"cwdGroups": {
|
||||
"dashboard": "Dashboard server",
|
||||
"home": "Home",
|
||||
"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ĩ",
|
||||
"model": "Model",
|
||||
"modelCustom": "Tuỳ chỉnh…",
|
||||
"modelCustomPlaceholder": "model id (vd: claude-opus-4-7-20260101)",
|
||||
"modelInheritLabel": "Kế thừa từ settings",
|
||||
"permissionAcceptEdits": "acceptEdits (khuyên dùng)",
|
||||
"permissionBypass": "bypassPermissions (NGUY HIỂM - cho phép tất cả mà không hỏi)",
|
||||
"permissionDefault": "default (prompt tương tác - headless sẽ treo)",
|
||||
"permissionMode": "Permission mode",
|
||||
"permissionPlan": "plan (chỉ đọc, lập kế hoạch)",
|
||||
"prompt": "Prompt",
|
||||
"promptPlaceholder": "Hỏi Claude bất cứ điều gì…"
|
||||
},
|
||||
"footer": {
|
||||
"cost": "Chi phí",
|
||||
"duration": "Thời lượng",
|
||||
"exitCode": "Exit code",
|
||||
"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.",
|
||||
"shortcut": "Cmd+Enter / Ctrl+Enter để gửi"
|
||||
},
|
||||
"limitations": {
|
||||
"dismiss": "Đã rõ"
|
||||
},
|
||||
"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",
|
||||
"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.",
|
||||
"resumeOption": "Tiếp tục phiên đã có",
|
||||
"search": "Tìm theo ID, cwd hoặc status…",
|
||||
"selectedBadge": "Đang tiếp tục"
|
||||
},
|
||||
"runs": {
|
||||
"allSessionsLink": "Xem tất cả phiên Claude Code →",
|
||||
"attached": "Đã gắn vào run đang chạy",
|
||||
"scopeNote": "Chỉ hiển thị các run bạn khởi chạy từ dashboard này.",
|
||||
"started": "Bắt đầu lúc {{when}}",
|
||||
"switcher": "Run đang chạy",
|
||||
"switcherEmpty": "Không có run đang chạy",
|
||||
"viewActive": "Xem run đang chạy",
|
||||
"viewActive_other": "{{count}} run đang chạy",
|
||||
"viewLabel": "Xem"
|
||||
},
|
||||
"status": {
|
||||
"abandoned": "Bị bỏ",
|
||||
"completed": "Hoàn tất",
|
||||
"error": "Lỗi",
|
||||
"idle": "Rảnh",
|
||||
"killed": "Đã dừng",
|
||||
"running": "Đang chạy",
|
||||
"spawning": "Khởi động…"
|
||||
},
|
||||
"statusHeader": {
|
||||
"cwd": "Cwd",
|
||||
"duration": "Đã chạy",
|
||||
"effort": "Effort",
|
||||
"envelopes": "Sự kiện",
|
||||
"model": "Model",
|
||||
"permissionMode": "Mode",
|
||||
"session": "Session"
|
||||
},
|
||||
"subtitle": "Khởi chạy một phiên Claude Code ngay trong dashboard. Stream output trực tiếp, hội thoại đa lượt, và chia sẻ cùng pipeline hooks/analytics với phiên ở terminal.",
|
||||
"title": "Chạy Claude",
|
||||
"tokens": {
|
||||
"cacheRead": "Cache hit",
|
||||
"cost": "Chi phí",
|
||||
"input": "Input",
|
||||
"label": "Context",
|
||||
"output": "Output"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"title": "Phiên",
|
||||
"searchPlaceholder": "Tìm phiên...",
|
||||
"filterAll": "Tất cả",
|
||||
"filterActive": "Đang hoạt động",
|
||||
"filterWaiting": "Đang chờ",
|
||||
"filterCompleted": "Hoàn tất",
|
||||
"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.",
|
||||
"tableSession": "Phiên",
|
||||
"tableStatus": "Trạng thái",
|
||||
"tableLastActive": "Hoạt động gần nhất",
|
||||
"tableDuration": "Thời lượng",
|
||||
"tableAgents": "Agent",
|
||||
"tableCost": "Chi phí",
|
||||
"tableDirectory": "Thư mục",
|
||||
"defaultName": "Phiên ",
|
||||
"detail": {
|
||||
"waitingBanner": {
|
||||
"title": "Đang chờ phản hồi của bạn",
|
||||
"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}})",
|
||||
"transcriptNotFound": "Không tìm thấy bản ghi hội thoại cho agent này. Tệp transcript có thể bị thiếu hoặc chưa được liên kết."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,435 @@
|
||||
{
|
||||
"title": "Cài đặt",
|
||||
"subtitle": "Quản lý định giá, thông báo, dữ liệu và hooks",
|
||||
"exportData": "Xuất dữ liệu",
|
||||
"acrossSessions": "Trên toàn bộ phiên đang được theo dõi",
|
||||
"basedOnUsage": "Dựa trên mức dùng token theo mô hình",
|
||||
"tabby": {
|
||||
"title": "Bạn đồng hành Tabby",
|
||||
"description": "Chú mèo nổi phản ứng với các phiên trực tiếp của bạn.",
|
||||
"enable": "Hiện Tabby",
|
||||
"enableDesc": "Hiển thị bạn đồng hành ở góc trên toàn bảng điều khiển (⌘B để mở)"
|
||||
},
|
||||
"pricing": {
|
||||
"title": "Định giá mô hình",
|
||||
"description": "Đơn giá theo một triệu token (USD). Dùng % làm ký tự đại diện trong mẫu. Một số mô hình có mức giá giới thiệu có thời hạn (hiển thị màu tím); usage vào hoặc trước ngày kết thúc tính theo mức đó, sau đó tính theo mức chuẩn.",
|
||||
"introNote": "Ưu đãi ${{input}}/${{output}} đến {{until}}",
|
||||
"introRatesTitle": "Giá giới thiệu",
|
||||
"introRatesHint": "Để trống ngày nếu không có ưu đãi",
|
||||
"introUntil": "Đến (ngày)",
|
||||
"introUntilInvalid": "Ngày kết thúc ưu đãi phải theo định dạng YYYY-MM-DD",
|
||||
"resetConfirm": "Xác nhận đặt lại",
|
||||
"resetDefaults": "Khôi phục mặc định",
|
||||
"resetResult": "Đã đặt lại về {{count}} quy tắc mặc định",
|
||||
"addModel": "Thêm mô hình",
|
||||
"pattern": "Mẫu",
|
||||
"patternPlaceholder": "claude-opus-4%",
|
||||
"namePlaceholder": "Claude Opus 4",
|
||||
"validationRequired": "Bắt buộc nhập mẫu và tên hiển thị",
|
||||
"lastUpdated": "Cập nhật lần cuối: ",
|
||||
"tooltip": {
|
||||
"title": "Cách hoạt động của định giá mô hình",
|
||||
"howItWorks": "Cách hoạt động",
|
||||
"howItWorksBody": "Khi một phiên báo cáo mức dùng, dashboard tìm quy tắc định giá đầu tiên có mẫu khớp với model id, rồi nhân (token đầu vào / 1 triệu) và (token đầu ra / 1 triệu) với các đơn giá bên dưới để tính chi phí. Quy tắc được duyệt từ trên xuống - quy tắc khớp đầu tiên sẽ được dùng.",
|
||||
"patternsTitle": "Cú pháp mẫu",
|
||||
"patternsBody": "Mẫu là dạng glob kiểu SQL. % là ký tự đại diện khớp với bất kỳ chuỗi nào. Ví dụ: claude-opus-4-7% khớp mọi model id bắt đầu bằng claude-opus-4-7 (ví dụ claude-opus-4-7, claude-opus-4-7-20260101). claude-%-haiku khớp mọi biến thể haiku. Một id chính xác như claude-sonnet-4-6 chỉ khớp với chính nó.",
|
||||
"manualUpdates": "Bạn phải cập nhật giá thủ công",
|
||||
"manualUpdatesBody": "Anthropic công bố thay đổi giá trên website của họ - không có nguồn dữ liệu trực tiếp. Khi có model mới ra mắt hoặc đơn giá thay đổi, hãy chỉnh sửa quy tắc tương ứng (hoặc thêm quy tắc mới ở phía trên quy tắc bao quát) để những phiên ghi nhận sau này được tính phí chính xác. Phiên đã lưu vẫn giữ nguyên giá đã áp dụng tại thời điểm nạp.",
|
||||
"apiPricing": "Chỉ để tham khảo - đơn giá API",
|
||||
"apiPricingBody": "Đây là đơn giá API trả theo lượng dùng. Nếu bạn dùng Claude Code theo gói thuê bao (Pro, Max, Team hoặc Enterprise), chi phí thực tế là phí cố định hàng tháng chứ không tính theo token - nên những con số ở đây thường cao hơn số tiền bạn thực trả. Hãy xem chi phí ở đây là ước tính mức dùng để tham khảo, không phải hóa đơn."
|
||||
},
|
||||
"cacheWrite5m": "Ghi bộ nhớ đệm (5m)",
|
||||
"cacheWrite1h": "Ghi bộ nhớ đệm (1h)",
|
||||
"fastInput": "Fast Input",
|
||||
"fastOutput": "Fast Output"
|
||||
},
|
||||
"claudeHome": {
|
||||
"title": "CLAUDE_HOME",
|
||||
"description": "Thư mục gốc chứa dữ liệu phiên Claude Code. Thay đổi sẽ cập nhật ngay đường dẫn quét cho transcript và import.",
|
||||
"save": "Lưu",
|
||||
"saving": "Đang lưu...",
|
||||
"current": "Hiện tại:",
|
||||
"placeholder": "/đường-dẫn/tới/claude-home",
|
||||
"saveFailed": "Cập nhật CLAUDE_HOME thất bại"
|
||||
},
|
||||
"hooks": {
|
||||
"title": "Cấu hình hook",
|
||||
"description": "Hooks của Claude Code chuyển tiếp sự kiện về dashboard theo thời gian thực.",
|
||||
"allInstalled": "Đã cài đầy đủ hooks",
|
||||
"incomplete": "Hooks chưa đầy đủ",
|
||||
"reinstall": "Cài lại hooks",
|
||||
"success": "Cài hooks thành công",
|
||||
"failed": "Cài hooks thất bại"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Thông báo",
|
||||
"description": "Thông báo trình duyệt cho các sự kiện quan trọng. Cần cấp quyền.",
|
||||
"enable": "Bật thông báo trình duyệt",
|
||||
"granted": "Đã cấp quyền",
|
||||
"blocked": "Đã chặn quyền",
|
||||
"required": "Cần cấp quyền",
|
||||
"notifyWhen": "Thông báo cho tôi khi...",
|
||||
"newSession": "Phiên mới bắt đầu",
|
||||
"sessionComplete": "Phiên hoàn tất",
|
||||
"sessionError": "Phiên gặp lỗi",
|
||||
"subagentSpawned": "Subagent được tạo",
|
||||
"testTitle": "Agent Monitor",
|
||||
"testBody": "Thông báo đang hoạt động!",
|
||||
"sendTest": "Gửi thông báo thử",
|
||||
"disabledInfo": "Thông báo đang tắt - bật để nhận cảnh báo sự kiện phiên"
|
||||
},
|
||||
"import": {
|
||||
"title": "Nhập lịch sử",
|
||||
"description": "Đưa các phiên Claude Code hiện có vào dashboard. Số token, chi phí theo mô hình, lần nén ngữ cảnh, subagent, lượt dùng tool và thời lượng từng lượt được dựng lại từ chính các transcript JSONL gốc - y hệt cách phiên trực tiếp được ghi nhận.",
|
||||
"accuracyNote": "Chạy lại nhiều lần luôn an toàn. Phiên được khử trùng lặp theo session ID, và mốc nén ngữ cảnh đảm bảo tổng token không bao giờ bị tính trùng.",
|
||||
"supportedFiles": "Định dạng được hỗ trợ: .jsonl, .meta.json, .zip, .tar, .tar.gz, .tgz, .gz",
|
||||
"instructions": "Cách thu thập lịch sử của bạn",
|
||||
"stepLocate": "1. Tìm lịch sử Claude Code của bạn",
|
||||
"stepLocateBody": "Mỗi phiên Claude Code được lưu thành một transcript JSONL trong thư mục projects. Mỗi thư mục con được đặt tên theo thư mục làm việc nơi phiên bắt đầu (dấu / đổi thành -).",
|
||||
"stepArchive": "2. Đóng gói để chuyển (tuỳ chọn)",
|
||||
"stepArchiveBody": "Để chuyển lịch sử từ máy khác, hãy nén toàn bộ thư mục trước, rồi sao chép qua (AirDrop, scp, USB, lưu trữ đám mây):",
|
||||
"stepChoose": "3. Chọn chế độ nhập bên dưới",
|
||||
"stepChooseBody": "Quét lại vị trí mặc định, trỏ tới thư mục bạn đã giải nén lịch sử, hoặc tải tệp/lưu trữ trực tiếp.",
|
||||
"stepVerify": "4. Kiểm tra token và chi phí",
|
||||
"stepVerifyBody": "Sau khi nhập xong, mở Analytics → Cost để kiểm tra phân tích chi phí. Nhập lại cùng một phiên luôn an toàn.",
|
||||
"defaultLocation": "Vị trí mặc định trên máy này",
|
||||
"locationFound": "Đã tìm thấy thư mục",
|
||||
"locationMissing": "Không tìm thấy thư mục",
|
||||
"projectsLabel": "dự án",
|
||||
"jsonlLabel": "tệp JSONL",
|
||||
"modeRescan": "Quét lại thư mục mặc định",
|
||||
"modeRescanDesc": "Đọc lại ~/.claude/projects và nhập mọi thứ mới.",
|
||||
"modeFolder": "Quét một thư mục",
|
||||
"modeFolderDesc": "Quét bất kỳ thư mục nào trên máy để tìm transcript JSONL (đệ quy thư mục con).",
|
||||
"modeUpload": "Tải tệp lên",
|
||||
"modeUploadDesc": "Kéo thả tệp JSONL hoặc lưu trữ (.zip / .tar.gz) trực tiếp vào trình duyệt.",
|
||||
"modeBackup": "Khôi phục sao lưu",
|
||||
"modeBackupDesc": "Nhập tệp xuất của bảng điều khiển (.json) — gộp lịch sử từ máy khác vào.",
|
||||
"backupHint": "Kéo tệp .json đã xuất vào đây hoặc bấm để chọn",
|
||||
"backupSub": "Tệp do nút Xuất dữ liệu tạo ra (đầu trang Cài đặt)",
|
||||
"runRestore": "Khôi phục",
|
||||
"backupResult": {
|
||||
"title": "Khôi phục hoàn tất",
|
||||
"sessionsImported": "Phiên đã thêm: {{count}}",
|
||||
"sessionsSkipped": "Đã có sẵn: {{count}}",
|
||||
"events": "Sự kiện: {{count}}",
|
||||
"pricing": "Quy tắc giá: {{count}}",
|
||||
"detail": "{{agents}} agent · {{workflows}} quy trình · {{runs}} lần chạy · {{rules}} quy tắc cảnh báo"
|
||||
},
|
||||
"folderPlaceholder": "/đường-dẫn-tuyệt-đối/tới/claude-history",
|
||||
"folderHelper": "Đường dẫn tuyệt đối. Ký tự ~ sẽ được mở rộng. Thư mục con được quét đệ quy.",
|
||||
"runRescan": "Quét lại ngay",
|
||||
"runScan": "Quét thư mục",
|
||||
"runUpload": "Tải lên & nhập",
|
||||
"dropzoneHint": "Kéo thả tệp vào đây hoặc bấm để chọn",
|
||||
"dropzoneSub": "Chấp nhận .jsonl, .meta.json, .zip, .tar, .tar.gz, .tgz, .gz",
|
||||
"filesSelected": "Đã chọn {{count}} tệp",
|
||||
"clearSelection": "Xóa lựa chọn",
|
||||
"copy": "Sao chép",
|
||||
"copied": "Đã sao chép",
|
||||
"progress": {
|
||||
"scan": "Đang quét thư mục...",
|
||||
"extract": "Đang giải nén ({{processed}}/{{total}})...",
|
||||
"parse": "Đang phân tích transcript ({{processed}}/{{total}})...",
|
||||
"complete": "Nhập hoàn tất",
|
||||
"error": "Nhập thất bại"
|
||||
},
|
||||
"result": {
|
||||
"imported": "Đã nhập: {{count}}",
|
||||
"backfilled": "Đã làm giàu phiên cũ: {{count}}",
|
||||
"skipped": "Đã cập nhật trước đó: {{count}}",
|
||||
"errors": "Lỗi: {{count}}",
|
||||
"filesScanned": "Tệp đã quét: {{count}}",
|
||||
"title": "Kết quả nhập gần nhất"
|
||||
},
|
||||
"errors": {
|
||||
"noFiles": "Chưa chọn tệp nào",
|
||||
"noJsonl": "Không tìm thấy tệp .jsonl trong nội dung tải lên",
|
||||
"pathRequired": "Cần nhập đường dẫn",
|
||||
"pathInvalid": "Đường dẫn phải là tuyệt đối",
|
||||
"pathNotFound": "Đường dẫn không tồn tại",
|
||||
"pathNotDir": "Đường dẫn không phải thư mục",
|
||||
"generic": "Nhập thất bại: {{message}}"
|
||||
}
|
||||
},
|
||||
"data": {
|
||||
"title": "Quản lý dữ liệu",
|
||||
"description": "Thông tin cơ sở dữ liệu, nhập/xuất và dọn dẹp.",
|
||||
"dbOverview": "Tổng quan cơ sở dữ liệu",
|
||||
"dbSize": "Kích thước CSDL",
|
||||
"loadingDb": "Đang tải thông tin cơ sở dữ liệu...",
|
||||
"sessionCleanup": "Dọn dẹp phiên",
|
||||
"cleanupDesc": "Đánh dấu bỏ dở các phiên cũ và xóa dữ liệu cũ",
|
||||
"abandonAfter": "Đánh dấu bỏ dở phiên đang hoạt động cũ hơn",
|
||||
"purgeAfter": "Xóa phiên hoàn tất/lỗi cũ hơn",
|
||||
"confirmCleanup": "Xác nhận dọn dẹp",
|
||||
"runCleanup": "Chạy dọn dẹp",
|
||||
"nothingToClean": "Không có gì để dọn dẹp",
|
||||
"abandonedResult": " phiên đã bị bỏ dở",
|
||||
"purgedResult": " phiên đã xóa ({{events}} sự kiện, {{agents}} Agent)"
|
||||
},
|
||||
"danger": {
|
||||
"title": "Vùng nguy hiểm",
|
||||
"description": "Các thao tác không thể hoàn tác, xóa dữ liệu vĩnh viễn",
|
||||
"warning": "Thao tác này sẽ xóa toàn bộ phiên, Agent, sự kiện và dữ liệu token. Bạn chắc chứ?",
|
||||
"yesClearAll": "Có, xóa tất cả",
|
||||
"clearAllData": "Xóa toàn bộ dữ liệu",
|
||||
"clearedResult": "Đã xóa {{count}} dòng"
|
||||
},
|
||||
"about": {
|
||||
"title": "Giới thiệu",
|
||||
"description": "Thông tin runtime của máy chủ.",
|
||||
"release": "Phiên bản",
|
||||
"uiBuild": "UI build v{{version}} (hãy build lại client để khớp)",
|
||||
"uptime": "Thời gian chạy",
|
||||
"nodejs": "Node.js",
|
||||
"platform": "Nền tảng",
|
||||
"wsClients": "WS Clients",
|
||||
"loadingInfo": "Đang tải thông tin máy chủ..."
|
||||
},
|
||||
"tables": {
|
||||
"sessions": "phiên",
|
||||
"agents": "Agent",
|
||||
"events": "sự kiện",
|
||||
"sessionsWithCost": "phiên có chi phí",
|
||||
"pricingRules": "quy tắc định giá"
|
||||
},
|
||||
"messages": {
|
||||
"failedLoad": "Tải dữ liệu thất bại",
|
||||
"failedSave": "Lưu thất bại",
|
||||
"failedDelete": "Xóa thất bại",
|
||||
"unknownError": "Không xác định",
|
||||
"actionFailed": "Lỗi: {{message}}"
|
||||
},
|
||||
"webhooks": {
|
||||
"title": "Thông báo Webhook",
|
||||
"description": "Chuyển tiếp cảnh báo đã kích hoạt tới Slack, Discord, Microsoft Teams hoặc bất kỳ endpoint HTTP nào. Gửi tự động, thử lại khi lỗi và không bao giờ chặn việc giám sát.",
|
||||
"count_one": "{{count}} đích",
|
||||
"count_other": "{{count}} đích",
|
||||
"add": "Thêm Webhook",
|
||||
"loading": "Đang tải webhook…",
|
||||
"empty": "Chưa cấu hình webhook nào. Thêm một cái để chuyển tiếp cảnh báo tới Slack, Discord, Teams hoặc endpoint tùy chỉnh.",
|
||||
"scopedTo_one": "{{count}} quy tắc",
|
||||
"scopedTo_other": "{{count}} quy tắc",
|
||||
"enabled": "Đã bật",
|
||||
"test": "Thử",
|
||||
"edit": "Sửa",
|
||||
"delete": "Xóa",
|
||||
"confirmDelete": "Xác nhận",
|
||||
"testOk": "Đã gửi (HTTP {{status}})",
|
||||
"testFail": "Thất bại: {{error}}",
|
||||
"addTitle": "Webhook mới",
|
||||
"editTitle": "Sửa Webhook",
|
||||
"fieldName": "Tên",
|
||||
"fieldNamePlaceholder": "vd: Slack nhóm #alerts",
|
||||
"fieldType": "Loại",
|
||||
"type": {
|
||||
"slack": "Slack",
|
||||
"discord": "Discord",
|
||||
"teams": "Microsoft Teams",
|
||||
"generic": "Tùy chỉnh (JSON)"
|
||||
},
|
||||
"fieldUrl": "URL Webhook",
|
||||
"urlKeepHint": "để trống để giữ nguyên",
|
||||
"urlKeepPlaceholder": "•••••••• (không đổi)",
|
||||
"urlPlaceholder": {
|
||||
"slack": "https://hooks.slack.com/services/…",
|
||||
"discord": "https://discord.com/api/webhooks/…",
|
||||
"teams": "https://outlook.office.com/webhook/…",
|
||||
"generic": "https://example.com/webhook"
|
||||
},
|
||||
"fieldSecret": "Khóa ký (tùy chọn)",
|
||||
"secretPlaceholder": "Khóa HMAC-SHA256",
|
||||
"secretKeepPlaceholder": "•••••••• (để trống để giữ nguyên)",
|
||||
"secretHint": "Khi đặt, yêu cầu được ký bằng header X-Webhook-Signature.",
|
||||
"fieldHeaders": "Header tùy chỉnh (tùy chọn)",
|
||||
"replaceHeaders": "Thay header",
|
||||
"headerKey": "Header",
|
||||
"headerValue": "Giá trị",
|
||||
"addHeader": "Thêm header",
|
||||
"scopeAll": "Nhận cảnh báo từ tất cả quy tắc",
|
||||
"enabledOnSave": "Bật",
|
||||
"save": "Lưu",
|
||||
"create": "Tạo",
|
||||
"cancel": "Hủy",
|
||||
"urlOptional": "ghi đè tùy chọn",
|
||||
"urlAuto": "URL được đặt tự động từ thông tin xác thực bên dưới.",
|
||||
"deleteTitle": "Xóa webhook?",
|
||||
"deleteMessage": "Xóa \"{{name}}\"? Cảnh báo sẽ ngừng được gửi tới đích này. Không thể hoàn tác.",
|
||||
"guideToggle": "Cách thiết lập {{provider}}",
|
||||
"guideDocs": "Tài liệu chính thức của {{provider}}",
|
||||
"guideStaleNote": "Giao diện thiết lập của nhà cung cấp thường thay đổi nên các bước này có thể đã lỗi thời - hãy luôn kiểm tra tài liệu chính thức."
|
||||
},
|
||||
"alertsHub": {
|
||||
"title": "Cảnh báo",
|
||||
"description": "Định nghĩa quy tắc cảnh báo, định tuyến tới các kênh webhook và xem những gì đã kích hoạt - tất cả ở một nơi.",
|
||||
"tabRules": "Quy tắc",
|
||||
"tabChannels": "Kênh",
|
||||
"tabActivity": "Hoạt động",
|
||||
"rulesHint": "Điều kiện kích hoạt cảnh báo. Được đánh giá ở phía máy chủ trên luồng sự kiện trực tiếp.",
|
||||
"rulesEmptyHint": "Thêm quy tắc để bắt đầu cảnh báo về lỗi, không hoạt động, agent bị treo hoặc ngưỡng token."
|
||||
},
|
||||
"jumpTo": "Chuyển tới",
|
||||
"webhookGuides": {
|
||||
"slack": {
|
||||
"steps": [
|
||||
"Tạo hoặc mở một Slack app tại api.slack.com/apps.",
|
||||
"Bật 'Incoming Webhooks', rồi nhấn 'Add New Webhook to Workspace'.",
|
||||
"Chọn kênh để đăng và cấp quyền.",
|
||||
"Sao chép URL được tạo (https://hooks.slack.com/services/…) và dán vào ô trên."
|
||||
]
|
||||
},
|
||||
"discord": {
|
||||
"steps": [
|
||||
"Mở server → Cài đặt máy chủ → Tích hợp → Webhook.",
|
||||
"Nhấn 'New Webhook', chọn kênh, đổi tên nếu muốn.",
|
||||
"Nhấn 'Copy Webhook URL' và dán vào ô trên."
|
||||
]
|
||||
},
|
||||
"teams": {
|
||||
"steps": [
|
||||
"Trong kênh Teams mục tiêu, nhấn ⋯ → 'Workflows'.",
|
||||
"Chọn mẫu 'Post to a channel when a webhook request is received'.",
|
||||
"Hoàn tất luồng và sao chép URL HTTP POST được tạo.",
|
||||
"Dán vào ô trên. (Office 365 connector cũ đã ngừng năm 2025 - dùng Workflows.)"
|
||||
]
|
||||
},
|
||||
"google_chat": {
|
||||
"steps": [
|
||||
"Mở không gian Google Chat → tên không gian → 'Ứng dụng & tích hợp'.",
|
||||
"Nhấn 'Webhooks' → 'Add webhook' và đặt tên.",
|
||||
"Sao chép URL webhook và dán vào ô trên."
|
||||
]
|
||||
},
|
||||
"mattermost": {
|
||||
"steps": [
|
||||
"Menu chính → Tích hợp → Incoming Webhooks (quản trị viên phải bật webhook trước).",
|
||||
"Nhấn 'Add Incoming Webhook' và chọn kênh.",
|
||||
"Lưu, rồi sao chép URL webhook và dán vào ô trên."
|
||||
]
|
||||
},
|
||||
"rocketchat": {
|
||||
"steps": [
|
||||
"Quản trị → Tích hợp → New → Incoming.",
|
||||
"Bật nó, chọn kênh và lưu.",
|
||||
"Sao chép 'Webhook URL' và dán vào ô trên."
|
||||
]
|
||||
},
|
||||
"telegram": {
|
||||
"steps": [
|
||||
"Nhắn @BotFather, chạy /newbot và sao chép bot token.",
|
||||
"Thêm bot vào nhóm/kênh của bạn (hoặc nhắn riêng cho nó).",
|
||||
"Tìm chat ID: gửi một tin nhắn, mở https://api.telegram.org/bot<token>/getUpdates, đọc result[].message.chat.id.",
|
||||
"Nhập Bot token và Chat ID ở trên - không cần URL."
|
||||
]
|
||||
},
|
||||
"pagerduty": {
|
||||
"steps": [
|
||||
"Mở Service mục tiêu → Integrations → 'Add integration'.",
|
||||
"Chọn 'Events API v2'.",
|
||||
"Sao chép Integration Key (routing key).",
|
||||
"Nhập làm Routing key ở trên - URL Events API đã được điền sẵn."
|
||||
]
|
||||
},
|
||||
"opsgenie": {
|
||||
"steps": [
|
||||
"Settings → Integrations → thêm tích hợp 'API'.",
|
||||
"Sao chép API key được tạo.",
|
||||
"Ghi nhớ vùng tài khoản (US hoặc EU).",
|
||||
"Nhập API key và vùng ở trên - URL cảnh báo được suy ra từ vùng."
|
||||
]
|
||||
},
|
||||
"splunk_oncall": {
|
||||
"steps": [
|
||||
"Integrations → REST Endpoint, và bật nó.",
|
||||
"Sao chép REST URL - nó đã chứa API key của bạn.",
|
||||
"Thay '$routing_key' ở cuối bằng một routing key của bạn.",
|
||||
"Dán URL đầy đủ vào ô trên."
|
||||
]
|
||||
},
|
||||
"zapier": {
|
||||
"steps": [
|
||||
"Tạo một Zap với trigger 'Webhooks by Zapier' → 'Catch Hook'.",
|
||||
"Sao chép URL webhook tùy chỉnh mà nó cấp.",
|
||||
"Dán vào ô trên. Cảnh báo đến dạng JSON: { event, alert }."
|
||||
]
|
||||
},
|
||||
"make": {
|
||||
"steps": [
|
||||
"Thêm module 'Webhooks' → 'Custom webhook' làm bước đầu của scenario.",
|
||||
"Nhấn 'Add', tạo hook và sao chép URL.",
|
||||
"Dán vào ô trên, rồi chạy một lần để Make học cấu trúc payload."
|
||||
]
|
||||
},
|
||||
"n8n": {
|
||||
"steps": [
|
||||
"Thêm node 'Webhook' vào workflow; đặt method là POST.",
|
||||
"Sao chép Production URL.",
|
||||
"Kích hoạt workflow và dán URL vào ô trên (http được phép cho bản tự host)."
|
||||
]
|
||||
},
|
||||
"pipedream": {
|
||||
"steps": [
|
||||
"Tạo workflow với trigger 'HTTP / Webhook'.",
|
||||
"Sao chép URL endpoint duy nhất.",
|
||||
"Dán vào ô trên; xem các lần gửi trong trình kiểm tra sự kiện của Pipedream."
|
||||
]
|
||||
},
|
||||
"generic": {
|
||||
"steps": [
|
||||
"Trỏ tới bất kỳ endpoint nào nhận JSON POST (https, hoặc http để thử cục bộ).",
|
||||
"Cấu trúc body: { event: 'alert.triggered', source, sent_at, alert: { … } }.",
|
||||
"Tùy chọn: đặt khóa ký (HMAC-SHA256 trên body → header X-Webhook-Signature) và header tùy chỉnh.",
|
||||
"Mẹo: dùng công cụ miễn phí như webhook.site để xem payload chính xác."
|
||||
]
|
||||
}
|
||||
},
|
||||
"remoteSources": {
|
||||
"title": "Nguồn dữ liệu từ xa",
|
||||
"description": "Thu thập mức sử dụng Claude Code từ các máy khác qua SSH - ví dụ một máy dev hoặc máy ảo trên cloud mà bạn điều khiển qua SSH trong khi chạy bảng điều khiển này cục bộ. Xác thực dùng cấu hình SSH của chính bạn (~/.ssh/config, khóa, agent); không có mật khẩu nào được lưu ở đây.",
|
||||
"scopeTitle": "Phạm vi dữ liệu",
|
||||
"scopeDesc": "Chọn dữ liệu của những máy nào sẽ hiển thị trên toàn bộ bảng điều khiển. Thay đổi được áp dụng ngay lập tức trên mọi trang — phiên, phân tích và chi phí.",
|
||||
"scopeAll": "Tất cả nguồn",
|
||||
"scopeAllDesc": "Máy này cùng với mọi nguồn từ xa đã cấu hình, kết hợp lại.",
|
||||
"scopeLocal": "Chỉ máy này",
|
||||
"scopeLocalDesc": "Chỉ các phiên được thu thập cục bộ — ẩn toàn bộ dữ liệu nguồn từ xa.",
|
||||
"scopeSelected": "Nguồn đã chọn",
|
||||
"scopeSelectedDesc": "Chọn chính xác những máy cần đưa vào, bên dưới.",
|
||||
"scopeSelectedCount": "Đã chọn {{n}} trong {{total}}",
|
||||
"scopePickMachines": "Máy cần đưa vào",
|
||||
"thisMachine": "Máy này",
|
||||
"listTitle": "Nguồn đã cấu hình",
|
||||
"add": "Thêm nguồn",
|
||||
"addTitle": "Thêm nguồn từ xa",
|
||||
"editTitle": "Sửa nguồn",
|
||||
"fieldLabel": "Nhãn",
|
||||
"fieldHost": "Máy chủ SSH",
|
||||
"fieldPort": "Cổng (tùy chọn)",
|
||||
"fieldIdentity": "Tệp danh tính (tùy chọn)",
|
||||
"fieldRemoteHome": "Thư mục Claude từ xa (tùy chọn)",
|
||||
"fieldRemoteHomeHint": "Linux/macOS: mặc định ~/.claude (hoặc đường dẫn tuyệt đối như /home/you/.claude). SSH vào Windows mà Claude chạy trong WSL: để trống (tự phát hiện) hoặc dùng wsl:~/.claude. Windows thuần: C:/Users/you/.claude.",
|
||||
"fieldEnabled": "Tự động đồng bộ ở chế độ nền",
|
||||
"empty": "Chưa có nguồn từ xa nào.",
|
||||
"emptyHint": "Thêm một máy bạn kết nối qua SSH để kéo dữ liệu sử dụng Claude Code của máy đó về.",
|
||||
"paused": "Tắt tự động đồng bộ",
|
||||
"sessionCount": "{{n}} phiên",
|
||||
"sessionCountLinked": "{{n}} đã liên kết",
|
||||
"sessionCountHint": "Phiên gắn với nguồn này (không phải mọi phiên bạn thấy khi phạm vi dữ liệu là Tất cả)",
|
||||
"lastSync": "Đồng bộ lần cuối: {{when}}",
|
||||
"neverSynced": "Chưa bao giờ đồng bộ",
|
||||
"imported": "Đã nhập {{n}}",
|
||||
"syncNew": "{{n}} mới",
|
||||
"syncOnRemote": "{{n}} trên máy từ xa",
|
||||
"test": "Kiểm tra",
|
||||
"syncNow": "Đồng bộ",
|
||||
"syncAll": "Đồng bộ tất cả",
|
||||
"enable": "Bật",
|
||||
"disable": "Tắt",
|
||||
"confirmDelete": "Xóa nguồn này?",
|
||||
"purgeData": "Đồng thời xóa các phiên đã nhập từ nguồn này (không thể hoàn tác)",
|
||||
"deleteAndPurge": "Xóa + xóa dữ liệu",
|
||||
"removeKeep": "Xóa (giữ dữ liệu)",
|
||||
"remoteSourceBadgeTitle": "Được thu thập từ một máy từ xa"
|
||||
},
|
||||
"cursorPathsNote": "Chỉ mang tính thông tin: phiên Cursor cũng được tính — Cursor tình cờ dùng cùng đường dẫn ~/.claude với Claude Code (cục bộ và trên máy từ xa đã đồng bộ)."
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"greeting": {
|
||||
"morning": "Chào buổi sáng",
|
||||
"afternoon": "Chào buổi chiều",
|
||||
"evening": "Chào buổi tối",
|
||||
"night": "Đêm đã khuya"
|
||||
},
|
||||
"tagline": "Mọi điều agent của bạn làm đều không ẩn trong bóng tối.",
|
||||
"sub1": "Khả năng quan sát thời gian thực cho mọi phiên Claude Code.",
|
||||
"sub2": "Token, công cụ, chi phí và workflow, tất cả trực tiếp.",
|
||||
"brand": "Giám sát Claude Code",
|
||||
"taglines": [
|
||||
"Mọi điều agent của bạn làm đều không ẩn trong bóng tối.",
|
||||
"Thấy rõ từng bước đi của agent.",
|
||||
"Agent của bạn, hoàn toàn trong tầm quan sát.",
|
||||
"Từng token, công cụ và lượt xử lý — hiện rõ trước mắt.",
|
||||
"Nhìn cả đội agent của bạn suy nghĩ.",
|
||||
"Nơi mọi phiên Claude Code trở nên rõ ràng.",
|
||||
"Đôi mắt thời gian thực dõi theo từng agent.",
|
||||
"Từ prompt đến kết quả, tất cả đều được ghi lại.",
|
||||
"Phòng điều khiển cho các AI agent của bạn.",
|
||||
"Từng subagent đều được nắm rõ.",
|
||||
"Biết chính xác agent của bạn tốn bao nhiêu.",
|
||||
"Workflow agentic của bạn, trở nên dễ đọc.",
|
||||
"Quan sát. Đo lường. Tối ưu.",
|
||||
"Trung tâm điều hành cho Claude Code.",
|
||||
"Biến mớ hỗn loạn của agent thành bức tranh rõ ràng.",
|
||||
"Bằng chứng cho mọi lần chạy."
|
||||
],
|
||||
"subs": [
|
||||
[
|
||||
"Khả năng quan sát thời gian thực cho mọi phiên Claude Code.",
|
||||
"Token, công cụ, chi phí và workflow, tất cả trực tiếp."
|
||||
],
|
||||
[
|
||||
"Phiên, agent và sự kiện trực tiếp ngay khi diễn ra.",
|
||||
"Phân tích token và chi phí theo từng model, không phải đoán mò."
|
||||
],
|
||||
[
|
||||
"Truy vết mọi lời gọi công cụ trên khắp cây agent của bạn.",
|
||||
"Phát hiện lượt chậm, model tốn kém, lỗi âm thầm."
|
||||
],
|
||||
["Hook truyền thẳng tới một dashboard cục bộ.", "Dữ liệu của bạn không bao giờ rời khỏi máy."],
|
||||
[
|
||||
"Nhìn các orchestrator giao việc cho subagent.",
|
||||
"DAG, xử lý đồng thời và lan truyền lỗi, được trực quan hóa."
|
||||
],
|
||||
[
|
||||
"Theo dõi chi phí đến từng token cache.",
|
||||
"Giá theo từng model với mốc cơ sở nhận biết compaction."
|
||||
],
|
||||
[
|
||||
"Mọi phiên, agent và sự kiện gom về một nơi.",
|
||||
"Tìm kiếm, phát lại và kiểm tra mà không cần rời khỏi phòng."
|
||||
],
|
||||
[
|
||||
"Từ SessionStart đến SessionEnd, được ghi lại trọn vẹn.",
|
||||
"Bao gồm cả compaction, lỗi API và thời lượng từng lượt."
|
||||
],
|
||||
[
|
||||
"Biết model nào đã làm gì, và tốn bao nhiêu.",
|
||||
"Subagent được tính theo giá riêng, không phải giá của orchestrator."
|
||||
],
|
||||
[
|
||||
"Đội workflow và các agent bên trong, được phơi bày.",
|
||||
"Kể cả những lần chạy chẳng bao giờ kích hoạt một hook nào."
|
||||
],
|
||||
[
|
||||
"Cửa sổ cục bộ ưu tiên nhìn vào agent của bạn.",
|
||||
"Không cloud, không tài khoản, không telemetry."
|
||||
],
|
||||
[
|
||||
"Đo năng suất, không phải cảm tính.",
|
||||
"Tốc độ, hiệu quả cache và mức hữu dụng của công cụ, được chấm điểm."
|
||||
],
|
||||
[
|
||||
"Bắt bất thường trước khi hóa đơn bắt được.",
|
||||
"Chi phí ngoại lệ và đột biến token, được cảnh báo sớm."
|
||||
],
|
||||
[
|
||||
"Cấu hình Claude Code của bạn, được lập bản đồ đầy đủ.",
|
||||
"Skill, agent, hook, MCP và bộ nhớ chỉ trong một cái nhìn."
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"title": "Có bản cập nhật cho bảng điều khiển",
|
||||
"lead": "Đã có commit mới trên nhánh remote. Hãy sao chép lệnh bên dưới và chạy trong terminal - bảng điều khiển sẽ không tự cập nhật.",
|
||||
"commitsBehind": "Chậm {{ref}} {{count}} commit",
|
||||
"copy": "Sao chép lệnh",
|
||||
"commandLabel": "Lệnh terminal để cập nhật bảng điều khiển",
|
||||
"copied": "Đã sao chép",
|
||||
"dismiss": "Bỏ qua",
|
||||
"fetchError": "Không kết nối được remote git. Thử lại khi có mạng.",
|
||||
"notGit": "Bản cài đặt này không phải bản git clone; hãy nâng cấp thủ công.",
|
||||
"restartNote": "Sau khi chạy xong lệnh, hãy khởi động lại bảng điều khiển theo cách bạn đã dùng để chạy nó.",
|
||||
"checkNow": "Kiểm tra ngay",
|
||||
"checking": "Đang kiểm tra...",
|
||||
"checkError": "Không thể kiểm tra cập nhật"
|
||||
}
|
||||
@@ -0,0 +1,468 @@
|
||||
{
|
||||
"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",
|
||||
"activeOnly": "Chỉ đang hoạt động",
|
||||
"completed": "Hoàn tất",
|
||||
"runs": {
|
||||
"title": "Quy trình động",
|
||||
"subtitle": "Các nhóm Agent do công cụ Workflow tạo ra, dựng lại từ nhật ký chạy trên đĩa",
|
||||
"sessionTitle": "Quy trình động",
|
||||
"loading": "Đang tải quy trình động…",
|
||||
"empty": "Chưa có quy trình động nào. Các lần chạy của công cụ Workflow hiện ở đây sau khi nhật ký được ghi (khi hoàn tất).",
|
||||
"noAgents": "Không có Agent con nào được ghi cho lần chạy này.",
|
||||
"openSession": "Mở phiên gốc",
|
||||
"filterPhase": "Lọc theo giai đoạn",
|
||||
"clearFilter": "Xóa",
|
||||
"resultsLabel": "Kết quả",
|
||||
"promptLabel": "Lời nhắc",
|
||||
"resultLabel": "Kết quả",
|
||||
"loadingFull": "Đang tải toàn bộ nội dung…",
|
||||
"tokens": "token",
|
||||
"agents_one": "{{count}} Agent",
|
||||
"agents_other": "{{count}} Agent",
|
||||
"tools_one": "{{count}} lệnh gọi công cụ",
|
||||
"tools_other": "{{count}} lệnh gọi công cụ",
|
||||
"status": {
|
||||
"running": "Đang chạy",
|
||||
"working": "Đang chạy",
|
||||
"queued": "Đang chờ",
|
||||
"completed": "Hoàn tất",
|
||||
"done": "Xong",
|
||||
"success": "Xong",
|
||||
"error": "Lỗi",
|
||||
"failed": "Thất bại"
|
||||
},
|
||||
"col": {
|
||||
"agent": "Agent",
|
||||
"phase": "Giai đoạn",
|
||||
"state": "Trạng thái",
|
||||
"tokens": "Token",
|
||||
"tools": "Công cụ",
|
||||
"duration": "Thời lượng"
|
||||
}
|
||||
},
|
||||
"chartInfo": {
|
||||
"labels": {
|
||||
"what": "Biểu đồ thể hiện điều gì",
|
||||
"howToRead": "Cách đọc",
|
||||
"why": "Vì sao quan trọng"
|
||||
},
|
||||
"orchestration": {
|
||||
"what": "DAG nhiều lớp mô tả cách phiên Claude Code phân nhánh: từ phiên gốc, vào main agent, sang từng loại Subagent, qua các lần nén ngữ cảnh, rồi tới kết quả cuối (hoàn tất / lỗi / bỏ dở).",
|
||||
"howToRead": "Mỗi cột là một lớp. Khung node có cùng kích thước; con số là số lần. Cạnh đi từ trái sang phải; cạnh càng dày = lượt chuyển càng phổ biến. Hover bất kỳ node để xem thống kê; bấm để lọc phần còn lại của trang theo node đó.",
|
||||
"why": "Dùng để trả lời 'công việc trong workflow của tôi đi đâu?' - loại Subagent nào chiếm ưu thế, nén ngữ cảnh xảy ra ở đâu, và đường nào kết thúc bằng lỗi so với hoàn tất sạch."
|
||||
},
|
||||
"toolFlow": {
|
||||
"what": "Biểu đồ kiểu Sankey về các lượt chuyển tool gọi liên tiếp trên mọi phiên trong phạm vi. Mỗi băng là một cặp (nguồn → đích) đếm trên toàn bộ phiên.",
|
||||
"howToRead": "Tool xuất hiện thành các thanh màu ở hai bên. Băng nối chúng: độ dày = số lần nguồn chạy ngay trước đích. Hover một băng để xem tỷ trọng-trong-nguồn và tỷ trọng-trong-đích; hover một node để xem tổng lượt dùng và tỷ trọng trên tổng tool.",
|
||||
"why": "Phơi bày những chuỗi tool quen thuộc (ví dụ Read → Edit → Bash). Hữu ích để phát hiện vòng lặp, bước thừa, và sự đơn điệu trong cách Agent dùng tool."
|
||||
},
|
||||
"pipeline": {
|
||||
"what": "Đồ thị có hướng về sự đồng xuất hiện của loại Agent: loại nào hay chạy ngay sau loại nào, và bao nhiêu lần.",
|
||||
"howToRead": "Hình tròn là loại Agent; kích thước mã hóa tổng số spawn. Mũi tên A → B nghĩa là B đã chạy ngay sau A trong cùng phiên, nhãn = số lần. Hover mũi tên để xem tỷ trọng nguồn/đích; hover hình tròn để xem số spawn, số phiên và tỷ lệ thành công. Có thể kéo các node để sắp xếp lại.",
|
||||
"why": "Phơi bày các pipeline ủy quyền có thực mà bạn có thể chưa cố ý thiết kế - ví dụ một code-review agent gần như luôn chạy sau build agent - để bạn chuẩn hóa hoặc đơn giản hóa."
|
||||
},
|
||||
"effectiveness": {
|
||||
"what": "Mỗi loại Subagent có một thẻ với vòng tròn tỷ lệ thành công, tổng số phiên, thời lượng trung bình và sparkline 7 ngày.",
|
||||
"howToRead": "Phần tô của vòng tròn là tỷ lệ thành công; số phần trăm ở giữa cũng vậy. Hai ô cho biết số lượng và thời gian thực trung bình. Sparkline là số phiên mỗi ngày của tuần qua - hover một thanh để xem số liệu ngày đó.",
|
||||
"why": "Kiểm tra sức khỏe nhanh theo Agent: Agent nào đáng tin, Agent nào chậm, và Agent nào đang tăng/giảm sử dụng."
|
||||
},
|
||||
"patterns": {
|
||||
"what": "Danh sách xếp hạng các chuỗi điều phối Agent lặp lại được phát hiện từ trace phiên, kèm thẻ riêng cho phiên đơn lẻ không có Subagent.",
|
||||
"howToRead": "Mỗi dòng là một chuỗi bước (main → sub → sub …). Bên phải hiển thị số phiên khớp và tỷ lệ trên tổng phiên. Bấm vào một mẫu để làm nổi bật.",
|
||||
"why": "Cho thấy các 'hình dáng' công việc tiêu chuẩn trong dự án. Mẫu phổ biến là ứng viên tốt để chuẩn hóa thành workflow hoặc skill có tên gọi."
|
||||
},
|
||||
"modelDelegation": {
|
||||
"what": "Sơ đồ luồng hai cột cho thấy mô hình chính nào ủy quyền cho mô hình Subagent nào, kèm số Agent và tổng token theo node.",
|
||||
"howToRead": "Cột trái = mô hình chính của phiên; cột phải = mô hình dùng bên trong Subagent. Đường nối chỉ các cặp main → Subagent quan sát được. Hover một node để xem tỷ trọng trên tổng Agent, số phiên, tổng token và mô tả họ mô hình (Opus / Sonnet / Haiku).",
|
||||
"why": "Giúp xác nhận phân tầng chi phí/độ trễ - ví dụ main trên Sonnet, Subagent trên Haiku - và phát hiện các trường hợp bị đẩy lên Opus ngoài ý muốn."
|
||||
},
|
||||
"errorPropagation": {
|
||||
"what": "Lỗi tập trung ở đâu trong phân cấp Agent: theo độ sâu (phiên/main vs Subagent trực tiếp vs lồng nhau), theo loại Agent, và theo nhóm lỗi API / phiên.",
|
||||
"howToRead": "Banner trên đầu cho biết tỷ lệ lỗi cấp phiên. Các thanh độ sâu cho biết bao nhiêu lỗi xảy ra ở từng cấp lồng. Danh sách 'loại dễ lỗi' xếp Subagent theo số lỗi. Khối dưới hiển thị tóm tắt lỗi API/phiên.",
|
||||
"why": "Xác định lỗi nằm ở trục điều phối (main agent), ở Subagent cụ thể, hay ở chuỗi lồng sâu - giúp định hướng nơi nên đầu tư retry, kiểm chứng hay viết lại."
|
||||
},
|
||||
"concurrency": {
|
||||
"what": "Thời điểm tổng hợp mà mỗi loại Agent hoạt động so với timeline phiên, kèm số phiên có Agent đó.",
|
||||
"howToRead": "Mỗi dòng là một loại Agent. Chiều dài thanh tỉ lệ với số phiên. Phần trăm bên phải cho biết vị trí bắt đầu và kết thúc trung bình trong một phiên (0% = đầu phiên, 100% = cuối phiên). Hover để xem mô tả mẫu thời gian (đầu phiên, giữa, cuối, ...).",
|
||||
"why": "Cho thấy nhịp của phiên - ví dụ lint ở đầu, code-review ở cuối - và phát hiện Agent chiếm trọn cả phiên."
|
||||
},
|
||||
"complexity": {
|
||||
"what": "Biểu đồ phân tán mỗi phiên: x = thời lượng thực, y = tổng số Agent, kích thước bong bóng = tổng token, màu = trạng thái cuối.",
|
||||
"howToRead": "Bong bóng phía trên-bên phải là phiên dài và nặng Agent. Bong bóng to dùng nhiều token nhất. Đỏ/vàng = kết quả lỗi/bỏ dở. Hover để xem đầy đủ thống kê phiên; bấm để xem chi tiết bên dưới.",
|
||||
"why": "Cho cái nhìn tổng thể về phân bố chi phí/độ phức tạp. Outlier chính là những phiên đáng điều tra vì hành vi bất thường hoặc đột biến chi phí."
|
||||
},
|
||||
"compaction": {
|
||||
"what": "Tần suất Claude kích hoạt nén ngữ cảnh: tổng số sự kiện, token thu hồi và phân bố theo từng phiên.",
|
||||
"howToRead": "Hai ô số liệu cho biết tổng số lần nén và tổng token đã thu hồi. Biểu đồ cột liệt kê các phiên có ít nhất một lần nén, sắp xếp giảm dần theo số lần.",
|
||||
"why": "Nén ngữ cảnh là dấu hiệu áp lực bộ nhớ. Nhiều phiên có số lần nén cao thường có nghĩa workflow nên được chia nhỏ, tóm tắt, hoặc chuyển sang model có ngữ cảnh dài hơn."
|
||||
},
|
||||
"drillIn": {
|
||||
"what": "Khung chi tiết theo phiên: cây Agent đầy đủ, dòng thời gian tool gọi và chuỗi sự kiện thô của phiên bạn chọn.",
|
||||
"howToRead": "Chọn phiên từ dropdown phía trên hoặc bấm một bong bóng trong biểu đồ phân tán. Các tab cho phép chuyển giữa góc nhìn phân cấp (Agent Tree), thời gian (Tool Timeline) và theo trình tự (Event Sequence) của cùng một phiên.",
|
||||
"why": "Khi biểu đồ tổng hợp đánh dấu một phiên đáng ngờ, đây là nơi bạn đọc chính xác chuyện gì đã xảy ra, theo đúng thứ tự."
|
||||
}
|
||||
},
|
||||
"stats": {
|
||||
"avgAgentDepth": "Độ sâu Agent TB",
|
||||
"avgSubagentsPerSession": "Subagent TB / phiên",
|
||||
"agentSuccessRate": "Tỷ lệ thành công Agent",
|
||||
"mostCommonFlow": "Luồng phổ biến nhất",
|
||||
"avgCompactions": "Số lần nén TB",
|
||||
"avgDuration": "Thời lượng TB",
|
||||
"tooltip": {
|
||||
"howCalc": "Cách tính",
|
||||
"whatItMeans": "Con số này nghĩa là gì",
|
||||
"moreInfo": "Giải thích chỉ số này",
|
||||
"valueMeansFmt": "{{value}} {{phrase}} nghĩa là {{interpretation}}",
|
||||
"phrase": {
|
||||
"depth": "độ sâu Agent trung bình",
|
||||
"subagents": "subagent mỗi phiên",
|
||||
"success": "tỷ lệ thành công Agent",
|
||||
"topFlow": "luồng phổ biến nhất",
|
||||
"compactions": "số lần nén ngữ cảnh mỗi phiên",
|
||||
"duration": "thời lượng trung bình"
|
||||
},
|
||||
"calc": {
|
||||
"depth": "Với mỗi phiên, ta lấy mức lồng Agent sâu nhất (chính = 0, subagent trực tiếp = 1, subagent của subagent = 2, …) rồi tính trung bình các giá trị tối đa đó trên toàn bộ phiên trong bộ lọc hiện tại.",
|
||||
"subagents": "Tổng số lượt gọi subagent (mọi cặp Task / SubagentStop) chia cho số phiên trong phạm vi. Tính cả subagent chạy song song hay được spawn lại.",
|
||||
"success": "Trên toàn bộ lượt chạy main + subagent: lượt hoàn tất ÷ (hoàn tất + lỗi + bỏ dở) × 100. Một lượt được tính hoàn tất khi quan sát được Stop / SubagentStop mà không có sự kiện lỗi xen vào.",
|
||||
"topFlow": "Mỗi cặp tool gọi liên tiếp trong một phiên được đếm là một lượt chuyển. Cặp xuất hiện thường xuyên nhất trên mọi phiên hiển thị tại đây dạng 'nguồn → đích'.",
|
||||
"compactions": "Tổng số sự kiện nén ngữ cảnh ghi nhận bởi hook PreCompact / SessionStart(compact), chia cho số phiên trong phạm vi.",
|
||||
"duration": "Thời gian thực tính từ sự kiện đầu tiên (SessionStart) đến sự kiện cuối (Stop / SessionEnd / hook gần nhất) của mỗi phiên, trung bình trên mọi phiên trong phạm vi."
|
||||
},
|
||||
"depth": {
|
||||
"zero": "chưa quan sát được lồng Agent. Mọi phiên chỉ chạy với main agent - không có ủy quyền cho subagent.",
|
||||
"rare": "lồng Agent rất hiếm. Hầu hết phiên dừng ở độ sâu 0 (chỉ main agent); chỉ rất ít phiên đi vào subagent.",
|
||||
"single": "phiên thường ủy quyền cho một lớp subagent (main → subagent), không lồng sâu hơn.",
|
||||
"multi": "điều phối nhiều lớp khá phổ biến - bản thân subagent cũng spawn thêm subagent (main → sub → sub).",
|
||||
"deep": "điều phối lồng sâu là chuẩn mực. Phiên thường xuyên có chuỗi 3 lớp Agent trở lên."
|
||||
},
|
||||
"subagents": {
|
||||
"zero": "không có subagent nào kích hoạt. Phiên hoàn tất hoàn toàn bằng main agent.",
|
||||
"lowFreq": "thực tế: trung bình ~1 subagent mỗi {{count}} phiên. Đa số phiên không spawn subagent nào.",
|
||||
"moderate": "phiên thường ủy quyền cho 1–3 subagent - mức dùng vừa phải.",
|
||||
"heavy": "ủy quyền nhiều - phiên thường xuyên fan-out tới nhiều subagent.",
|
||||
"veryHeavy": "rất nặng về điều phối: phiên trung bình 6+ lượt subagent."
|
||||
},
|
||||
"success": {
|
||||
"perfect": "gần như hoàn hảo. Hầu hết lượt chạy Agent kết thúc bằng Stop sạch - không lỗi, không bỏ dở.",
|
||||
"healthy": "khỏe mạnh. Phần lớn lượt Agent hoàn tất thành công; chỉ thi thoảng có thất bại.",
|
||||
"acceptable": "chấp nhận được, nhưng cần theo dõi xu hướng lỗi - khoảng 1 trong 5–20 lượt thất bại hoặc bị bỏ dở.",
|
||||
"concerning": "đáng lo - một phần đáng kể lượt Agent thất bại. Hãy kiểm tra trang Errors.",
|
||||
"critical": "nghiêm trọng: phần lớn lượt Agent thất bại hoặc bỏ dở. Hãy kiểm tra ErrorPropagation và các bản triển khai gần đây."
|
||||
},
|
||||
"topFlow": {
|
||||
"none": "chưa có đủ cặp tool gọi liên tiếp để xác định cặp nổi bật.",
|
||||
"selfLoop": "{{tool}} thường nối tiếp chính nó - điển hình cho lặp đọc/sửa hoặc chuỗi shell.",
|
||||
"pair": "{{source}} thường chạy ngay trước {{target}}. Hiểu là một thói quen: Agent có xu hướng {{sourceLower}} rồi {{targetLower}} làm bước kế tiếp."
|
||||
},
|
||||
"compactions": {
|
||||
"zero": "chưa có nén ngữ cảnh. Phiên nằm thoải mái trong cửa sổ ngữ cảnh của model.",
|
||||
"lowFreq": "thực tế: ~1 lần nén mỗi {{count}} phiên. Phiên dài là ngoại lệ.",
|
||||
"moderate": "phiên thường gặp nén 1–2 lần - có áp lực ngữ cảnh nhưng vẫn xử lý được.",
|
||||
"high": "tỷ lệ nén cao. Phiên thường chạy đủ lâu để cần nhiều lần nén ngữ cảnh; cân nhắc chia nhỏ công việc."
|
||||
},
|
||||
"duration": {
|
||||
"zero": "chưa có phiên hoàn tất nào - thời lượng là 0.",
|
||||
"veryShort": "phiên rất ngắn (dưới 1 phút) - thường là tool gọi nhanh hoặc prompt một phát.",
|
||||
"short": "phiên ngắn, vài phút. Phù hợp cho công việc tập trung, một tính năng.",
|
||||
"medium": "phiên trung bình (5–30 phút). Nhịp phát triển tiêu chuẩn.",
|
||||
"long": "phiên dài (30–60 phút). Có thể là quy trình nhiều bước hoặc rà soát dài.",
|
||||
"veryLong": "phiên rất dài (1–3 giờ). Coi chừng nén ngữ cảnh và áp lực bộ nhớ.",
|
||||
"marathon": "phiên marathon (3+ giờ). Cân nhắc chia thành nhiều phiên ngắn hơn."
|
||||
}
|
||||
}
|
||||
},
|
||||
"orchestration": {
|
||||
"title": "Đồ thị điều phối Agent",
|
||||
"subtitle": "Mẫu spawn tổng hợp trên mọi phiên - Bấm nút để lọc",
|
||||
"sessions": "Phiên",
|
||||
"mainAgent": "Agent chính",
|
||||
"compactions": "Nén ngữ cảnh",
|
||||
"noData": "Chưa có dữ liệu điều phối",
|
||||
"noDataDesc": "Dữ liệu spawn Agent sẽ xuất hiện khi đã ghi nhận phiên có Subagent.",
|
||||
"legend": "Chú giải",
|
||||
"edgeWeight": "Trọng số cạnh = tần suất",
|
||||
"count": "Số lượng",
|
||||
"otherTypes": "{{count}} loại khác",
|
||||
"ariaLabel": "Đồ thị có hướng không chu trình điều phối Agent",
|
||||
"layers": {
|
||||
"origin": "Nguồn",
|
||||
"mainAgent": "Agent chính",
|
||||
"subagentTypes": "Loại Subagent",
|
||||
"compactions": "Nén ngữ cảnh",
|
||||
"outcomes": "Kết quả"
|
||||
},
|
||||
"tooltip": {
|
||||
"tipClickToFilter": "Mẹo: bấm để lọc phần còn lại của trang theo node này.",
|
||||
"layer": {
|
||||
"session": "Lớp 0 - Nguồn",
|
||||
"main": "Lớp 1 - Agent chính",
|
||||
"subagent": "Lớp 2 - Loại Subagent",
|
||||
"subagentOverflow": "Lớp 2 - Các loại Subagent",
|
||||
"nested": "Lớp 3 - Nén ngữ cảnh",
|
||||
"outcome": "Lớp 4 - Kết quả"
|
||||
},
|
||||
"desc": {
|
||||
"session": "Mỗi đơn vị là một phiên Claude Code khớp với bộ lọc trạng thái hiện tại. Cạnh ra trỏ tới các main agent mà các phiên này đã khởi chạy.",
|
||||
"main": "Lượt chạy Claude cấp cao nhất cho mỗi phiên. Mỗi phiên có đúng một main agent; từ đây đồ thị rẽ nhánh tới các loại Subagent đã được ủy quyền.",
|
||||
"subagent": "Một Subagent chuyên biệt mà main agent đã ủy quyền (ví dụ qua tool Task).",
|
||||
"subagentClean": " Mọi lượt chạy của Subagent này đều hoàn tất sạch.",
|
||||
"subagentAllError": " Mọi lượt chạy của Subagent này đều lỗi - hãy kiểm tra định nghĩa Agent.",
|
||||
"subagentSomeErrors": " {{count}} lượt bị lỗi - xem Error Propagation bên dưới để biết chi tiết.",
|
||||
"subagentOverflow": "Tất cả các loại Subagent còn lại được gộp vào một node để đồ thị dễ đọc. Hover bất kỳ Subagent nào khác để xem số liệu riêng.",
|
||||
"nested": "Sự kiện nén cửa sổ ngữ cảnh. Claude kích hoạt nén khi ngữ cảnh đang chạy gần chạm giới hạn của model; số đếm phản ánh điều đó xảy ra bao nhiêu lần trên các phiên trong phạm vi.",
|
||||
"outcomeCompleted": "Phiên có hook cuối là Stop sạch. Không có sự kiện lỗi nào trước khi kết thúc.",
|
||||
"outcomeError": "Phiên có ít nhất một sự kiện lỗi (lỗi tool, lỗi Subagent hoặc lỗi phiên) trước khi kết thúc.",
|
||||
"outcomeAbandoned": "Phiên dừng mà không có Stop sạch và cũng không có lỗi rõ ràng - thường là đóng giữa chừng.",
|
||||
"outcomeFallback": "Trạng thái cuối của các phiên trong phạm vi, được tính từ sự kiện hook cuối quan sát được."
|
||||
}
|
||||
}
|
||||
},
|
||||
"toolFlow": {
|
||||
"title": "Luồng thực thi công cụ",
|
||||
"subtitle": "Chuỗi liên kết giữa các công cụ - luồng có hướng kiểu Sankey",
|
||||
"noData": "Chưa có dữ liệu luồng công cụ",
|
||||
"transitionCount_one": "{{count}} lượt chuyển",
|
||||
"transitionCount_other": "{{count}} lượt chuyển",
|
||||
"tooltip": {
|
||||
"node": "Node công cụ",
|
||||
"link": "Lượt chuyển công cụ",
|
||||
"totalCalls": "Tổng số lượt gọi",
|
||||
"shareOfAll": "Tỷ trọng trên tổng dùng tool",
|
||||
"transitionsObserved": "Số lượt chuyển quan sát",
|
||||
"shareOfSourceFmt": "Tỷ trọng {{source}} → kế tiếp",
|
||||
"shareOfTargetFmt": "Tỷ trọng trước → {{target}}",
|
||||
"nodeDescFmt": "Chiều cao thanh thể hiện tần suất {{name}} xuất hiện trên mọi phiên trong phạm vi. Băng đi vào bên trái cho thấy tool chạy trước {{name}}; băng đi ra bên phải cho thấy tool chạy sau.",
|
||||
"linkDescFmt": "Trên mọi phiên, đây là số lần {{source}} chạy ngay trước {{target}}. Băng càng dày = lượt chuyển càng phổ biến; phần trăm cho biết bước này chiếm tỷ trọng bao nhiêu trong luồng ra/vào của mỗi tool."
|
||||
}
|
||||
},
|
||||
"pipeline": {
|
||||
"title": "Đồ thị pipeline Agent",
|
||||
"subtitle": "Quy trình có hướng - loại Agent nào chạy sau loại nào, kèm tần suất",
|
||||
"noData": "Chưa có dữ liệu pipeline",
|
||||
"noDataDesc": "Các cạnh quy trình sẽ xuất hiện khi loại Agent chạy tuần tự qua nhiều phiên.",
|
||||
"legend": "Chú giải",
|
||||
"legendDesc": "A chạy trước B (kèm số lần)",
|
||||
"frequency": "Tần suất",
|
||||
"meaning": "Ý nghĩa",
|
||||
"times": " lần",
|
||||
"ranAfter": " chạy sau ",
|
||||
"spawns": " lần spawn",
|
||||
"spawned": "Đã spawn",
|
||||
"inSessions": "Trong các phiên",
|
||||
"ariaLabel": "Đồ thị pipeline Agent",
|
||||
"tooltip": {
|
||||
"agentType": "Loại Agent",
|
||||
"edge": "Cạnh tuần tự",
|
||||
"shareOfAllSpawns": "Tỷ trọng trên tổng spawn",
|
||||
"sequentialPairs": "Cặp tuần tự",
|
||||
"totalSpawnsFmt": "Tổng spawn {{id}}",
|
||||
"shareOfSrcFmt": "Tỷ trọng {{source}} → kế tiếp",
|
||||
"shareOfTgtFmt": "Tỷ trọng trước → {{target}}",
|
||||
"edgeDescFmt": "{{target}} chạy ngay sau {{source}} {{count}} lần trên toàn bộ phiên. Mũi tên càng dày, hand-off càng thường xuyên. Dùng để phát hiện chuỗi ủy quyền quen thuộc trong quy trình của bạn.",
|
||||
"nodeDescFmt": "{{id}} đã chạy {{total}} lần trên {{sessions}} phiên; tỷ lệ thành công {{rate}}% ({{health}}). Kích thước hình tròn mã hóa tổng số spawn; mũi tên cho biết loại Agent nào hay chạy trước/sau nó.",
|
||||
"health": {
|
||||
"perfect": "gần như hoàn hảo",
|
||||
"healthy": "khỏe mạnh",
|
||||
"shaky": "hơi lung lay",
|
||||
"failing": "thường xuyên thất bại"
|
||||
}
|
||||
}
|
||||
},
|
||||
"effectiveness": {
|
||||
"title": "Hiệu quả Subagent",
|
||||
"subtitle": "Chỉ số hiệu năng theo từng loại Agent",
|
||||
"success": "Thành công",
|
||||
"sessions": "Phiên",
|
||||
"avgDuration": "Thời lượng TB",
|
||||
"weeklyActivity": "Hoạt động theo tuần",
|
||||
"noData": "Chưa có dữ liệu Subagent",
|
||||
"successRateAria": "Tỷ lệ thành công: {{rate}}%",
|
||||
"weeklyActivityAria": "Biểu đồ tia hoạt động theo tuần",
|
||||
"sessionCount_one": "{{count}} phiên",
|
||||
"sessionCount_other": "{{count}} phiên"
|
||||
},
|
||||
"patterns": {
|
||||
"title": "Mẫu quy trình phát hiện được",
|
||||
"subtitle": "Chuỗi điều phối Agent thường gặp",
|
||||
"noData": "Chưa phát hiện mẫu nào",
|
||||
"noDataDesc": "Mẫu sẽ xuất hiện khi nhiều phiên có cùng chuỗi Agent.",
|
||||
"solo": "đơn lẻ (không có Subagent)",
|
||||
"label": "Mẫu quy trình",
|
||||
"detail": {
|
||||
"clickHint": "Bấm để xem chi tiết",
|
||||
"stepsHeading": "Chuỗi bước đầy đủ",
|
||||
"statsHeading": "Thống kê",
|
||||
"stepsCount_one": "{{count}} bước",
|
||||
"stepsCount_other": "{{count}} bước",
|
||||
"uniqueAgents": "Số loại Agent khác nhau",
|
||||
"occurrences": "Số phiên khớp mẫu này",
|
||||
"shareOfSessions": "Tỷ trọng trên tổng phiên",
|
||||
"narrativeHeading": "Ý nghĩa của mẫu này",
|
||||
"suggestionHeading": "Gợi ý",
|
||||
"narrative": {
|
||||
"soloFmt": "Phiên chỉ chạy {{first}} - không ủy quyền cho loại Agent nào khác.",
|
||||
"twoStepFmt": "Hand-off hai bước: {{first}} ủy quyền thẳng cho {{last}}, không có nhánh nào khác.",
|
||||
"shortFmt": "Chuỗi {{count}} bước, bắt đầu ở {{first}} và kết thúc ở {{last}}.",
|
||||
"longFmt": "Chuỗi dài {{count}} bước - bắt đầu ở {{first}}, đi qua nhiều Agent, rồi dừng ở {{last}}.",
|
||||
"loopHintFmt": " {{agent}} xuất hiện nhiều lần trong chuỗi này - điển hình cho vòng lặp kiểm tra hoặc sửa lại.",
|
||||
"dominant": " Đây là quy trình chủ đạo trong dự án - hơn một nửa số phiên đi theo.",
|
||||
"common": " Là quy trình phổ biến, chiếm khoảng một phần tư số phiên.",
|
||||
"regular": " Là quy trình được nhận diện, nhưng chưa phải đa số.",
|
||||
"niche": " Là mẫu hiếm, chỉ thi thoảng mới xuất hiện."
|
||||
},
|
||||
"suggestion": {
|
||||
"solo": "Phiên đơn lẻ - liệu thêm code-reviewer hay test-runner Subagent có cải thiện chất lượng không?",
|
||||
"shortChain": "Chuỗi ngắn. Nếu lặp lại nhiều, hãy đặt tên thành slash command, skill hoặc workflow để dễ tái sử dụng.",
|
||||
"mediumChain": "Đủ phổ biến để chuẩn hóa. Một workflow/template có tên sẽ giúp tái sử dụng dễ dàng.",
|
||||
"longChain": "Chuỗi dài - xem xét liệu mọi bước có thực sự cần thiết, hay có thể gộp/bỏ bớt một số Agent.",
|
||||
"loop": "Phát hiện vòng lặp. Hãy xác nhận bước lặp là kiểm tra có chủ đích, không phải retry âm thầm một lệnh đang lỗi."
|
||||
}
|
||||
}
|
||||
},
|
||||
"modelDelegation": {
|
||||
"title": "Luồng ủy quyền mô hình",
|
||||
"subtitle": "Cách các mô hình đi qua phân cấp Agent",
|
||||
"mainModels": "MÔ HÌNH CHÍNH",
|
||||
"subagentModels": "MÔ HÌNH TÁC TỬ PHỤ",
|
||||
"noData": "Chưa có dữ liệu ủy quyền mô hình",
|
||||
"agentsCount_one": "{{count}} Agent",
|
||||
"agentsCount_other": "{{count}} Agent",
|
||||
"tokensCount": "{{tokens}} token",
|
||||
"sessionsCount_one": "{{count}} phiên",
|
||||
"sessionsCount_other": "{{count}} phiên",
|
||||
"ariaLabel": "Sơ đồ luồng ủy quyền mô hình",
|
||||
"tooltip": {
|
||||
"mainModel": "Mô hình chính",
|
||||
"subagentModel": "Mô hình Subagent",
|
||||
"agentRuns": "Lượt chạy Agent",
|
||||
"shareOfAll": "Tỷ trọng trên tổng Agent",
|
||||
"sessionsOnModel": "Phiên dùng mô hình này",
|
||||
"totalTokens": "Tổng token",
|
||||
"family": {
|
||||
"opus": "Opus - bậc khả năng cao nhất; tốt cho lý luận phức tạp, ngữ cảnh dài nhất, đắt nhất theo token.",
|
||||
"sonnet": "Sonnet - bậc cân bằng; mặc định tốt cho hầu hết quy trình code và dùng tool.",
|
||||
"haiku": "Haiku - bậc nhanh nhất, rẻ nhất; phù hợp cho Subagent ngắn, nhạy cảm độ trễ.",
|
||||
"other": "Mô hình ngoài Anthropic hoặc không nhận dạng được - không thuộc bộ Opus/Sonnet/Haiku tiêu chuẩn."
|
||||
},
|
||||
"lines": {
|
||||
"main": "Các đường bên phải cho thấy mô hình Subagent mà mô hình chính này đã ủy quyền.",
|
||||
"sub": "Các đường bên trái cho thấy mô hình chính nào đã ủy quyền cho mô hình Subagent này."
|
||||
}
|
||||
}
|
||||
},
|
||||
"errorPropagation": {
|
||||
"title": "Bản đồ lan truyền lỗi",
|
||||
"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",
|
||||
"errorsByDepth": "Lỗi theo độ sâu phân cấp",
|
||||
"errorProneTypes": "Loại Agent dễ lỗi",
|
||||
"apiSessionErrors": "Lỗi API & phiên",
|
||||
"depthLabels": {
|
||||
"sessionMain": "Phiên / Agent chính",
|
||||
"directSubagent": "Subagent trực tiếp",
|
||||
"nested": "Lồng nhau (độ sâu 2)",
|
||||
"deep": "Sâu (độ sâu 3+)"
|
||||
}
|
||||
},
|
||||
"concurrency": {
|
||||
"title": "Dòng thời gian đồng thời Agent",
|
||||
"subtitle": "Mẫu thực thi song song - thể hiện mức chồng lấp theo thời gian",
|
||||
"noData": "Chưa có dữ liệu đồng thời",
|
||||
"noDataDesc": "Dữ liệu đồng thời sẽ xuất hiện khi đã ghi nhận phiên có Subagent.",
|
||||
"sessions": "Phiên",
|
||||
"timing": "Thời gian",
|
||||
"max": " tối đa",
|
||||
"sessionInfo_one": "{{count}} phiên - hoạt động từ {{from}}%-{{to}}% thời lượng phiên",
|
||||
"sessionInfo_other": "{{count}} phiên - hoạt động từ {{from}}%-{{to}}% thời lượng phiên",
|
||||
"tooltip": {
|
||||
"lane": "Làn đồng thời",
|
||||
"sessionsWith": "Phiên có Agent này",
|
||||
"avgStart": "Bắt đầu TB trong phiên",
|
||||
"avgEnd": "Kết thúc TB trong phiên",
|
||||
"barHint": "Chiều dài thanh tỉ lệ với số phiên có loại Agent này. Phần trăm thời gian là trung bình trên các phiên đó.",
|
||||
"timing": {
|
||||
"wholeSession": "Hoạt động xuyên gần như cả phiên - chạy từ đầu tới cuối.",
|
||||
"frontLoadedFmt": "Dồn về đầu: thường hoạt động từ đầu phiên tới khoảng ~{{end}}% chặng đường.",
|
||||
"backLoadedFmt": "Dồn về cuối: thường khởi động quanh {{start}}% phiên và duy trì tới hết.",
|
||||
"tightFmt": "Phạm vi hẹp: chạy trong dải hẹp từ {{start}}% đến {{end}}% timeline phiên.",
|
||||
"midSessionFmt": "Công việc giữa phiên: chạy khoảng từ {{start}}% đến {{end}}% timeline phiên."
|
||||
}
|
||||
}
|
||||
},
|
||||
"complexity": {
|
||||
"title": "Biểu đồ phân tán độ phức tạp phiên",
|
||||
"subtitle": "Thời lượng vs số Agent vs token - kích thước bong bóng = lượng token",
|
||||
"noData": "Chưa có dữ liệu độ phức tạp phiên",
|
||||
"noDataDesc": "Phiên sẽ xuất hiện ở đây sau khi hoàn tất với hoạt động Agent.",
|
||||
"duration": "Thời lượng",
|
||||
"agentCount": "Số Agent",
|
||||
"ariaLabel": "Biểu đồ phân tán độ phức tạp phiên",
|
||||
"tooltip": {
|
||||
"duration": "Thời lượng:",
|
||||
"agents": "Agent:",
|
||||
"subagents": "Subagent:",
|
||||
"tokens": "Token:",
|
||||
"model": "Mô hình:"
|
||||
}
|
||||
},
|
||||
"compaction": {
|
||||
"title": "Phân tích tác động nén ngữ cảnh",
|
||||
"subtitle": "Cách nén ngữ cảnh phân bố trên các phiên của bạn",
|
||||
"help": "Khi cửa sổ ngữ cảnh của một phiên đầy, Claude Code nén phần lịch sử cũ thành bản tóm tắt. Mỗi lần nén dưới đây là một sự kiện như vậy.",
|
||||
"noData": "Chưa ghi nhận nén ngữ cảnh",
|
||||
"totalCompactions": "Tổng số lần nén",
|
||||
"sessionsAffected": "Phiên bị ảnh hưởng",
|
||||
"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",
|
||||
"summary": "{{affected}} trên {{total}} phiên ({{pct}}%) đã dùng nén ngữ cảnh.",
|
||||
"tokensFreed": "Nén đã giải phóng ~{{tokens}} token ngữ cảnh.",
|
||||
"ariaLabel": "Số phiên theo số lần nén",
|
||||
"tipTitle": "Nén {{count}} lần",
|
||||
"tipDetail": "{{sessions}} phiên · {{pct}}% số phiên bị ảnh hưởng"
|
||||
},
|
||||
"drillIn": {
|
||||
"title": "Phân tích chi tiết phiên",
|
||||
"subtitle": "Chọn phiên từ biểu đồ phân tán hoặc dùng danh sách để khám phá",
|
||||
"searchPlaceholder": "Tìm phiên...",
|
||||
"noSessionSelected": "Chưa chọn phiên",
|
||||
"noSessionDesc": "Hãy tìm và chọn phiên phía trên, hoặc bấm vào một bong bóng trong biểu đồ để xem cây Agent, dòng thời gian công cụ và chuỗi sự kiện.",
|
||||
"failedLoad": "Không thể tải phiên",
|
||||
"loading": "Đang tải...",
|
||||
"loadMore": "Tải thêm",
|
||||
"noMatch": "Không có phiên nào khớp với tìm kiếm.",
|
||||
"notFound": "Không tìm thấy phiên.",
|
||||
"unknownModel": "mô hình không xác định",
|
||||
"closePanel": "Đóng bảng phân tích chi tiết",
|
||||
"close": "Đóng",
|
||||
"tabs": {
|
||||
"agentTree": "Cây Agent",
|
||||
"toolTimeline": "Dòng thời gian công cụ",
|
||||
"eventSequence": "Chuỗi sự kiện"
|
||||
},
|
||||
"noAgentTree": "Không có dữ liệu cây Agent.",
|
||||
"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)"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user