feat: right-click menus everywhere, workspace/session cost, long-term DB safety
Right-click menus: one portal shell (components/ContextMenu.tsx) for every item with actions - sidebar/Recents/archived session rows (SessionMenu), console tabs, pane headers, the Changes panel's files/tree/commits, the workspace home, sessions outside a workspace (SessionRowMenu: Sessions table, Dashboard, Activity, Workflow runs), prompt images, every Settings list and every Claude Code/Codex config list (FileItemMenu). Buttons stay; a delete keeps its button's confirm; the shell stops portal clicks from reaching the card that opened it. Status bar: Workspace $ and Session $ on the Workspace page, from ?lane= on GET /api/pricing/cost and the focused/replayed session's cost. Database, no data dropped: synchronous=NORMAL, journal_size_limit 64 MB, hourly PASSIVE checkpoint + PRAGMA optimize, idx_events_session_created (replacing the redundant idx_events_session), watchdog reads sessions.transcript_path, transcript parsed before the hook's write transaction, GET /api/sessions/:id?events=0 for the web page (reloads only on its own session, debounced), streamed export, transactional clear-data and chunked cleanup, subagent import reads tool_use_ids once, runtime logs rotated past 5 MB.
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
"viewSource": "View source",
|
||||
"close": "Close",
|
||||
"copyPath": "Copy path",
|
||||
"copyName": "Copy name",
|
||||
"copied": "Copied",
|
||||
"truncated": "(truncated for preview)",
|
||||
"size": "Size",
|
||||
@@ -266,6 +267,7 @@
|
||||
"saving": "Saving…",
|
||||
"renameLabel": "Profile name",
|
||||
"renameHint": "Click to rename",
|
||||
"rename": "Rename",
|
||||
"renameSuccess": "Renamed to \"{{name}}\"."
|
||||
},
|
||||
"explain": {
|
||||
|
||||
@@ -38,7 +38,9 @@
|
||||
"newButton": "New",
|
||||
"viewButton": "View source",
|
||||
"editButton": "Edit",
|
||||
"deleteButton": "Delete"
|
||||
"deleteButton": "Delete",
|
||||
"copyPath": "Copy path",
|
||||
"copyName": "Copy name"
|
||||
},
|
||||
"edit": {
|
||||
"saveSuccess": "Saved · {{path}}",
|
||||
|
||||
@@ -402,5 +402,18 @@
|
||||
"panes.newTerminal": "New terminal",
|
||||
"panes.close": "Close pane (its session keeps running as a tab)",
|
||||
"panes.resize": "Resize panes",
|
||||
"tabs.home": "Workspace home"
|
||||
"tabs.home": "Workspace home",
|
||||
"sessionMenu.open": "Open",
|
||||
"sessionMenu.openSplit": "Open in split",
|
||||
"sessionMenu.details": "Session details",
|
||||
"sessionMenu.copyId": "Copy session ID",
|
||||
"sessionMenu.archive": "Archive",
|
||||
"panes.show": "Show {{name}} here",
|
||||
"panes.splitNew.right": "Split right with a new terminal",
|
||||
"panes.splitNew.bottom": "Split down with a new terminal",
|
||||
"panes.closeShort": "Close pane",
|
||||
"changes.copyPath": "Copy relative path",
|
||||
"changes.viewCommit": "View commit",
|
||||
"changes.copySha": "Copy commit SHA",
|
||||
"changes.copySubject": "Copy commit message"
|
||||
}
|
||||
|
||||
@@ -64,7 +64,9 @@
|
||||
"statusBar": {
|
||||
"running": "{{count}} running",
|
||||
"needYou": "{{count}} need you",
|
||||
"today": "Today {{cost}}"
|
||||
"today": "Today {{cost}}",
|
||||
"workspace": "Workspace {{cost}}",
|
||||
"session": "Session {{cost}}"
|
||||
},
|
||||
"version": "Version"
|
||||
}
|
||||
|
||||
@@ -146,6 +146,7 @@
|
||||
"uploading": "Uploading image…",
|
||||
"failed": "Could not attach the image",
|
||||
"imagesOnly": "Only images can be dropped here",
|
||||
"remove": "Remove image"
|
||||
"remove": "Remove image",
|
||||
"view": "View image"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,5 +40,11 @@
|
||||
"transcriptNotFound": "Conversation transcript not found for this agent. The transcript file may be missing or not yet linked."
|
||||
},
|
||||
"remoteSourceBadgeTitle": "Collected from a remote machine",
|
||||
"toolBadgeTitle": "Recorded by {{tool}}"
|
||||
"toolBadgeTitle": "Recorded by {{tool}}",
|
||||
"menu": {
|
||||
"details": "Open session details",
|
||||
"inWorkspace": "Open in its workspace",
|
||||
"copyId": "Copy session ID",
|
||||
"copyFolder": "Copy folder path"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -735,5 +735,13 @@
|
||||
"en": "English",
|
||||
"vi": "Tiếng Việt"
|
||||
}
|
||||
},
|
||||
"rowMenu": {
|
||||
"copyHost": "Copy host",
|
||||
"copyUrl": "Copy endpoint",
|
||||
"copyPattern": "Copy model pattern",
|
||||
"copyPath": "Copy path",
|
||||
"enable": "Enable",
|
||||
"disable": "Disable"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"viewSource": "Xem nguồn",
|
||||
"close": "Đóng",
|
||||
"copyPath": "Sao chép đường dẫn",
|
||||
"copyName": "Sao chép tên",
|
||||
"copied": "Đã sao chép",
|
||||
"truncated": "(đã cắt bớt để xem trước)",
|
||||
"size": "Kích thước",
|
||||
@@ -261,6 +262,7 @@
|
||||
"saving": "Đang lưu…",
|
||||
"renameLabel": "Tên profile",
|
||||
"renameHint": "Bấm để đổi tên",
|
||||
"rename": "Đổi tên",
|
||||
"renameSuccess": "Đã đổi tên thành \"{{name}}\"."
|
||||
},
|
||||
"explain": {
|
||||
|
||||
@@ -38,7 +38,9 @@
|
||||
"newButton": "Mới",
|
||||
"viewButton": "Xem nguồn",
|
||||
"editButton": "Sửa",
|
||||
"deleteButton": "Xóa"
|
||||
"deleteButton": "Xóa",
|
||||
"copyPath": "Sao chép đường dẫn",
|
||||
"copyName": "Sao chép tên"
|
||||
},
|
||||
"edit": {
|
||||
"saveSuccess": "Đã lưu · {{path}}",
|
||||
|
||||
@@ -402,5 +402,18 @@
|
||||
"panes.newTerminal": "Terminal mới",
|
||||
"panes.close": "Đóng pane (session vẫn chạy dưới dạng tab)",
|
||||
"panes.resize": "Đổi kích thước pane",
|
||||
"tabs.home": "Trang chủ workspace"
|
||||
"tabs.home": "Trang chủ workspace",
|
||||
"sessionMenu.open": "Mở",
|
||||
"sessionMenu.openSplit": "Mở ở pane chia đôi",
|
||||
"sessionMenu.details": "Chi tiết session",
|
||||
"sessionMenu.copyId": "Sao chép ID session",
|
||||
"sessionMenu.archive": "Lưu trữ",
|
||||
"panes.show": "Hiện {{name}} ở đây",
|
||||
"panes.splitNew.right": "Chia sang phải với terminal mới",
|
||||
"panes.splitNew.bottom": "Chia xuống dưới với terminal mới",
|
||||
"panes.closeShort": "Đóng pane",
|
||||
"changes.copyPath": "Sao chép đường dẫn tương đối",
|
||||
"changes.viewCommit": "Xem commit",
|
||||
"changes.copySha": "Sao chép SHA của commit",
|
||||
"changes.copySubject": "Sao chép commit message"
|
||||
}
|
||||
|
||||
@@ -64,7 +64,9 @@
|
||||
"statusBar": {
|
||||
"running": "{{count}} đang chạy",
|
||||
"needYou": "{{count}} cần bạn",
|
||||
"today": "Hôm nay {{cost}}"
|
||||
"today": "Hôm nay {{cost}}",
|
||||
"workspace": "Workspace {{cost}}",
|
||||
"session": "Session {{cost}}"
|
||||
},
|
||||
"version": "Phiên bản"
|
||||
}
|
||||
|
||||
@@ -145,6 +145,7 @@
|
||||
"uploading": "Đang tải ảnh lên…",
|
||||
"failed": "Không đính kèm được ảnh",
|
||||
"imagesOnly": "Chỉ thả được ảnh vào đây",
|
||||
"remove": "Bỏ ảnh"
|
||||
"remove": "Bỏ ảnh",
|
||||
"view": "Xem ảnh"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,5 +39,11 @@
|
||||
"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."
|
||||
},
|
||||
"toolBadgeTitle": "Ghi lại bởi {{tool}}"
|
||||
"toolBadgeTitle": "Ghi lại bởi {{tool}}",
|
||||
"menu": {
|
||||
"details": "Mở chi tiết session",
|
||||
"inWorkspace": "Mở trong workspace của nó",
|
||||
"copyId": "Sao chép ID session",
|
||||
"copyFolder": "Sao chép đường dẫn thư mục"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -735,5 +735,13 @@
|
||||
"en": "English",
|
||||
"vi": "Tiếng Việt"
|
||||
}
|
||||
},
|
||||
"rowMenu": {
|
||||
"copyHost": "Sao chép host",
|
||||
"copyUrl": "Sao chép endpoint",
|
||||
"copyPattern": "Sao chép mẫu mô hình",
|
||||
"copyPath": "Sao chép đường dẫn",
|
||||
"enable": "Bật",
|
||||
"disable": "Tắt"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user