chore: v2.8.23 — workspace groups, inner repos in Changes (opt-in), sub-agent tokens counted

Workspace groups: named, foldable, ordered sidebar sections kept per
account (agenthub.workspace.groups); a workspace joins one from its menu,
a drop on the header, a drag under a row, or Alt+Up/Down past a group's
edge; headers drag to reorder; a folded header shows its most urgent
state; New workspace in this group; fold/unfold all.

Inner repos: GET /api/lanes/:id/repos + ?repo= on git/fs routes; the
Changes panel shows a parent folder's repos only when Settings -> Git ->
Changes panel turns it on (agenthub.changes.innerRepos, off by default).

Cost: the hook writer adds a session's sub-agent transcripts to its
tokens and hours (server/lib/subagent-usage.js) — a sub-agent on the
session's own model was never counted live (~8% of a week here); an
imported session is re-raised on every pass, so a claude -p run first
seen with an empty transcript no longer stays at $0 (~10%). A one-time
raise-only catch-up (user_version 5) re-reads ~/.claude/projects.

Also: omp install script may redirect to its exact install.redirect URL
(#85, repo-links test exempts it), native paste in the terminal.
This commit is contained in:
2026-10-23 16:41:45 +07:00
parent 65a001dad4
commit c8bc4a95a9
54 changed files with 2521 additions and 112 deletions
+19 -1
View File
@@ -657,5 +657,23 @@
"fx.readOnly": "Read-only",
"fx.readOnlyHint": "This is another user's home: you can view, copy and download, not change it.",
"fx.homeEmpty": "Nothing in your home yet — its hidden files (.bashrc, .claude…) are not shown here. Your workspaces are on the left.",
"tmuxUpgrade": "Upgrade tmux: {{advice}}"
"tmuxUpgrade": "Upgrade tmux: {{advice}}",
"changes.rescanRepos": "Scan for repositories again",
"tree.newGroup": "New group",
"tree.groupDefaultName": "New group",
"tree.ungrouped": "Ungrouped",
"tree.groupToggle": "Show or hide the {{name}} group",
"tree.groupMenu": "Group options",
"tree.groupRename": "Rename group",
"tree.groupDelete": "Delete group",
"tree.groupMoveUp": "Move group up",
"tree.groupMoveDown": "Move group down",
"tree.groupDeleteConfirm": "Delete the group \"{{name}}\"? Its workspaces stay, ungrouped.",
"tree.groupNameLabel": "Group name",
"menu.moveToGroup": "Move to group",
"menu.removeFromGroup": "Remove from group",
"menu.newGroupWith": "New group…",
"tree.groupAddWorkspace": "New workspace in this group…",
"tree.groupFoldAll": "Fold all groups",
"tree.groupUnfoldAll": "Unfold all groups"
}
+10
View File
@@ -1075,6 +1075,12 @@
"noMatch": "No setting matches “{{query}}”.",
"results": "Search results"
},
"changesPanel": {
"title": "Changes panel",
"description": "For a workspace folder that holds several git repositories (each with its own .git). Saved to your account.",
"innerRepos": "Show the repositories inside the workspace folder",
"innerReposDesc": "Each repository found inside the folder (up to two levels down) gets its own section in the Changes panel. Off: only the folder's own git is shown."
},
"worktrees": {
"title": "Worktree suggestions",
"description": "When you add a folder to a workspace, the repo's worktrees that have no workspace are suggested. Saved in this browser only.",
@@ -1134,6 +1140,10 @@
"18": "Larger"
}
},
"nativePaste": {
"label": "Paste images natively",
"description": "On this machine, an image pasted into a Claude pane is read by Claude from your clipboard, like in a normal terminal — nothing is uploaded. Turn it off if you open the dashboard through an SSH tunnel: Claude would read the server's clipboard. This browser only."
},
"terminalFont": {
"title": "Terminal font",
"description": "The font and size of the workspace terminals. Open terminals change at once. Saved to your account.",
+19 -1
View File
@@ -657,5 +657,23 @@
"fx.readOnly": "Chỉ đọc",
"fx.readOnlyHint": "Đây là home của user khác: bạn chỉ xem, sao chép và tải về được, không sửa được.",
"fx.homeEmpty": "Home của bạn chưa có thư mục nào — các file ẩn (.bashrc, .claude…) không hiện ở đây. Các workspace nằm ở danh sách bên trái.",
"tmuxUpgrade": "Cần nâng cấp tmux: {{advice}}"
"tmuxUpgrade": "Cần nâng cấp tmux: {{advice}}",
"changes.rescanRepos": "Quét lại các repository",
"tree.newGroup": "Nhóm mới",
"tree.groupDefaultName": "Nhóm mới",
"tree.ungrouped": "Chưa phân nhóm",
"tree.groupToggle": "Hiện hoặc ẩn nhóm {{name}}",
"tree.groupMenu": "Tuỳ chọn nhóm",
"tree.groupRename": "Đổi tên nhóm",
"tree.groupDelete": "Xoá nhóm",
"tree.groupMoveUp": "Đưa nhóm lên",
"tree.groupMoveDown": "Đưa nhóm xuống",
"tree.groupDeleteConfirm": "Xoá nhóm \"{{name}}\"? Các workspace trong nhóm vẫn giữ nguyên, chỉ không còn thuộc nhóm.",
"tree.groupNameLabel": "Tên nhóm",
"menu.moveToGroup": "Chuyển vào nhóm",
"menu.removeFromGroup": "Bỏ khỏi nhóm",
"menu.newGroupWith": "Nhóm mới…",
"tree.groupAddWorkspace": "Workspace mới trong nhóm này…",
"tree.groupFoldAll": "Thu gọn mọi nhóm",
"tree.groupUnfoldAll": "Mở rộng mọi nhóm"
}
+10
View File
@@ -1063,6 +1063,12 @@
"noMatch": "Không có cài đặt nào khớp “{{query}}”.",
"results": "Kết quả tìm kiếm"
},
"changesPanel": {
"title": "Panel Changes",
"description": "Dành cho thư mục workspace chứa nhiều repo git (mỗi repo có .git riêng). Lưu theo tài khoản của bạn.",
"innerRepos": "Hiện các repo bên trong thư mục workspace",
"innerReposDesc": "Mỗi repo tìm thấy trong thư mục (sâu tối đa hai cấp) có một mục riêng trong panel Changes. Tắt: chỉ hiện git của chính thư mục."
},
"worktrees": {
"title": "Gợi ý worktree",
"description": "Khi thêm thư mục cho một workspace, các worktree của repo chưa có workspace sẽ được gợi ý. Chỉ lưu trong trình duyệt này.",
@@ -1122,6 +1128,10 @@
"18": "Rất lớn"
}
},
"nativePaste": {
"label": "Dán ảnh kiểu native",
"description": "Trên máy này, ảnh dán vào pane Claude được Claude tự đọc từ clipboard, như trong terminal thường — không upload gì. Tắt nếu bạn mở dashboard qua SSH tunnel: khi đó Claude sẽ đọc clipboard của server. Chỉ áp dụng cho trình duyệt này."
},
"terminalFont": {
"title": "Font terminal",
"description": "Font và cỡ chữ của các terminal trong workspace. Terminal đang mở đổi ngay. Lưu vào tài khoản của bạn.",