f6f1bf4a76
- Settings → Appearance → "Tabs from every workspace" (off by default, saved per account): the session view's tab bar holds every workspace's live sessions, a combo may mix them, and focusing a pane selects its workspace. Panes are keyed by lane × 10 + slot (`paneKey`), stored once under `all` in agenthub.workspace.paneLayout. - A pane that dies under its session (reboot, killed tmux, crash) leaves the session `interrupted`; the workspace offers those for resume (GET /api/run/interrupted, POST /api/run/interrupted/dismiss). - Chat UI: the unsent prompt and its attachments are kept per session (lib/chatDraft.ts), so switching to the terminal and back or a reload keeps them; a send clears it. Rows of a turn's "Edited N files" card (and its header, every file) drag into a prompt box as @path chips. - Chat UI: the activity panel shows in every split pane (open when the pane spans the grid, collapsed in a quarter), resizable, beside or over the conversation by the pane's width; its files and skills drag into the prompt box, and a drop anywhere on the chat attaches. - Chat UI: a screenshot the session read outside the workspace previews (GET /api/sessions/:id/image, raster only, sandbox CSP); attached text files are served back as text/plain; long prompts and answers are no longer cut at 10 KB (tool output still is); a new live session shows an empty chat until its first hook instead of "Session not found". - Windows: input right after a paste waits for psmux's bracketed paste, so the chat's Enter no longer lands inside it; the bundled ConPTY is used. - Changes panel: a Workspace context fold (instructions, files, folders). Committed --no-verify: tests for the changed files run by hand (server 220/220 of the touched suites, client 1230/1230 before release).
133 lines
6.0 KiB
JSON
133 lines
6.0 KiB
JSON
{
|
|
"emptyPane": "Pane này chưa có phiên nào. Hãy tạo phiên từ ô prompt của workspace.",
|
|
"actions": {
|
|
"newSession": "Phiên mới"
|
|
},
|
|
"autocomplete": {
|
|
"fileHint": "Gõ @ để tham chiếu file",
|
|
"noMatches": "Không có",
|
|
"slashHint": "Gõ / để tìm lệnh slash"
|
|
},
|
|
"binary": {
|
|
"missing": "Không thấy CLI `{{cli}}` trong PATH. Cài đặt {{tool}} hoặc đặt PATH."
|
|
},
|
|
"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",
|
|
"laneCreateFailed": "Không thể tạo workspace: {{message}}",
|
|
"noLaneSelected": "Chưa chọn workspace hoặc không thể tạo workspace",
|
|
"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}}"
|
|
},
|
|
"fields": {
|
|
"approval": "Phê duyệt",
|
|
"approvalNever": "Không bao giờ",
|
|
"approvalOnRequest": "Khi cần",
|
|
"cwdGroups": {
|
|
"dashboard": "Máy chủ dashboard",
|
|
"home": "Home",
|
|
"repo": "Repo nguồn",
|
|
"recent": "Gần đây - Claude Code đã dùng"
|
|
},
|
|
"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",
|
|
"moreModels": "Thêm model",
|
|
"effortDefault": "Mặc định",
|
|
"effortFaster": "Nhanh hơn",
|
|
"effortSmarter": "Kỹ hơn",
|
|
"effortReset": "Về mặc định của model",
|
|
"effortDefaultHint": "Model tự quyết — không truyền --effort",
|
|
"modelCustom": "Tuỳ chỉnh…",
|
|
"modelCustomPlaceholder": "model id (vd: claude-opus-5)",
|
|
"modelInheritLabel": "Kế thừa từ settings",
|
|
"permissionAcceptEdits": "acceptEdits (sửa file không hỏi)",
|
|
"permissionAuto": "auto (khuyên dùng - chỉ hỏi khi hành động rủi ro)",
|
|
"permissionBypass": "bypassPermissions (NGUY HIỂM - cho phép tất cả mà không hỏi)",
|
|
"bypass": "Bỏ qua xin quyền cho lần chạy này",
|
|
"permissionDefault": "default (prompt tương tác - headless sẽ treo)",
|
|
"permissionMode": "Chế độ quyền",
|
|
"permissionPlan": "plan (chỉ đọc, lập kế hoạch)",
|
|
"sandbox": "Sandbox",
|
|
"sandboxFullAccess": "Truy cập đầy đủ (nguy hiểm)",
|
|
"sandboxReadOnly": "Chỉ đọc",
|
|
"sandboxWorkspaceWrite": "Ghi vào workspace"
|
|
},
|
|
"hint": {
|
|
"permissionWarning": "bypassPermissions cho phép gọi mọi tool không cần xác nhận. Chỉ dùng cho prompt bạn tin tưởng.",
|
|
"bypassWarning": "{{tool}} sẽ chạy mọi lệnh và sửa mọi file mà không hỏi. Chỉ dùng với prompt và thư mục bạn tin tưởng.",
|
|
"sandboxWarning": "Codex sẽ chạy lệnh mà không có sandbox."
|
|
},
|
|
"drop": {
|
|
"hint": "Thả file hoặc ảnh để đính kèm",
|
|
"uploading": "Đang tải lên…",
|
|
"failed": "Không đính kèm được file",
|
|
"remove": "Bỏ đính kèm",
|
|
"view": "Xem ảnh"
|
|
},
|
|
"terminal": {
|
|
"ended": "[phiên đã kết thúc, mã thoát {{code}}]",
|
|
"reconnecting": "Đang kết nối lại… phím gõ chưa tới được phiên cho tới khi terminal kết nối lại.",
|
|
"keyboardHint": "Terminal. Nhấn Ctrl+M để bật/tắt chế độ Tab chuyển focus ra khỏi terminal; Ctrl+Shift+F (Cmd+F trên macOS) để tìm chữ.",
|
|
"tabMoves": "Tab chuyển focus — Ctrl+M để trả Tab lại cho terminal",
|
|
"selectHint": "Shift+kéo để chọn chữ trong trình duyệt; kéo thường sẽ chọn trong tmux và sao chép khi thả chuột.",
|
|
"dismissHint": "Bỏ qua",
|
|
"find": "Tìm trong terminal",
|
|
"findPrev": "Kết quả trước",
|
|
"findNext": "Kết quả sau",
|
|
"findClose": "Đóng tìm kiếm"
|
|
},
|
|
"chat": {
|
|
"placeholder": "Viết tin nhắn…",
|
|
"send": "Gửi",
|
|
"notSent": "Terminal chưa kết nối — tin nhắn chưa được gửi.",
|
|
"stop": "Ngưng",
|
|
"notStopped": "Terminal chưa kết nối — chưa ngưng được.",
|
|
"add": "Thêm file, skill…",
|
|
"upload": "Tải lên hoặc thêm file",
|
|
"projectFiles": "File trong dự án",
|
|
"contextFiles": "File ngữ cảnh",
|
|
"recentUploads": "Đã tải lên gần đây",
|
|
"searchFiles": "Tìm file và thư mục…",
|
|
"skills": "Skills",
|
|
"plugins": "Plugins",
|
|
"manageSkills": "Quản lý skills",
|
|
"managePlugins": "Quản lý plugins",
|
|
"none": "Chưa có gì",
|
|
"fromPlugin": "Plugin {{name}}",
|
|
"modeFailed": "Không đổi được permission mode: {{message}}",
|
|
"outline": {
|
|
"progress": "Tiến độ",
|
|
"outputs": "Kết quả",
|
|
"connectors": "Kết nối",
|
|
"empty": "Chưa có gì",
|
|
"resize": "Kéo giãn thanh bên",
|
|
"hide": "Ẩn thanh bên",
|
|
"show": "Bảng hoạt động",
|
|
"copyPath": "Sao chép đường dẫn: {{path}}",
|
|
"panel": "Bảng hoạt động của phiên",
|
|
"used": "Đã dùng trong phiên",
|
|
"uploads": "Tệp tải lên",
|
|
"files": "Tệp đã đọc",
|
|
"memory": "Bộ nhớ",
|
|
"skills": "Skills",
|
|
"close": "Đóng",
|
|
"noPreview": "Không xem trước được tệp này ở đây",
|
|
"truncated": "Chỉ hiện phần đầu của tệp"
|
|
}
|
|
},
|
|
"interrupted": {
|
|
"title": "Tiếp tục các phiên bị gián đoạn?",
|
|
"message": "Các phiên này dừng ngoài ý muốn (tắt máy ngang, tmux bị tắt, hoặc CLI bị lỗi). Đánh dấu những phiên muốn tiếp tục — mỗi phiên sẽ đọc lại toàn bộ hội thoại.",
|
|
"resume_one": "Tiếp tục {{count}} phiên",
|
|
"resume_other": "Tiếp tục {{count}} phiên",
|
|
"none": "Không tiếp tục",
|
|
"failed": "Không tiếp tục được {{name}}: {{message}}"
|
|
}
|
|
}
|