@cerbur/clutch-dsh-worktree 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +32 -0
  2. package/README.zh.md +23 -0
  3. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  4. package/lib/client/WorktreeSurface.js +4 -2
  5. package/lib/client/WorktreeSurface.js.map +1 -1
  6. package/lib/client/dashboard/BatchManageWorktrees.d.ts +12 -0
  7. package/lib/client/dashboard/BatchManageWorktrees.d.ts.map +1 -0
  8. package/lib/client/dashboard/BatchManageWorktrees.js +77 -0
  9. package/lib/client/dashboard/BatchManageWorktrees.js.map +1 -0
  10. package/lib/client/dashboard/WorktreeDashboard.d.ts +3 -1
  11. package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
  12. package/lib/client/dashboard/WorktreeDashboard.js +14 -10
  13. package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
  14. package/lib/client/dashboard/batch-manage.d.ts +12 -0
  15. package/lib/client/dashboard/batch-manage.d.ts.map +1 -0
  16. package/lib/client/dashboard/batch-manage.js +34 -0
  17. package/lib/client/dashboard/batch-manage.js.map +1 -0
  18. package/lib/client/entry.d.ts.map +1 -1
  19. package/lib/client/entry.js +6 -8
  20. package/lib/client/entry.js.map +1 -1
  21. package/lib/client/locales.d.ts +48 -0
  22. package/lib/client/locales.d.ts.map +1 -1
  23. package/lib/client/locales.js +48 -0
  24. package/lib/client/locales.js.map +1 -1
  25. package/lib/client/session/active-sessions.d.ts +21 -0
  26. package/lib/client/session/active-sessions.d.ts.map +1 -0
  27. package/lib/client/session/active-sessions.js +61 -0
  28. package/lib/client/session/active-sessions.js.map +1 -0
  29. package/lib/client/surface/actions/useDashboardBatchManage.d.ts +9 -0
  30. package/lib/client/surface/actions/useDashboardBatchManage.d.ts.map +1 -0
  31. package/lib/client/surface/actions/useDashboardBatchManage.js +105 -0
  32. package/lib/client/surface/actions/useDashboardBatchManage.js.map +1 -0
  33. package/lib/client/surface/actions/useLifecycleActions.d.ts +3 -3
  34. package/lib/client/surface/actions/useLifecycleActions.d.ts.map +1 -1
  35. package/lib/client/surface/actions/useLifecycleActions.js +11 -11
  36. package/lib/client/surface/actions/useLifecycleActions.js.map +1 -1
  37. package/lib/client/surface/components/SessionActivityBell.d.ts +14 -0
  38. package/lib/client/surface/components/SessionActivityBell.d.ts.map +1 -0
  39. package/lib/client/surface/components/SessionActivityBell.js +92 -0
  40. package/lib/client/surface/components/SessionActivityBell.js.map +1 -0
  41. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  42. package/lib/client/surface/components/SurfaceContent.js +9 -7
  43. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  44. package/lib/client/surface/components/SurfaceHeader.d.ts +3 -2
  45. package/lib/client/surface/components/SurfaceHeader.d.ts.map +1 -1
  46. package/lib/client/surface/components/SurfaceHeader.js +4 -2
  47. package/lib/client/surface/components/SurfaceHeader.js.map +1 -1
  48. package/lib/client/surface/shared.d.ts +2 -2
  49. package/lib/client/surface/shared.d.ts.map +1 -1
  50. package/lib/client/surface/shared.js +1 -1
  51. package/lib/client/surface/shared.js.map +1 -1
  52. package/lib/client/surface/state/useLifecycleState.d.ts +1 -1
  53. package/lib/client/surface/state/useLifecycleState.d.ts.map +1 -1
  54. package/lib/client/surface/state/useLifecycleState.js +3 -3
  55. package/lib/client/surface/state/useLifecycleState.js.map +1 -1
  56. package/lib/client/surface/state/useSurfaceSources.d.ts +1 -1
  57. package/lib/client/surface/types.d.ts +1 -1
  58. package/lib/client/surface/types.d.ts.map +1 -1
  59. package/lib/client.js +754 -74
  60. package/lib/client.js.map +1 -1
  61. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -927,6 +927,24 @@ window.__ModuleLoader__.load({
927
927
  "dashboard.tab.sessions": "会话",
928
928
  "dashboard.tab.children": "派生 Worktree",
929
929
  "dashboard.tab.settings": "设置",
930
+ "dashboard.tab.manage": "管理 worktree",
931
+ "dashboard.manage.description": "批量管理当前 Workspace 下的全部受管 Worktree,包括已归档和已清理的记录。",
932
+ "dashboard.manage.selectAll": "全选",
933
+ "dashboard.manage.selected": "已选择 {count} 项",
934
+ "dashboard.manage.archive": "批量归档",
935
+ "dashboard.manage.clean": "批量清理磁盘",
936
+ "dashboard.manage.forget": "批量移出管理",
937
+ "dashboard.manage.active": "活动",
938
+ "dashboard.manage.availability": "按钮数量表示可操作项,确认弹窗仅列出这些目标;不适用项保留选择。清理或移出管理前需先归档;已清理记录不再清理。恢复待处理、缺少有效状态的记录不可操作;分支漂移需先采纳当前分支才能清理。",
939
+ "dashboard.manage.empty": "当前 Workspace 没有受管 Worktree。",
940
+ "dashboard.manage.success": "成功",
941
+ "dashboard.manage.failed": "失败",
942
+ "dashboard.manage.running": "正在处理…",
943
+ "dashboard.manage.confirm": "确认执行",
944
+ "dashboard.manage.confirm.archive": "归档以下 Worktree?目录、Session 绑定和指令均会保留,不会删除磁盘文件。",
945
+ "dashboard.manage.confirm.clean": "从磁盘删除以下 Worktree?此操作不可逆。插件不会检查 Session 或子代理是否正在运行;请先停止所有使用这些目录的任务,否则可能导致任务失败或数据丢失。若目录或 .git 已不存在,仅同步移除状态,剩余文件不会删除。原生 Session 与历史保留,绑定转为 detached。",
946
+ "dashboard.manage.confirm.forget": "将以下 Worktree 移出插件管理?仅移除管理索引与绑定记录,保留磁盘目录和 DSH 原生 Session。",
947
+ "dashboard.manage.stopped": "我已确认所有使用这些目录的 Session、子代理及其他任务均已停止。",
930
948
  "dashboard.back": "返回会话",
931
949
  "dashboard.openSidebar": "打开侧栏",
932
950
  "dashboard.soon": "即将推出",
@@ -1107,6 +1125,12 @@ window.__ModuleLoader__.load({
1107
1125
  "session.expandMore": "展开其余 {count} 个会话",
1108
1126
  "session.collapse": "收起",
1109
1127
  "session.name": "会话名称",
1128
+ "activity.title": "活跃会话",
1129
+ "activity.count": "活跃会话({n})",
1130
+ "activity.empty": "无活跃会话",
1131
+ "activity.unknownWorktree": "Worktree 暂不可用",
1132
+ "activity.runningFor": "已运行 {t}",
1133
+ "activity.seconds": "{n}秒",
1110
1134
  "session.status.running": "进行中",
1111
1135
  "session.status.subagentsRunning.one": "{n} 个子代理运行中",
1112
1136
  "session.status.subagentsRunning.other": "{n} 个子代理运行中",
@@ -1362,6 +1386,24 @@ window.__ModuleLoader__.load({
1362
1386
  "dashboard.tab.sessions": "Sessions",
1363
1387
  "dashboard.tab.children": "Children",
1364
1388
  "dashboard.tab.settings": "Settings",
1389
+ "dashboard.tab.manage": "Manage Worktrees",
1390
+ "dashboard.manage.description": "Manage all managed Worktrees in this Workspace, including archived and cleaned records.",
1391
+ "dashboard.manage.selectAll": "Select all",
1392
+ "dashboard.manage.selected": "{count} selected",
1393
+ "dashboard.manage.archive": "Archive selected",
1394
+ "dashboard.manage.clean": "Clean up selected disks",
1395
+ "dashboard.manage.forget": "Remove selected from management",
1396
+ "dashboard.manage.active": "Active",
1397
+ "dashboard.manage.availability": "Button counts show eligible items; confirmation lists only those targets. Ineligible items stay selected. Archive before cleanup or removal from management; cleaned records are not cleaned again. Recovery-needed records and records without a valid state are unavailable. Adopt a drifted branch before cleanup.",
1398
+ "dashboard.manage.empty": "No managed Worktrees in this Workspace.",
1399
+ "dashboard.manage.success": "Succeeded",
1400
+ "dashboard.manage.failed": "Failed",
1401
+ "dashboard.manage.running": "Processing…",
1402
+ "dashboard.manage.confirm": "Confirm",
1403
+ "dashboard.manage.confirm.archive": "Archive these Worktrees? Directories, Session bindings and instructions are retained. No disk files are deleted.",
1404
+ "dashboard.manage.confirm.clean": "Delete these Worktrees from disk? This cannot be undone. The plugin does not check whether Sessions or subagents are running. Stop all tasks using these directories first to avoid task failures or data loss. If a directory or .git is already absent, only removal status is synchronized; remaining files are not deleted. Native Sessions and history are retained; bindings become detached.",
1405
+ "dashboard.manage.confirm.forget": "Remove these Worktrees from plugin management? Only management and binding records are removed. Disk directories and native DSH Sessions are retained.",
1406
+ "dashboard.manage.stopped": "I confirm that all Sessions, subagents and other tasks using these directories have stopped.",
1365
1407
  "dashboard.back": "Back to session",
1366
1408
  "dashboard.openSidebar": "Open sidebar",
1367
1409
  "dashboard.soon": "Coming soon",
@@ -1542,6 +1584,12 @@ window.__ModuleLoader__.load({
1542
1584
  "session.expandMore": "Expand {count} more",
1543
1585
  "session.collapse": "Collapse",
1544
1586
  "session.name": "Session name",
1587
+ "activity.title": "Active sessions",
1588
+ "activity.count": "Active sessions ({n})",
1589
+ "activity.empty": "No active sessions",
1590
+ "activity.unknownWorktree": "Worktree unavailable",
1591
+ "activity.runningFor": "Running for {t}",
1592
+ "activity.seconds": "{n}s",
1545
1593
  "session.status.running": "Running",
1546
1594
  "session.status.subagentsRunning.one": "{n} subagent running",
1547
1595
  "session.status.subagentsRunning.other": "{n} subagents running",
@@ -2035,7 +2083,7 @@ window.__ModuleLoader__.load({
2035
2083
  const IconSearchOutline16 = createDshIconAlias(exports$1, "IconSearchOutline16", "IconSearchOutlineRegular");
2036
2084
  const IconTrashOutline16 = createDshIconAlias(exports$1, "IconTrashOutline16", "IconTrashOutlineRegular");
2037
2085
  //#endregion
2038
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/context/worktree-context.css.mjs
2086
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/context/worktree-context.css.mjs
2039
2087
  const css$9 = ".-cerbur-clutch-dsh-worktree-headerContext {\n display: inline-flex;\n min-width: 0;\n height: 22px;\n align-items: center;\n gap: 4px;\n max-width: 180px;\n overflow: hidden;\n border-radius: 6px;\n padding: 0 2px 0 0;\n background: var(--dsw-alias-fill-tsp-secondary);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n line-height: 22px;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-contextIcon {\n flex: none;\n opacity: 0.7;\n}\n\n.-cerbur-clutch-dsh-worktree-contextLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-contextHoverTitle {\n max-width: 360px;\n color: var(--dsw-static-neutral-bluish-00);\n font-size: 14px;\n line-height: 20px;\n overflow-wrap: anywhere;\n white-space: normal;\n}\n\n.-cerbur-clutch-dsh-worktree-heroContextHost {\n position: absolute;\n z-index: 0;\n display: block;\n width: max-content;\n max-width: 260px;\n min-height: 22px;\n}\n\n.-cerbur-clutch-dsh-worktree-heroContext {\n display: inline-flex;\n box-sizing: border-box;\n max-width: 260px;\n min-height: 22px;\n align-items: center;\n overflow: hidden;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 999px;\n padding: 0 8px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n line-height: 20px;\n pointer-events: auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n";
2040
2088
  const styleId$9 = "@cerbur/clutch-dsh-worktree/worktree-context.css";
2041
2089
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree-context.css\"]") === null) {
@@ -2099,8 +2147,8 @@ window.__ModuleLoader__.load({
2099
2147
  globalSetViewMode?.(mode);
2100
2148
  }
2101
2149
  //#endregion
2102
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/worktree.css.mjs
2103
- const css$8 = ".-cerbur-clutch-dsh-worktree-action {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n width: calc(100% + 4px);\n height: 42px;\n margin: 4px -2px;\n box-sizing: border-box;\n border: 0;\n border-radius: 12px;\n padding: 0 10px 0 8px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n text-align: left;\n overflow: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-action:hover,\n.-cerbur-clutch-dsh-worktree-action[data-active='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-action[data-collapsed='true'] {\n width: 36px;\n height: 36px;\n margin: 8px 0 10px;\n justify-content: center;\n gap: 0;\n padding: 0;\n border-radius: 50%;\n}\n\n.-cerbur-clutch-dsh-worktree-actionLabel {\n display: inline-flex;\n min-width: 0;\n align-items: center;\n height: 22px;\n overflow: hidden;\n font-weight: 400;\n line-height: 22px;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-surface {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 0;\n overflow: hidden;\n border-right: 1px solid var(--dsw-alias-border-l1);\n background: var(--dsw-specific-sidebar-fill);\n color: var(--dsw-alias-label-primary);\n pointer-events: auto;\n transition: width var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* Native macOS AppFrame already paints the tint over OS window vibrancy.\n Once the covered native rows are concealed, use that one material without\n adding another fill or backdrop root (menus keep their own native blur). */\n[data-platform='darwin'] .-cerbur-clutch-dsh-worktree-surface[data-native-sidebar-covered='true'] {\n background: transparent;\n border-right: none;\n}\n\n/* The shell overlay is outside the native column's clipping boundary.\n Follow the semantic collapse immediately, even during the track transition. */\n[data-sidebar-collapsed] [data-shell-overlay] .-cerbur-clutch-dsh-worktree-surface,\n.-cerbur-clutch-dsh-worktree-surface[data-collapsed='true'] {\n visibility: hidden;\n opacity: 0;\n pointer-events: none;\n}\n\n@media (prefers-reduced-transparency: reduce) {\n [data-platform='darwin'] .-cerbur-clutch-dsh-worktree-surface[data-native-sidebar-covered='true'] {\n background: color-mix(in srgb, var(--dsw-specific-sidebar-fill) 90%, transparent);\n }\n}\n\n.-cerbur-clutch-dsh-worktree-motionExits {\n position: absolute;\n inset: 0;\n contain: strict;\n overflow: clip;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .-cerbur-clutch-dsh-worktree-surface {\n transition: none;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-wideContent {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n}\n\n.-cerbur-clutch-dsh-worktree-surface[data-collapsed='true'] .-cerbur-clutch-dsh-worktree-wideContent {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationDialog {\n width: min(440px, 100%);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody {\n display: grid;\n min-width: 0;\n gap: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-modalField {\n min-width: 0;\n gap: 8px;\n line-height: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-renameInput,\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody [data-single-select] > button {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: 40px;\n padding: 0 12px;\n border: 1px solid var(--dsw-alias-border-l3);\n font-size: 14px;\n line-height: 22px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-renameInput:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTabs {\n display: flex;\n gap: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTab {\n border: 0;\n border-bottom: 2px solid transparent;\n padding: 4px 0 8px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTab[aria-selected='true'] {\n border-bottom-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeImportCandidates {\n display: grid;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeImportError {\n display: grid;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton {\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-header {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: none;\n min-height: 44px;\n padding: 6px 10px;\n box-sizing: border-box;\n border-bottom: 1px solid var(--dsw-alias-border-l1);\n}\n\n.-cerbur-clutch-dsh-worktree-title {\n min-width: 0;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 600;\n opacity: 1;\n visibility: visible;\n transition:\n opacity 120ms var(--ds-ease-in-out),\n transform 180ms var(--ds-ease-in-out),\n visibility 0s linear;\n}\n\n.-cerbur-clutch-dsh-worktree-titleHidden {\n flex: 0 0 0px;\n max-width: 0;\n opacity: 0;\n transform: translateX(-4px);\n visibility: hidden;\n pointer-events: none;\n transition-delay: 0s, 0s, 180ms;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: 28px;\n height: 28px;\n border: 0;\n border-radius: 7px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 16px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-modeButton[data-active='true'] {\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspacePicker {\n display: block;\n width: calc(100% - 20px);\n margin: 6px 10px 8px;\n padding: 6px 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 7px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceLabel {\n display: block;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollFrame {\n position: relative;\n min-height: 0;\n flex: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-content {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n padding: 0 10px 12px;\n scrollbar-width: none;\n}\n\n.-cerbur-clutch-dsh-worktree-content::-webkit-scrollbar {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollContent {\n min-width: 0;\n display: flow-root;\n}\n\n/* The themed thumb floats in the existing right inset. Native scrolling\n stays on .-cerbur-clutch-dsh-worktree-content; OS scrollbar preferences cannot shift the rows. */\n.-cerbur-clutch-dsh-worktree-overlayScrollbar {\n position: absolute;\n top: 0;\n right: 2px;\n bottom: 0;\n width: 5px;\n touch-action: none;\n user-select: none;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollbarThumb {\n width: 100%;\n border-radius: 999px;\n background: var(--dsw-alias-scrollbar-bg-l2);\n opacity: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollFrame:hover .-cerbur-clutch-dsh-worktree-scrollbarThumb,\n.-cerbur-clutch-dsh-worktree-scrollFrame:focus-within .-cerbur-clutch-dsh-worktree-scrollbarThumb,\n.-cerbur-clutch-dsh-worktree-overlayScrollbar[data-dragging='true'] .-cerbur-clutch-dsh-worktree-scrollbarThumb {\n opacity: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollbarThumb:hover,\n.-cerbur-clutch-dsh-worktree-overlayScrollbar[data-dragging='true'] .-cerbur-clutch-dsh-worktree-scrollbarThumb {\n background: var(--dsw-alias-scrollbar-hover-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-content:focus-visible {\n outline: 2px solid var(--dsw-alias-border-l3);\n outline-offset: -2px;\n}\n\n.-cerbur-clutch-dsh-worktree-error {\n margin: 12px 0 0;\n padding: 8px;\n border: 1px solid var(--dsw-alias-state-error-primary);\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-notice {\n margin: 12px 0 0;\n padding: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 7px;\n background: var(--dsw-alias-button-elevated-fill);\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton,\n.-cerbur-clutch-dsh-worktree-actionButton {\n border: 0;\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton,\n.-cerbur-clutch-dsh-worktree-actionButton {\n width: 100%;\n padding: 6px 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-recoveryActions {\n display: grid;\n gap: 6px;\n margin-top: 6px;\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton:disabled,\n.-cerbur-clutch-dsh-worktree-actionButton:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.-cerbur-clutch-dsh-worktree-actions {\n display: grid;\n gap: 6px;\n margin-top: 10px;\n padding: 8px;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-actionSelect {\n min-width: 0;\n padding: 5px 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-section {\n margin: 12px 0 0;\n}\n\n.-cerbur-clutch-dsh-worktree-sectionTitle {\n margin: 0 2px 4px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n\n.-cerbur-clutch-dsh-worktree-empty,\n.-cerbur-clutch-dsh-worktree-message {\n margin: 0;\n padding: 8px 4px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 12px;\n line-height: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitReadiness {\n display: grid;\n gap: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-commandBlock {\n margin: 6px 0 0;\n padding: 8px;\n overflow-x: auto;\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-secondary);\n font:\n 11px/16px ui-monospace,\n SFMono-Regular,\n Menlo,\n monospace;\n white-space: pre-wrap;\n}\n\n.-cerbur-clutch-dsh-worktree-message[data-error='true'] {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktree,\n.-cerbur-clutch-dsh-worktree-session {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border: 0;\n border-radius: 7px;\n padding: 6px 8px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 12px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-worktree {\n cursor: default;\n}\n\n.-cerbur-clutch-dsh-worktree-session {\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-worktree:hover,\n.-cerbur-clutch-dsh-worktree-session:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel,\n.-cerbur-clutch-dsh-worktree-sessionLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-status {\n flex: none;\n margin-left: auto;\n padding-left: 8px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-searchSlot {\n flex: none;\n max-width: 28px;\n min-width: 0;\n display: flex;\n align-items: center;\n margin-left: auto;\n box-sizing: border-box;\n transition:\n flex 180ms var(--ds-ease-in-out),\n max-width 180ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchSlotExpanded {\n flex: 1;\n max-width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-headerActions {\n flex: none;\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 0;\n opacity: 1;\n visibility: visible;\n transition:\n opacity 120ms var(--ds-ease-in-out),\n transform 180ms var(--ds-ease-in-out),\n visibility 0s linear;\n}\n\n.-cerbur-clutch-dsh-worktree-headerActionsHidden {\n flex: 0 0 0px;\n max-width: 0;\n margin-left: 0;\n opacity: 0;\n transform: translateX(4px);\n visibility: hidden;\n pointer-events: none;\n transition-delay: 0s, 0s, 180ms;\n}\n\n.-cerbur-clutch-dsh-worktree-search {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 28px;\n box-sizing: border-box;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n transition:\n background 180ms var(--ds-ease-in-out),\n box-shadow 180ms var(--ds-ease-in-out),\n color 180ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded {\n background: var(--dsw-alias-interactive-bg-subtle);\n box-shadow: inset 0 0 0 1px var(--dsw-alias-border-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded:focus-within {\n box-shadow: inset 0 0 0 1px #3b82f6;\n}\n\n.-cerbur-clutch-dsh-worktree-searchButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 50%;\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-searchButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded .-cerbur-clutch-dsh-worktree-searchButton:hover {\n background: transparent;\n}\n\n.-cerbur-clutch-dsh-worktree-searchInput {\n flex: 1;\n width: 0;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n background: transparent;\n opacity: 0;\n pointer-events: none;\n font: inherit;\n font-size: 13px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n transition: opacity 120ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded .-cerbur-clutch-dsh-worktree-searchInput {\n margin-left: -2px;\n opacity: 1;\n pointer-events: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-searchInput::placeholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.-cerbur-clutch-dsh-worktree-clearButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-secondary);\n}\n\n.-cerbur-clutch-dsh-worktree-clearButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-actionSelect:focus {\n border-color: #3b82f6;\n}\n\n.-cerbur-clutch-dsh-worktree-iconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 0;\n border-radius: 7px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 20px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-iconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceList {\n position: relative;\n min-width: 0;\n min-height: 0;\n display: grid;\n gap: 4px;\n overflow-x: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceGroup {\n min-width: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow,\n.-cerbur-clutch-dsh-worktree-worktreeRow {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 0;\n min-height: 36px;\n box-sizing: border-box;\n border-radius: 8px;\n padding: 3px 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow .-cerbur-clutch-dsh-worktree-workspaceDisclosure {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-workspaceDisclosure,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-workspaceDisclosure {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-workspaceIcon,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-workspaceIcon {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeDisclosure,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeIcon,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-worktreeIcon {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 28px;\n border: 0;\n border-radius: 6px;\n padding: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 17px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton > svg {\n display: block;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureArrow {\n transition: transform 150ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton[aria-expanded='true'] .-cerbur-clutch-dsh-worktree-disclosureArrow {\n transform: rotate(90deg);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceDisclosure,\n.-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n color: var(--dsw-alias-label-caption);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .-cerbur-clutch-dsh-worktree-disclosureArrow {\n transition: none;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon,\n.-cerbur-clutch-dsh-worktree-worktreeIcon {\n flex: none;\n width: 24px;\n color: var(--dsw-alias-label-secondary);\n font-size: 20px;\n line-height: 1;\n text-align: center;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='done'] {\n color: var(--dsw-alias-state-success-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='warning'] {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='error'] {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeStateLabel {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n border: 0;\n padding: 0;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon[data-workspace-active='true'] {\n color: var(--dsw-alias-state-business-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceTitle,\n.-cerbur-clutch-dsh-worktree-worktreeLabel {\n min-width: 0;\n overflow: hidden;\n flex: 1;\n padding: 0 6px;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-main-group='true'] .-cerbur-clutch-dsh-worktree-worktreeLabel {\n font-weight: 600;\n}\n\n/* Native title reveal: the span clips its own text and scrolls only while\n hovered. Activity alone keeps the resting ellipsis. */\n@media (hover: hover) {\n .-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeLabel,\n .-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-sessionLabel {\n text-overflow: clip;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-scrolled],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-scrolled] {\n mask-image: linear-gradient(to right, transparent, #000 12px);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-clipped],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-clipped] {\n mask-image: linear-gradient(to left, transparent, #000 12px);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-scrolled][data-clipped],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-scrolled][data-clipped] {\n mask-image: linear-gradient(\n to right,\n transparent,\n #000 12px,\n #000 calc(100% - 12px),\n transparent\n );\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeHoverTitle {\n color: var(--dsw-static-neutral-bluish-00);\n font-size: 14px;\n line-height: 20px;\n overflow-wrap: anywhere;\n}\n\n/* Native Session hover card: full title, relative time, and current status. */\n.-cerbur-clutch-dsh-worktree-sessionHoverContent {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverTitle {\n color: #FFFFFF;\n font-size: 14px;\n line-height: 20px;\n overflow-wrap: break-word;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverTime {\n color: #CFD3D6;\n font-size: 12px;\n line-height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverStatus {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #ADB2B8;\n font-size: 12px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-workspaceActions {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n height: 28px;\n margin-left: auto;\n}\n\n/* Workspace rows retain the native fixed action column. */\n.-cerbur-clutch-dsh-worktree-workspaceActions {\n flex: 0 0 64px;\n width: 64px;\n}\n\n/* Group actions do not reserve space until their row needs to show them. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot {\n min-width: 0;\n flex: 0 0 0;\n width: 0;\n gap: 4px;\n}\n\n/* Keep the 28px activity indicator plus a 4px label gap while collapsed. */\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot {\n flex: 0 0 32px;\n width: 32px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot {\n flex: 0 0 auto;\n width: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceActions > .-cerbur-clutch-dsh-worktree-menuAction {\n position: absolute;\n top: 0;\n right: 32px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceActions > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n}\n\n/* Worktree actions flow naturally so the rail matches the controls that exist. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n position: static;\n opacity: 0;\n pointer-events: none;\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-groupActivity {\n position: absolute;\n top: 0;\n right: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n visibility: hidden;\n pointer-events: none;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-groupActivity {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'][data-menu-open='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'][data-menu-open='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-groupActivity {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'][data-menu-open='true']\n .-cerbur-clutch-dsh-worktree-treeActionSlot\n > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'][data-menu-open='true']\n .-cerbur-clutch-dsh-worktree-treeActionSlot\n > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardAction {\n display: inline-flex;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-menuAction {\n display: inline-flex;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow:focus-within .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover [data-add-worktree],\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] [data-add-worktree],\n.-cerbur-clutch-dsh-worktree-workspaceRow:focus-within [data-add-worktree] {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeChildren {\n margin-left: 16px;\n padding: 2px 0 5px 12px;\n border-left: 1px solid var(--dsw-alias-border-l1);\n}\n\n.-cerbur-clutch-dsh-worktree-groupLabel {\n padding: 6px 8px 3px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n\n.-cerbur-clutch-dsh-worktree-groupHeader {\n display: flex;\n align-items: center;\n min-height: 34px;\n padding-right: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-groupHeader .-cerbur-clutch-dsh-worktree-groupLabel {\n flex: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeGroup {\n margin-top: 2px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow {\n min-height: 34px;\n}\n\n/* Compact the Worktree leading slots to make room for its third action. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-worktreeIcon,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-disclosureButton {\n width: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow {\n position: relative;\n display: flex;\n align-items: center;\n width: calc(100% - 20px);\n margin-left: 20px;\n min-width: 0;\n min-height: 31px;\n box-sizing: border-box;\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-session-current='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-session-current='true'] .-cerbur-clutch-dsh-worktree-treeSessionContent {\n font-weight: 600;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionContent {\n display: flex;\n align-items: center;\n flex: 1;\n width: 0;\n min-width: 0;\n min-height: 31px;\n box-sizing: border-box;\n border: 0;\n border-radius: 7px;\n padding: 4px 4px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionContent:hover {\n background: transparent;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionTrailing {\n position: relative;\n display: inline-flex;\n flex: 0 0 52px;\n align-items: center;\n justify-content: flex-end;\n width: 52px;\n height: 28px;\n margin-left: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-rowActions {\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionMeta {\n color: var(--dsw-alias-label-tertiary);\n pointer-events: none;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionStatus {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionTime {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 4px;\n font-size: 12px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionOverflowButton {\n display: block;\n width: calc(100% - 24px);\n margin: 2px 0 4px 24px;\n padding: 4px 8px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 12px;\n font-weight: 400;\n line-height: 20px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionOverflowButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-rowActions {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-sessionTrailing:focus-within .-cerbur-clutch-dsh-worktree-sessionMeta {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-rowActions,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-rowActions,\n.-cerbur-clutch-dsh-worktree-sessionTrailing:focus-within .-cerbur-clutch-dsh-worktree-rowActions {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-renameInput {\n width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-renameError {\n margin: 8px 0 0;\n color: var(--dsw-alias-state-error-primary);\n font-size: 13px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-emptyNested {\n margin: 0;\n padding: 4px 8px 5px 28px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-archivedGroup {\n margin-top: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-modalField {\n display: grid;\n gap: 5px;\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-worktreeHoverDetails {\n max-width: 360px;\n white-space: normal;\n overflow-wrap: anywhere;\n line-height: 1.5;\n}\n";
2150
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/worktree.css.mjs
2151
+ const css$8 = ".-cerbur-clutch-dsh-worktree-action {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 8px;\n width: calc(100% + 4px);\n height: 42px;\n margin: 4px -2px;\n box-sizing: border-box;\n border: 0;\n border-radius: 12px;\n padding: 0 10px 0 8px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n text-align: left;\n overflow: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-action:hover,\n.-cerbur-clutch-dsh-worktree-action[data-active='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-action[data-collapsed='true'] {\n width: 36px;\n height: 36px;\n margin: 8px 0 10px;\n justify-content: center;\n gap: 0;\n padding: 0;\n border-radius: 50%;\n}\n\n.-cerbur-clutch-dsh-worktree-actionLabel {\n display: inline-flex;\n min-width: 0;\n align-items: center;\n height: 22px;\n overflow: hidden;\n font-weight: 400;\n line-height: 22px;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-surface {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 0;\n overflow: hidden;\n border-right: 1px solid var(--dsw-alias-border-l1);\n background: var(--dsw-specific-sidebar-fill);\n color: var(--dsw-alias-label-primary);\n pointer-events: auto;\n transition: width var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* Native macOS AppFrame already paints the tint over OS window vibrancy.\n Once the covered native rows are concealed, use that one material without\n adding another fill or backdrop root (menus keep their own native blur). */\n[data-platform='darwin'] .-cerbur-clutch-dsh-worktree-surface[data-native-sidebar-covered='true'] {\n background: transparent;\n border-right: none;\n}\n\n/* The shell overlay is outside the native column's clipping boundary.\n Follow the semantic collapse immediately, even during the track transition. */\n[data-sidebar-collapsed] [data-shell-overlay] .-cerbur-clutch-dsh-worktree-surface,\n.-cerbur-clutch-dsh-worktree-surface[data-collapsed='true'] {\n visibility: hidden;\n opacity: 0;\n pointer-events: none;\n}\n\n@media (prefers-reduced-transparency: reduce) {\n [data-platform='darwin'] .-cerbur-clutch-dsh-worktree-surface[data-native-sidebar-covered='true'] {\n background: color-mix(in srgb, var(--dsw-specific-sidebar-fill) 90%, transparent);\n }\n}\n\n.-cerbur-clutch-dsh-worktree-motionExits {\n position: absolute;\n inset: 0;\n contain: strict;\n overflow: clip;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .-cerbur-clutch-dsh-worktree-surface {\n transition: none;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-wideContent {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex: 1;\n flex-direction: column;\n}\n\n.-cerbur-clutch-dsh-worktree-surface[data-collapsed='true'] .-cerbur-clutch-dsh-worktree-wideContent {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationDialog {\n width: min(440px, 100%);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody {\n display: grid;\n min-width: 0;\n gap: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-modalField {\n min-width: 0;\n gap: 8px;\n line-height: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-renameInput,\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody [data-single-select] > button {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: 40px;\n padding: 0 12px;\n border: 1px solid var(--dsw-alias-border-l3);\n font-size: 14px;\n line-height: 22px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRegistrationBody .-cerbur-clutch-dsh-worktree-renameInput:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTabs {\n display: flex;\n gap: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTab {\n border: 0;\n border-bottom: 2px solid transparent;\n padding: 4px 0 8px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n line-height: 22px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeModalTab[aria-selected='true'] {\n border-bottom-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeImportCandidates {\n display: grid;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeImportError {\n display: grid;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton {\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-header {\n display: flex;\n align-items: center;\n gap: 6px;\n flex: none;\n min-height: 44px;\n padding: 6px 10px;\n box-sizing: border-box;\n border-bottom: 1px solid var(--dsw-alias-border-l1);\n}\n\n.-cerbur-clutch-dsh-worktree-title {\n min-width: 0;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 600;\n opacity: 1;\n visibility: visible;\n transition:\n opacity 120ms var(--ds-ease-in-out),\n transform 180ms var(--ds-ease-in-out),\n visibility 0s linear;\n}\n\n.-cerbur-clutch-dsh-worktree-titleHidden {\n flex: 0 0 0px;\n max-width: 0;\n opacity: 0;\n transform: translateX(-4px);\n visibility: hidden;\n pointer-events: none;\n transition-delay: 0s, 0s, 180ms;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: 28px;\n height: 28px;\n border: 0;\n border-radius: 7px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 16px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-closeButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-modeButton[data-active='true'] {\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspacePicker {\n display: block;\n width: calc(100% - 20px);\n margin: 6px 10px 8px;\n padding: 6px 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 7px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceLabel {\n display: block;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollFrame {\n position: relative;\n min-height: 0;\n flex: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-content {\n height: 100%;\n box-sizing: border-box;\n overflow: auto;\n padding: 0 10px 12px;\n scrollbar-width: none;\n}\n\n.-cerbur-clutch-dsh-worktree-content::-webkit-scrollbar {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollContent {\n min-width: 0;\n display: flow-root;\n}\n\n/* The themed thumb floats in the existing right inset. Native scrolling\n stays on .-cerbur-clutch-dsh-worktree-content; OS scrollbar preferences cannot shift the rows. */\n.-cerbur-clutch-dsh-worktree-overlayScrollbar {\n position: absolute;\n top: 0;\n right: 2px;\n bottom: 0;\n width: 5px;\n touch-action: none;\n user-select: none;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollbarThumb {\n width: 100%;\n border-radius: 999px;\n background: var(--dsw-alias-scrollbar-bg-l2);\n opacity: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollFrame:hover .-cerbur-clutch-dsh-worktree-scrollbarThumb,\n.-cerbur-clutch-dsh-worktree-scrollFrame:focus-within .-cerbur-clutch-dsh-worktree-scrollbarThumb,\n.-cerbur-clutch-dsh-worktree-overlayScrollbar[data-dragging='true'] .-cerbur-clutch-dsh-worktree-scrollbarThumb {\n opacity: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-scrollbarThumb:hover,\n.-cerbur-clutch-dsh-worktree-overlayScrollbar[data-dragging='true'] .-cerbur-clutch-dsh-worktree-scrollbarThumb {\n background: var(--dsw-alias-scrollbar-hover-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-content:focus-visible {\n outline: 2px solid var(--dsw-alias-border-l3);\n outline-offset: -2px;\n}\n\n.-cerbur-clutch-dsh-worktree-error {\n margin: 12px 0 0;\n padding: 8px;\n border: 1px solid var(--dsw-alias-state-error-primary);\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-notice {\n margin: 12px 0 0;\n padding: 8px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 7px;\n background: var(--dsw-alias-button-elevated-fill);\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton,\n.-cerbur-clutch-dsh-worktree-actionButton {\n border: 0;\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton,\n.-cerbur-clutch-dsh-worktree-actionButton {\n width: 100%;\n padding: 6px 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-recoveryActions {\n display: grid;\n gap: 6px;\n margin-top: 6px;\n}\n\n.-cerbur-clutch-dsh-worktree-retryButton:disabled,\n.-cerbur-clutch-dsh-worktree-actionButton:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.-cerbur-clutch-dsh-worktree-actions {\n display: grid;\n gap: 6px;\n margin-top: 10px;\n padding: 8px;\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-actionSelect {\n min-width: 0;\n padding: 5px 6px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-section {\n margin: 12px 0 0;\n}\n\n.-cerbur-clutch-dsh-worktree-sectionTitle {\n margin: 0 2px 4px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n\n.-cerbur-clutch-dsh-worktree-empty,\n.-cerbur-clutch-dsh-worktree-message {\n margin: 0;\n padding: 8px 4px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 12px;\n line-height: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitReadiness {\n display: grid;\n gap: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-commandBlock {\n margin: 6px 0 0;\n padding: 8px;\n overflow-x: auto;\n border-radius: 6px;\n background: var(--dsw-alias-button-elevated-fill);\n color: var(--dsw-alias-label-secondary);\n font:\n 11px/16px ui-monospace,\n SFMono-Regular,\n Menlo,\n monospace;\n white-space: pre-wrap;\n}\n\n.-cerbur-clutch-dsh-worktree-message[data-error='true'] {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktree,\n.-cerbur-clutch-dsh-worktree-session {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border: 0;\n border-radius: 7px;\n padding: 6px 8px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n font-size: 12px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-worktree {\n cursor: default;\n}\n\n.-cerbur-clutch-dsh-worktree-session {\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-worktree:hover,\n.-cerbur-clutch-dsh-worktree-session:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel,\n.-cerbur-clutch-dsh-worktree-sessionLabel {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-status {\n flex: none;\n margin-left: auto;\n padding-left: 8px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-searchSlot {\n flex: none;\n max-width: 28px;\n min-width: 0;\n display: flex;\n align-items: center;\n margin-left: auto;\n box-sizing: border-box;\n transition:\n flex 180ms var(--ds-ease-in-out),\n max-width 180ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchSlotExpanded {\n flex: 1;\n max-width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-headerActions {\n flex: none;\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 0;\n opacity: 1;\n visibility: visible;\n transition:\n opacity 120ms var(--ds-ease-in-out),\n transform 180ms var(--ds-ease-in-out),\n visibility 0s linear;\n}\n\n.-cerbur-clutch-dsh-worktree-headerActionsHidden {\n flex: 0 0 0px;\n max-width: 0;\n margin-left: 0;\n opacity: 0;\n transform: translateX(4px);\n visibility: hidden;\n pointer-events: none;\n transition-delay: 0s, 0s, 180ms;\n}\n\n.-cerbur-clutch-dsh-worktree-search {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 28px;\n box-sizing: border-box;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n transition:\n background 180ms var(--ds-ease-in-out),\n box-shadow 180ms var(--ds-ease-in-out),\n color 180ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded {\n background: var(--dsw-alias-interactive-bg-subtle);\n box-shadow: inset 0 0 0 1px var(--dsw-alias-border-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded:focus-within {\n box-shadow: inset 0 0 0 1px #3b82f6;\n}\n\n.-cerbur-clutch-dsh-worktree-searchButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 50%;\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-searchButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded .-cerbur-clutch-dsh-worktree-searchButton:hover {\n background: transparent;\n}\n\n.-cerbur-clutch-dsh-worktree-searchInput {\n flex: 1;\n width: 0;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n background: transparent;\n opacity: 0;\n pointer-events: none;\n font: inherit;\n font-size: 13px;\n line-height: 18px;\n color: var(--dsw-alias-label-primary);\n transition: opacity 120ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-searchExpanded .-cerbur-clutch-dsh-worktree-searchInput {\n margin-left: -2px;\n opacity: 1;\n pointer-events: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-searchInput::placeholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.-cerbur-clutch-dsh-worktree-clearButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n padding: 0;\n background: transparent;\n cursor: pointer;\n color: var(--dsw-alias-label-secondary);\n}\n\n.-cerbur-clutch-dsh-worktree-clearButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-actionSelect:focus {\n border-color: #3b82f6;\n}\n\n.-cerbur-clutch-dsh-worktree-iconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 0;\n border-radius: 7px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 20px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-iconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-activityBell {\n display: inline-flex;\n position: relative;\n}\n\n.-cerbur-clutch-dsh-worktree-activityBadge {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 5px;\n height: 5px;\n border-radius: 50%;\n background: var(--dsw-alias-brand-primary, #3b82f6);\n outline: 2px solid var(--dsw-specific-sidebar-fill);\n pointer-events: none;\n}\n\n.-cerbur-clutch-dsh-worktree-activityPanel {\n position: fixed;\n z-index: 1000;\n box-sizing: border-box;\n width: min(360px, calc(100vw - 16px));\n max-height: min(440px, calc(100dvh - 72px));\n display: flex;\n flex-direction: column;\n padding: 6px;\n color: var(--dsw-alias-label-primary);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n outline: none;\n}\n\n.-cerbur-clutch-dsh-worktree-activityHeading {\n flex: none;\n padding: 8px 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.-cerbur-clutch-dsh-worktree-activityEmpty {\n margin: 0;\n padding: 26px 10px 32px;\n text-align: center;\n font-size: 13px;\n color: var(--dsw-alias-label-secondary);\n}\n\n.-cerbur-clutch-dsh-worktree-activityList {\n overflow: auto;\n min-height: 0;\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n.-cerbur-clutch-dsh-worktree-activityEntry {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n box-sizing: border-box;\n width: 100%;\n height: auto;\n border: 0;\n border-radius: 7px;\n padding: 10px;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-activityEntry:hover,\n.-cerbur-clutch-dsh-worktree-activityEntry:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-activityEntry:focus-visible {\n outline: 1px solid var(--dsw-alias-label-secondary);\n outline-offset: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-activityIdentity {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: 3px;\n flex: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-activityName,\n.-cerbur-clutch-dsh-worktree-activityContext {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-activityName {\n font-size: 13px;\n line-height: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-activityContext,\n.-cerbur-clutch-dsh-worktree-activityTime {\n color: var(--dsw-alias-label-secondary);\n font-size: 11px;\n line-height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-activityMetadata {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: flex-end;\n gap: 5px;\n padding-top: 2px;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceList {\n position: relative;\n min-width: 0;\n min-height: 0;\n display: grid;\n gap: 4px;\n overflow-x: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceGroup {\n min-width: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow,\n.-cerbur-clutch-dsh-worktree-worktreeRow {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 0;\n min-height: 36px;\n box-sizing: border-box;\n border-radius: 8px;\n padding: 3px 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow .-cerbur-clutch-dsh-worktree-workspaceDisclosure {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-workspaceDisclosure,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-workspaceDisclosure {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-workspaceIcon,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-workspaceIcon {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeDisclosure,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeIcon,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-worktreeIcon {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 28px;\n border: 0;\n border-radius: 6px;\n padding: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 17px;\n line-height: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton > svg {\n display: block;\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureArrow {\n transition: transform 150ms var(--ds-ease-in-out);\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton[aria-expanded='true'] .-cerbur-clutch-dsh-worktree-disclosureArrow {\n transform: rotate(90deg);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceDisclosure,\n.-cerbur-clutch-dsh-worktree-worktreeDisclosure {\n color: var(--dsw-alias-label-caption);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .-cerbur-clutch-dsh-worktree-disclosureArrow {\n transition: none;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-disclosureButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon,\n.-cerbur-clutch-dsh-worktree-worktreeIcon {\n flex: none;\n width: 24px;\n color: var(--dsw-alias-label-secondary);\n font-size: 20px;\n line-height: 1;\n text-align: center;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='done'] {\n color: var(--dsw-alias-state-success-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='warning'] {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeIcon[data-worktree-state='error'] {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeStateLabel {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n border: 0;\n padding: 0;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceIcon[data-workspace-active='true'] {\n color: var(--dsw-alias-state-business-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceTitle,\n.-cerbur-clutch-dsh-worktree-worktreeLabel {\n min-width: 0;\n overflow: hidden;\n flex: 1;\n padding: 0 6px;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-main-group='true'] .-cerbur-clutch-dsh-worktree-worktreeLabel {\n font-weight: 600;\n}\n\n/* Native title reveal: the span clips its own text and scrolls only while\n hovered. Activity alone keeps the resting ellipsis. */\n@media (hover: hover) {\n .-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-worktreeLabel,\n .-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-sessionLabel {\n text-overflow: clip;\n }\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-scrolled],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-scrolled] {\n mask-image: linear-gradient(to right, transparent, #000 12px);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-clipped],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-clipped] {\n mask-image: linear-gradient(to left, transparent, #000 12px);\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeLabel[data-scrolled][data-clipped],\n.-cerbur-clutch-dsh-worktree-sessionLabel[data-scrolled][data-clipped] {\n mask-image: linear-gradient(\n to right,\n transparent,\n #000 12px,\n #000 calc(100% - 12px),\n transparent\n );\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeHoverTitle {\n color: var(--dsw-static-neutral-bluish-00);\n font-size: 14px;\n line-height: 20px;\n overflow-wrap: anywhere;\n}\n\n/* Native Session hover card: full title, relative time, and current status. */\n.-cerbur-clutch-dsh-worktree-sessionHoverContent {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverTitle {\n color: #FFFFFF;\n font-size: 14px;\n line-height: 20px;\n overflow-wrap: break-word;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverTime {\n color: #CFD3D6;\n font-size: 12px;\n line-height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionHoverStatus {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #ADB2B8;\n font-size: 12px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-workspaceActions {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n height: 28px;\n margin-left: auto;\n}\n\n/* Workspace rows retain the native fixed action column. */\n.-cerbur-clutch-dsh-worktree-workspaceActions {\n flex: 0 0 64px;\n width: 64px;\n}\n\n/* Group actions do not reserve space until their row needs to show them. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot {\n min-width: 0;\n flex: 0 0 0;\n width: 0;\n gap: 4px;\n}\n\n/* Keep the 28px activity indicator plus a 4px label gap while collapsed. */\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot {\n flex: 0 0 32px;\n width: 32px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot {\n flex: 0 0 auto;\n width: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceActions > .-cerbur-clutch-dsh-worktree-menuAction {\n position: absolute;\n top: 0;\n right: 32px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceActions > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n}\n\n/* Worktree actions flow naturally so the rail matches the controls that exist. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n position: static;\n opacity: 0;\n pointer-events: none;\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-groupActivity {\n position: absolute;\n top: 0;\n right: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n visibility: hidden;\n pointer-events: none;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-groupActivity {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'][data-menu-open='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'][data-menu-open='true'] .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-groupActivity,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-groupActivity {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true'][data-menu-open='true']\n .-cerbur-clutch-dsh-worktree-treeActionSlot\n > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true'][data-menu-open='true']\n .-cerbur-clutch-dsh-worktree-treeActionSlot\n > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-group-activity='true']:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardAction {\n display: inline-flex;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-menuAction {\n display: inline-flex;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow:focus-within .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-workspaceRow:hover [data-add-worktree],\n.-cerbur-clutch-dsh-worktree-workspaceRow[data-menu-open='true'] [data-add-worktree],\n.-cerbur-clutch-dsh-worktree-workspaceRow:focus-within [data-add-worktree] {\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-dashboardAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-menuAction,\n.-cerbur-clutch-dsh-worktree-worktreeRow:hover .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child,\n.-cerbur-clutch-dsh-worktree-worktreeRow:focus-within .-cerbur-clutch-dsh-worktree-treeActionSlot > .-cerbur-clutch-dsh-worktree-iconButton:last-child {\n opacity: 1;\n pointer-events: auto;\n visibility: visible;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-workspaceRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeChildren {\n margin-left: 16px;\n padding: 2px 0 5px 12px;\n border-left: 1px solid var(--dsw-alias-border-l1);\n}\n\n.-cerbur-clutch-dsh-worktree-groupLabel {\n padding: 6px 8px 3px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n\n.-cerbur-clutch-dsh-worktree-groupHeader {\n display: flex;\n align-items: center;\n min-height: 34px;\n padding-right: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-groupHeader .-cerbur-clutch-dsh-worktree-groupLabel {\n flex: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeGroup {\n margin-top: 2px;\n}\n\n.-cerbur-clutch-dsh-worktree-worktreeRow {\n min-height: 34px;\n}\n\n/* Compact the Worktree leading slots to make room for its third action. */\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-worktreeIcon,\n.-cerbur-clutch-dsh-worktree-worktreeRow .-cerbur-clutch-dsh-worktree-disclosureButton {\n width: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow {\n position: relative;\n display: flex;\n align-items: center;\n width: calc(100% - 20px);\n margin-left: 20px;\n min-width: 0;\n min-height: 31px;\n box-sizing: border-box;\n border-radius: 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-session-current='true'] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-session-current='true'] .-cerbur-clutch-dsh-worktree-treeSessionContent {\n font-weight: 600;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropBefore::before,\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n position: absolute;\n right: 4px;\n left: 4px;\n height: 2px;\n border-radius: 2px;\n background: var(--dsw-alias-brand-primary);\n content: '';\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropBefore::before {\n top: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow.-cerbur-clutch-dsh-worktree-dropAfter::after {\n bottom: -1px;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionContent {\n display: flex;\n align-items: center;\n flex: 1;\n width: 0;\n min-width: 0;\n min-height: 31px;\n box-sizing: border-box;\n border: 0;\n border-radius: 7px;\n padding: 4px 4px;\n background: transparent;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n font: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionContent:hover {\n background: transparent;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionTrailing {\n position: relative;\n display: inline-flex;\n flex: 0 0 52px;\n align-items: center;\n justify-content: flex-end;\n width: 52px;\n height: 28px;\n margin-left: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-rowActions {\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionMeta {\n color: var(--dsw-alias-label-tertiary);\n pointer-events: none;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionStatus {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionTime {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-right: 4px;\n font-size: 12px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionOverflowButton {\n display: block;\n width: calc(100% - 24px);\n margin: 2px 0 4px 24px;\n padding: 4px 8px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 12px;\n font-weight: 400;\n line-height: 20px;\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-sessionOverflowButton:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n.-cerbur-clutch-dsh-worktree-rowActions {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-sessionMeta,\n.-cerbur-clutch-dsh-worktree-sessionTrailing:focus-within .-cerbur-clutch-dsh-worktree-sessionMeta {\n visibility: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-treeSessionRow:hover .-cerbur-clutch-dsh-worktree-rowActions,\n.-cerbur-clutch-dsh-worktree-treeSessionRow[data-menu-open='true'] .-cerbur-clutch-dsh-worktree-rowActions,\n.-cerbur-clutch-dsh-worktree-sessionTrailing:focus-within .-cerbur-clutch-dsh-worktree-rowActions {\n display: inline-flex;\n}\n\n.-cerbur-clutch-dsh-worktree-renameInput {\n width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-renameError {\n margin: 8px 0 0;\n color: var(--dsw-alias-state-error-primary);\n font-size: 13px;\n line-height: 20px;\n}\n\n.-cerbur-clutch-dsh-worktree-emptyNested {\n margin: 0;\n padding: 4px 8px 5px 28px;\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-archivedGroup {\n margin-top: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-modalField {\n display: grid;\n gap: 5px;\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-worktreeHoverDetails {\n max-width: 360px;\n white-space: normal;\n overflow-wrap: anywhere;\n line-height: 1.5;\n}\n";
2104
2152
  const styleId$8 = "@cerbur/clutch-dsh-worktree/worktree.css";
2105
2153
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree.css\"]") === null) {
2106
2154
  const tag = document.createElement("style");
@@ -2163,6 +2211,18 @@ window.__ModuleLoader__.load({
2163
2211
  "searchInput": "-cerbur-clutch-dsh-worktree-searchInput",
2164
2212
  "clearButton": "-cerbur-clutch-dsh-worktree-clearButton",
2165
2213
  "iconButton": "-cerbur-clutch-dsh-worktree-iconButton",
2214
+ "activityBell": "-cerbur-clutch-dsh-worktree-activityBell",
2215
+ "activityBadge": "-cerbur-clutch-dsh-worktree-activityBadge",
2216
+ "activityPanel": "-cerbur-clutch-dsh-worktree-activityPanel",
2217
+ "activityHeading": "-cerbur-clutch-dsh-worktree-activityHeading",
2218
+ "activityEmpty": "-cerbur-clutch-dsh-worktree-activityEmpty",
2219
+ "activityList": "-cerbur-clutch-dsh-worktree-activityList",
2220
+ "activityEntry": "-cerbur-clutch-dsh-worktree-activityEntry",
2221
+ "activityIdentity": "-cerbur-clutch-dsh-worktree-activityIdentity",
2222
+ "activityName": "-cerbur-clutch-dsh-worktree-activityName",
2223
+ "activityContext": "-cerbur-clutch-dsh-worktree-activityContext",
2224
+ "activityTime": "-cerbur-clutch-dsh-worktree-activityTime",
2225
+ "activityMetadata": "-cerbur-clutch-dsh-worktree-activityMetadata",
2166
2226
  "workspaceList": "-cerbur-clutch-dsh-worktree-workspaceList",
2167
2227
  "workspaceGroup": "-cerbur-clutch-dsh-worktree-workspaceGroup",
2168
2228
  "workspaceRow": "-cerbur-clutch-dsh-worktree-workspaceRow",
@@ -2280,7 +2340,7 @@ window.__ModuleLoader__.load({
2280
2340
  });
2281
2341
  }
2282
2342
  //#endregion
2283
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/dashboard/dashboard-header-action.css.mjs
2343
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/dashboard/dashboard-header-action.css.mjs
2284
2344
  const css$7 = "/* Match the native 28px circular Session-header utility controls. */\n.-cerbur-clutch-dsh-worktree-headerDashboardButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 6px;\n color: var(--dsw-alias-label-secondary);\n background: transparent;\n border: none;\n border-radius: 28px;\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-headerDashboardButton svg {\n width: 16px;\n height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-headerDashboardButton:hover,\n.-cerbur-clutch-dsh-worktree-headerDashboardButton:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n";
2285
2345
  const styleId$7 = "@cerbur/clutch-dsh-worktree/dashboard-header-action.css";
2286
2346
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/dashboard-header-action.css\"]") === null) {
@@ -2918,7 +2978,7 @@ window.__ModuleLoader__.load({
2918
2978
  }, current.key);
2919
2979
  }
2920
2980
  //#endregion
2921
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/select/single-select.css.mjs
2981
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/select/single-select.css.mjs
2922
2982
  const css$6 = ".-cerbur-clutch-dsh-worktree-singleSelectRoot { min-width: 0; width: 100%; }\n.-cerbur-clutch-dsh-worktree-singleSelectTrigger {\n display: flex; align-items: center; gap: 8px; width: 100%; min-width: 0;\n min-height: 36px; padding: 6px 10px; border-radius: var(--dsw-radius-md, 8px);\n border: 1px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-base); color: var(--dsw-alias-label-primary);\n font: inherit; text-align: start; cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-singleSelectRoot[data-size='compact'] { width: min(280px, 45vw); }\n.-cerbur-clutch-dsh-worktree-singleSelectRoot[data-size='compact'] .-cerbur-clutch-dsh-worktree-singleSelectTrigger { min-height: 28px; padding: 3px 8px; font-size: 12px; }\n.-cerbur-clutch-dsh-worktree-singleSelectTrigger:disabled, .-cerbur-clutch-dsh-worktree-singleSelectOption:disabled { opacity: .4; cursor: default; }\n.-cerbur-clutch-dsh-worktree-singleSelectTrigger:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }\n.-cerbur-clutch-dsh-worktree-singleSelectPopup {\n position: fixed; z-index: 1100; padding: 8px; box-sizing: border-box;\n border: 0; border-radius: var(--dsw-radius-lg, 12px);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2);\n --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2);\n}\n.-cerbur-clutch-dsh-worktree-singleSelectPicker { display: flex; flex-direction: column; gap: 8px; min-width: 0; }\n.-cerbur-clutch-dsh-worktree-singleSelectSearch { box-sizing: border-box; width: 100%; min-width: 0; }\n.-cerbur-clutch-dsh-worktree-singleSelectLoading { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 80px; color: var(--dsw-alias-label-secondary); font-size: 12px; }\n.-cerbur-clutch-dsh-worktree-singleSelectLoading svg { width: 16px; height: 16px; animation: singleSelectSpin 1s linear infinite; }\n@keyframes singleSelectSpin { to { transform: rotate(360deg); } }\n@media (prefers-reduced-motion: reduce) { .-cerbur-clutch-dsh-worktree-singleSelectLoading svg { animation: none; } }\n.-cerbur-clutch-dsh-worktree-singleSelectFilters { display: flex; flex-wrap: wrap; gap: 4px; }\n.-cerbur-clutch-dsh-worktree-singleSelectFilters button {\n border: 0; border-radius: var(--dsw-radius-md, 8px); padding: 4px 8px; background: transparent;\n color: var(--dsw-alias-label-secondary); font: inherit; font-size: 11px; cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-singleSelectFilters button[aria-pressed='true'], .-cerbur-clutch-dsh-worktree-singleSelectFilters button:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }\n.-cerbur-clutch-dsh-worktree-singleSelectViewport {\n height: clamp(120px, calc(100dvh - 160px), 300px); overflow-y: auto; overscroll-behavior: contain;\n padding: 4px; box-sizing: border-box; min-height: 0;\n}\n.-cerbur-clutch-dsh-worktree-singleSelectPopup .-cerbur-clutch-dsh-worktree-singleSelectViewport { height: auto; max-height: var(--single-select-viewport-height, 220px); }\n.-cerbur-clutch-dsh-worktree-singleSelectPopup .-cerbur-clutch-dsh-worktree-singleSelectEmpty { min-height: 80px; }\n.-cerbur-clutch-dsh-worktree-singleSelectGroup { display: flex; align-items: center; justify-content: space-between; gap: 8px; height: 36px; box-sizing: border-box; padding: 6px 8px; color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 15px; }\n.-cerbur-clutch-dsh-worktree-singleSelectOption {\n box-sizing: border-box;\n display: flex; align-items: center; gap: 6px; width: 100%; min-height: 34px;\n padding: 6px 8px; border: 0; border-radius: var(--dsw-radius-md, 8px); background: transparent;\n color: var(--dsw-alias-label-primary); font: inherit; font-size: 13px; line-height: 20px; text-align: start; cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-singleSelectOption:hover:not(:disabled), .-cerbur-clutch-dsh-worktree-singleSelectOption[data-highlighted='true']:not(:disabled), .-cerbur-clutch-dsh-worktree-singleSelectOption:focus-visible:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); outline: none; }\n.-cerbur-clutch-dsh-worktree-singleSelectOption[data-description='true'] { min-height: 48px; }\n.-cerbur-clutch-dsh-worktree-singleSelectText { display: flex; flex-direction: column; flex: 1; min-width: 0; }\n.-cerbur-clutch-dsh-worktree-singleSelectName { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.-cerbur-clutch-dsh-worktree-singleSelectDescription { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--dsw-alias-label-tertiary); font-size: 11px; line-height: 16px; }\n.-cerbur-clutch-dsh-worktree-singleSelectBadge { flex: none; color: var(--dsw-alias-label-tertiary); font-size: 11px; }\n.-cerbur-clutch-dsh-worktree-singleSelectTrigger > svg, .-cerbur-clutch-dsh-worktree-singleSelectOption > svg { width: 14px; height: 14px; flex: none; }\n.-cerbur-clutch-dsh-worktree-singleSelectEmpty { display: grid; place-items: center; height: 100%; color: var(--dsw-alias-label-tertiary); font-size: 13px; }\n";
2923
2983
  const styleId$6 = "@cerbur/clutch-dsh-worktree/single-select.css";
2924
2984
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/single-select.css\"]") === null) {
@@ -3319,7 +3379,7 @@ window.__ModuleLoader__.load({
3319
3379
  });
3320
3380
  }
3321
3381
  //#endregion
3322
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/branch/git-branch.css.mjs
3382
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/branch/git-branch.css.mjs
3323
3383
  const css$5 = ".-cerbur-clutch-dsh-worktree-branchFetch { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 4px; border: 0; border-radius: var(--dsw-radius-sm); background: transparent; color: var(--dsw-alias-label-secondary); cursor: pointer; }\n.-cerbur-clutch-dsh-worktree-branchFetch:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }\n.-cerbur-clutch-dsh-worktree-branchFetch:disabled { opacity: .4; cursor: default; }\n.-cerbur-clutch-dsh-worktree-branchFetch svg { width: 16px; height: 16px; }\n.-cerbur-clutch-dsh-worktree-branchFetch[aria-busy='true'] svg { animation: branchFetchSpin 1s linear infinite; }\n@keyframes branchFetchSpin { to { transform: rotate(360deg); } }\n@media (prefers-reduced-motion: reduce) { .-cerbur-clutch-dsh-worktree-branchFetch[aria-busy='true'] svg { animation: none; } }\n.-cerbur-clutch-dsh-worktree-branchFetch[data-fetch-status='success'], .-cerbur-clutch-dsh-worktree-branchFetch[data-fetch-status='error'] { width: auto; padding-inline: 6px; white-space: nowrap; font-size: 12px; line-height: 18px; }\n.-cerbur-clutch-dsh-worktree-branchFetch[data-fetch-status='success']:disabled { opacity: 1; }\n.-cerbur-clutch-dsh-worktree-branchFetch[data-fetch-status='error'] { color: var(--dsw-alias-state-error-primary); }\n";
3324
3384
  const styleId$5 = "@cerbur/clutch-dsh-worktree/git-branch.css";
3325
3385
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/git-branch.css\"]") === null) {
@@ -5125,8 +5185,9 @@ window.__ModuleLoader__.load({
5125
5185
  status: "idle",
5126
5186
  views: []
5127
5187
  };
5188
+ const EMPTY_PERMISSION_NOTICE = [];
5128
5189
  const EMPTY_PERMISSION_NOTICE_SUBSCRIBE = () => () => {};
5129
- const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => void 0;
5190
+ const EMPTY_PERMISSION_NOTICE_SNAPSHOT = () => EMPTY_PERMISSION_NOTICE;
5130
5191
  const EMPTY_FULL_ACCESS_CONFIRMATION_SUBSCRIBE = () => () => {};
5131
5192
  const EMPTY_FULL_ACCESS_CONFIRMATION_SNAPSHOT = () => void 0;
5132
5193
  const EMPTY_FORK_RECOVERY_SNAPSHOT = {
@@ -5465,7 +5526,7 @@ window.__ModuleLoader__.load({
5465
5526
  }
5466
5527
  }
5467
5528
  /** Native Workspace hover-card time copy, including the trailing "ago" marker. */
5468
- function sessionHoverTimeLabel(t, value) {
5529
+ function sessionHoverTimeLabel$1(t, value) {
5469
5530
  const label = sessionTimeLabel$1(t, value);
5470
5531
  return value.unit === "now" ? label : t("session.time.ago", { t: label });
5471
5532
  }
@@ -5491,7 +5552,7 @@ window.__ModuleLoader__.load({
5491
5552
  }),
5492
5553
  !blank && timeValue !== void 0 && (0, react_jsx_runtime.jsx)("div", {
5493
5554
  className: worktree_css_default.sessionHoverTime,
5494
- children: sessionHoverTimeLabel(t, timeValue)
5555
+ children: sessionHoverTimeLabel$1(t, timeValue)
5495
5556
  }),
5496
5557
  statuses.map((status) => (0, react_jsx_runtime.jsxs)("div", {
5497
5558
  className: worktree_css_default.sessionHoverStatus,
@@ -6910,17 +6971,24 @@ window.__ModuleLoader__.load({
6910
6971
  const recovery = recoveryAction(error);
6911
6972
  return recovery === null ? [] : [recovery];
6912
6973
  };
6913
- if (permissionNoticeSnapshot !== void 0) notices.push({
6914
- key: "permission:" + permissionNoticeSnapshot.workspaceId + ":" + permissionNoticeSnapshot.worktreeId,
6915
- text: formatWorktreePermissionNotice(permissionNoticeSnapshot.result, t),
6916
- message: (translate) => formatWorktreePermissionNotice(permissionNoticeSnapshot.result, translate),
6917
- context: t("settings.permission") + " · " + workspaceLabel(permissionNoticeSnapshot.workspaceId),
6918
- actions: permissionRetryTarget === void 0 ? [] : [{
6919
- label: t("action.retry"),
6920
- disabled: actionPending,
6921
- onClick: retryCleanupPermissions
6922
- }]
6923
- });
6974
+ for (const notice of permissionNoticeSnapshot) {
6975
+ const target = permissionRetryTarget(notice);
6976
+ notices.push({
6977
+ key: "permission:" + JSON.stringify([notice.workspaceId, notice.worktreeId]),
6978
+ text: formatWorktreePermissionNotice(notice.result, t),
6979
+ message: (translate) => formatWorktreePermissionNotice(notice.result, translate),
6980
+ context: [
6981
+ t("settings.permission"),
6982
+ workspaceLabel(notice.workspaceId),
6983
+ target?.absolutePath ?? notice.worktreeId
6984
+ ].join(" · "),
6985
+ actions: target === void 0 ? [] : [{
6986
+ label: t("action.retry"),
6987
+ disabled: actionPending,
6988
+ onClick: () => retryCleanupPermissions(notice)
6989
+ }]
6990
+ });
6991
+ }
6924
6992
  for (const recovery of forkRecoverySnapshot.pending) {
6925
6993
  const error = forkRecoveryError(recovery);
6926
6994
  notices.push({
@@ -7068,8 +7136,239 @@ window.__ModuleLoader__.load({
7068
7136
  });
7069
7137
  }
7070
7138
  //#endregion
7139
+ //#region lib/client/session/active-sessions.js
7140
+ /** Join existing ready facts only, independently of tree search, folding and row limits. */
7141
+ function activeSessions(sessions, presentations, workspaces, views) {
7142
+ const archived = new Set(workspaces.archivedSessionIds ?? []);
7143
+ const listed = new Set(sessions.ids);
7144
+ const seen = /* @__PURE__ */ new Set();
7145
+ const result = [];
7146
+ for (const workspace of workspaces.items) {
7147
+ const view = views.find((item) => item.workspaceId === workspace.workspaceId);
7148
+ const members = /* @__PURE__ */ new Set([...workspaceSessionIds(workspaces, workspace.workspaceId, sessions.ids), ...view?.bindings.map((binding) => binding.sessionId) ?? []]);
7149
+ for (const sessionId of members) {
7150
+ const presentation = presentations[sessionId];
7151
+ if (seen.has(sessionId) || !listed.has(sessionId) || archived.has(sessionId) || sessions.byId[sessionId]?.blank === true || presentation === void 0 || !presentation.ongoing && !presentation.completed && presentation.status.state !== "warning") continue;
7152
+ seen.add(sessionId);
7153
+ const binding = view?.bindings.find((item) => item.sessionId === sessionId);
7154
+ const record = view?.worktrees.find((item) => item.worktreeId === binding?.worktreeId);
7155
+ result.push({
7156
+ sessionId,
7157
+ workspaceId: workspace.workspaceId,
7158
+ workspaceTitle: workspace.title,
7159
+ worktree: binding === void 0 ? view === void 0 ? void 0 : null : record?.branch,
7160
+ presentation
7161
+ });
7162
+ }
7163
+ }
7164
+ return result.sort((a, b) => (b.presentation.updatedAt ?? 0) - (a.presentation.updatedAt ?? 0));
7165
+ }
7166
+ /** Ephemeral display clocks, never an unread owner or persisted Session fact. */
7167
+ function activityClocks(previous, presentations, now) {
7168
+ return new Map(Object.entries(presentations).map(([id, presentation]) => {
7169
+ const old = previous.get(id);
7170
+ const transitioned = old !== void 0 && old.ongoing !== presentation.ongoing;
7171
+ const newPrompt = presentation.ongoing && presentation.updatedAt !== void 0 && (old?.updatedAt === void 0 || presentation.updatedAt > old.updatedAt);
7172
+ return [id, {
7173
+ ongoing: presentation.ongoing,
7174
+ updatedAt: presentation.updatedAt,
7175
+ since: transitioned ? now : newPrompt ? presentation.updatedAt : old?.since ?? presentation.updatedAt
7176
+ }];
7177
+ }));
7178
+ }
7179
+ //#endregion
7180
+ //#region lib/client/session/session-labels.js
7181
+ /** Localize the native-compatible Session status used by both surfaces. */
7182
+ function sessionStatusLabel(t, status) {
7183
+ switch (status.labelKey) {
7184
+ case "running": return t("session.status.running");
7185
+ case "subagentsRunning": return t(status.runningSubagentCount === 1 ? "session.status.subagentsRunning.one" : "session.status.subagentsRunning.other", { n: status.runningSubagentCount });
7186
+ case "idle": return t("session.status.idle");
7187
+ case "waitingApproval": return t("session.status.waitingApproval");
7188
+ case "planReview": return t("session.status.planReview");
7189
+ case "waitingAnswer": return t("session.status.waitingAnswer");
7190
+ case "completed": return t("session.status.completed");
7191
+ }
7192
+ }
7193
+ /** Localize the compact relative time shown for idle Sessions. */
7194
+ function sessionTimeLabel(t, value) {
7195
+ switch (value.unit) {
7196
+ case "now": return t("session.time.now");
7197
+ case "minutes": return t("session.time.minutes", { n: value.n });
7198
+ case "hours": return t("session.time.hours", { n: value.n });
7199
+ case "days": return t("session.time.days", { n: value.n });
7200
+ case "months": return t("session.time.months", { n: value.n });
7201
+ case "years": return t("session.time.years", { n: value.n });
7202
+ }
7203
+ }
7204
+ /** Include the native relative-time suffix used in Session hover details. */
7205
+ function sessionHoverTimeLabel(t, value) {
7206
+ const label = sessionTimeLabel(t, value);
7207
+ return value.unit === "now" ? label : t("session.time.ago", { t: label });
7208
+ }
7209
+ //#endregion
7210
+ //#region lib/client/surface/components/SessionActivityBell.js
7211
+ function SessionActivityBell({ entries, sessions, presentations, t, hidden, onOpenSession }) {
7212
+ const [open, setOpen] = (0, react.useState)(false);
7213
+ const [now, setNow] = (0, react.useState)(Date.now);
7214
+ const clocks = (0, react.useRef)(/* @__PURE__ */ new Map());
7215
+ const root = (0, react.useRef)(null);
7216
+ const trigger = (0, react.useRef)(null);
7217
+ const panel = (0, react.useRef)(null);
7218
+ const panelId = (0, react.useId)();
7219
+ const visible = open && !hidden;
7220
+ const position = (0, _deepseek_ai_dsh_client_ui_primitives.useAnchoredPosition)({
7221
+ open: visible,
7222
+ anchorRef: trigger,
7223
+ panelRef: panel,
7224
+ side: "bottom",
7225
+ align: "end",
7226
+ gap: 8,
7227
+ margin: 8
7228
+ });
7229
+ (0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(root, visible, setOpen, panel);
7230
+ (0, react.useEffect)(() => {
7231
+ const timestamp = Date.now();
7232
+ clocks.current = activityClocks(clocks.current, presentations, timestamp);
7233
+ setNow(timestamp);
7234
+ }, [presentations]);
7235
+ (0, react.useEffect)(() => {
7236
+ if (hidden) setOpen(false);
7237
+ }, [hidden]);
7238
+ (0, react.useEffect)(() => {
7239
+ if (!visible) return;
7240
+ const timer = window.setInterval(() => setNow(Date.now()), 1e3);
7241
+ const dismiss = (event) => {
7242
+ if (event.key === "Escape") {
7243
+ event.preventDefault();
7244
+ setOpen(false);
7245
+ trigger.current?.focus();
7246
+ }
7247
+ };
7248
+ document.addEventListener("keydown", dismiss);
7249
+ return () => {
7250
+ window.clearInterval(timer);
7251
+ document.removeEventListener("keydown", dismiss);
7252
+ };
7253
+ }, [visible]);
7254
+ (0, react.useEffect)(() => {
7255
+ if (visible && position !== null) panel.current?.focus();
7256
+ }, [visible, position === null]);
7257
+ const hasActivity = entries.length > 0;
7258
+ return (0, react_jsx_runtime.jsxs)("span", {
7259
+ ref: root,
7260
+ className: worktree_css_default.activityBell,
7261
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7262
+ label: t("activity.title"),
7263
+ side: "bottom",
7264
+ delayMs: 500,
7265
+ disabled: visible,
7266
+ children: (0, react_jsx_runtime.jsxs)("button", {
7267
+ ref: trigger,
7268
+ type: "button",
7269
+ className: worktree_css_default.iconButton,
7270
+ "aria-label": hasActivity ? t("activity.count", { n: entries.length }) : t("activity.title"),
7271
+ "aria-expanded": visible,
7272
+ "aria-haspopup": "dialog",
7273
+ "aria-controls": visible ? panelId : void 0,
7274
+ "data-session-activity": hasActivity ? "active" : "empty",
7275
+ onClick: () => {
7276
+ setNow(Date.now());
7277
+ setOpen((value) => !value);
7278
+ },
7279
+ children: [(0, react_jsx_runtime.jsx)("svg", {
7280
+ width: "16",
7281
+ height: "16",
7282
+ viewBox: "0 0 16 16",
7283
+ fill: "none",
7284
+ stroke: "currentColor",
7285
+ strokeWidth: "1.25",
7286
+ strokeLinecap: "round",
7287
+ strokeLinejoin: "round",
7288
+ "aria-hidden": "true",
7289
+ children: (0, react_jsx_runtime.jsx)("path", { d: "M6.25 13a1.8 1.8 0 0 0 3.5 0M2.5 11.5c1-1 1.25-2 1.25-4.5a4.25 4.25 0 0 1 8.5 0c0 2.5.25 3.5 1.25 4.5Z" })
7290
+ }), hasActivity && (0, react_jsx_runtime.jsx)("span", {
7291
+ className: worktree_css_default.activityBadge,
7292
+ "aria-hidden": "true"
7293
+ })]
7294
+ })
7295
+ }), visible && (0, react_dom.createPortal)((0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.MenuSurface, {
7296
+ ref: panel,
7297
+ id: panelId,
7298
+ role: "dialog",
7299
+ "aria-label": t("activity.title"),
7300
+ tabIndex: -1,
7301
+ className: worktree_css_default.activityPanel,
7302
+ style: {
7303
+ ...position,
7304
+ visibility: position === null ? "hidden" : void 0
7305
+ },
7306
+ onBlur: (event) => {
7307
+ const next = event.relatedTarget;
7308
+ if (next instanceof Node && !event.currentTarget.contains(next) && !root.current?.contains(next)) setOpen(false);
7309
+ },
7310
+ children: [(0, react_jsx_runtime.jsx)("div", {
7311
+ className: worktree_css_default.activityHeading,
7312
+ children: t("activity.title")
7313
+ }), entries.length === 0 ? (0, react_jsx_runtime.jsx)("p", {
7314
+ className: worktree_css_default.activityEmpty,
7315
+ children: t("activity.empty")
7316
+ }) : (0, react_jsx_runtime.jsx)("ul", {
7317
+ className: worktree_css_default.activityList,
7318
+ children: entries.map((entry) => {
7319
+ const { sessionId, presentation } = entry;
7320
+ const status = sessionStatusLabel(t, presentation.status);
7321
+ const since = clocks.current.get(sessionId)?.since ?? presentation.updatedAt;
7322
+ const time = relativeTime(since, now);
7323
+ const duration = since === void 0 ? void 0 : Math.max(0, Math.floor((now - since) / 1e3));
7324
+ const timeLabel = time === void 0 ? void 0 : presentation.ongoing ? t("activity.runningFor", { t: duration !== void 0 && duration < 60 ? t("activity.seconds", { n: duration }) : sessionTimeLabel(t, time) }) : sessionHoverTimeLabel(t, time);
7325
+ return (0, react_jsx_runtime.jsx)("li", { children: (0, react_jsx_runtime.jsxs)("button", {
7326
+ type: "button",
7327
+ className: worktree_css_default.activityEntry,
7328
+ "data-activity-session": sessionId,
7329
+ onClick: () => {
7330
+ setOpen(false);
7331
+ onOpenSession(entry.workspaceId, sessionId);
7332
+ },
7333
+ children: [(0, react_jsx_runtime.jsxs)("span", {
7334
+ className: worktree_css_default.activityIdentity,
7335
+ children: [
7336
+ (0, react_jsx_runtime.jsx)("span", {
7337
+ className: worktree_css_default.activityName,
7338
+ children: sessionDisplayLabel(sessionId, sessions, t("session.new"))
7339
+ }),
7340
+ (0, react_jsx_runtime.jsx)("span", {
7341
+ className: worktree_css_default.activityContext,
7342
+ title: entry.workspaceTitle,
7343
+ children: entry.workspaceTitle
7344
+ }),
7345
+ (0, react_jsx_runtime.jsx)("span", {
7346
+ className: worktree_css_default.activityContext,
7347
+ title: entry.worktree ?? void 0,
7348
+ children: entry.worktree === null ? t("worktree.main") : entry.worktree ?? t("activity.unknownWorktree")
7349
+ })
7350
+ ]
7351
+ }), (0, react_jsx_runtime.jsxs)("span", {
7352
+ className: worktree_css_default.activityMetadata,
7353
+ children: [(0, react_jsx_runtime.jsx)("span", {
7354
+ role: "img",
7355
+ "aria-label": status,
7356
+ title: status,
7357
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: presentation.status.state })
7358
+ }), timeLabel !== void 0 && (0, react_jsx_runtime.jsx)("span", {
7359
+ className: worktree_css_default.activityTime,
7360
+ children: timeLabel
7361
+ })]
7362
+ })]
7363
+ }) }, sessionId);
7364
+ })
7365
+ })]
7366
+ }), document.body)]
7367
+ });
7368
+ }
7369
+ //#endregion
7071
7370
  //#region lib/client/surface/components/SurfaceHeader.js
7072
- function SurfaceHeader({ expansion, props, source, read, mutation }) {
7371
+ function SurfaceHeader({ expansion, props, source, read, mutation, onOpenSession }) {
7073
7372
  const { searchExpanded, searchRoot, setSearchExpanded, searchInput, searchQuery, setSearchQuery, setExpandedArchivedWorkspaces, setExpandedSessionGroups, setCurrentSessionReveal, currentSessionLocation } = expansion;
7074
7373
  const { t, expandState, createWorkspace, actions } = props;
7075
7374
  const { workspaceIds } = source;
@@ -7150,6 +7449,14 @@ window.__ModuleLoader__.load({
7150
7449
  (0, react_jsx_runtime.jsxs)("div", {
7151
7450
  className: cx(worktree_css_default.headerActions, searchExpanded && worktree_css_default.headerActionsHidden),
7152
7451
  children: [
7452
+ (0, react_jsx_runtime.jsx)(SessionActivityBell, {
7453
+ entries: activeSessions(source.sessions, source.sessionPresentations, source.workspaces, readState.views),
7454
+ sessions: source.sessions,
7455
+ presentations: source.sessionPresentations,
7456
+ t,
7457
+ hidden: searchExpanded || source.collapsed || !source.bounds.ready,
7458
+ onOpenSession
7459
+ }),
7153
7460
  (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7154
7461
  label: t("workspace.collapseAll"),
7155
7462
  side: "bottom",
@@ -7556,22 +7863,22 @@ window.__ModuleLoader__.load({
7556
7863
  function useLifecycleActions({ read, lifecycleState, source, props, mutation }) {
7557
7864
  const { viewByWorkspace, readStateRef, refresh, setReadState } = read;
7558
7865
  const { worktreeCleanDisk, worktreeForget, permissionRetryPending, cleanupGuard, setWorktreeBranchAdoption, worktreeBranchAdoption, branchAdoptionGuard } = lifecycleState;
7559
- const { mode, permissionNoticeSnapshot, workspaceIdsRef } = source;
7866
+ const { mode, workspaceIdsRef } = source;
7560
7867
  const { permission, permissionNotice, onPermissionNotice, manager, t, viewReader } = props;
7561
7868
  const { actionPending, setActionPending, runMutation, setActionError } = mutation;
7562
7869
  const latestLifecycleTarget = (target) => target === void 0 ? void 0 : viewByWorkspace.get(target.workspaceId)?.worktrees.find((record) => record.worktreeId === target.worktreeId);
7563
7870
  const cleanDiskTarget = latestLifecycleTarget(worktreeCleanDisk);
7564
7871
  const forgetTarget = latestLifecycleTarget(worktreeForget);
7565
- const permissionRetryTarget = mode === "worktree" && permissionNoticeSnapshot?.result.retryable === true && permission?.normalizeDetachedWorktreePermissions !== void 0 ? viewByWorkspace.get(permissionNoticeSnapshot.workspaceId)?.worktrees.find((record) => record.worktreeId === permissionNoticeSnapshot.worktreeId && record.diskCleanup === "completed") : void 0;
7566
- const retryCleanupPermissions = async () => {
7567
- if (!permissionRetryTarget || !permission || actionPending || permissionRetryPending.current) return;
7872
+ const permissionRetryTarget = (notice) => mode === "worktree" && notice.result.retryable === true && permission?.normalizeDetachedWorktreePermissions !== void 0 ? viewByWorkspace.get(notice.workspaceId)?.worktrees.find((record) => record.worktreeId === notice.worktreeId && record.diskCleanup === "completed") : void 0;
7873
+ const retryCleanupPermissions = async (notice) => {
7874
+ const record = permissionRetryTarget(notice);
7875
+ if (!record || !permission || actionPending || permissionRetryPending.current) return;
7568
7876
  const target = {
7569
- workspaceId: permissionRetryTarget.workspaceId,
7570
- worktreeId: permissionRetryTarget.worktreeId
7877
+ workspaceId: record.workspaceId,
7878
+ worktreeId: record.worktreeId
7571
7879
  };
7572
- const notice = permissionNoticeSnapshot;
7573
7880
  const generation = cleanupGuard.current.begin();
7574
- const isCurrent = () => cleanupGuard.current.isCurrent(generation) && permissionNotice?.getSnapshot() === notice && readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId && view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === "completed"));
7881
+ const isCurrent = () => cleanupGuard.current.isCurrent(generation) && permissionNotice?.getSnapshot().includes(notice) === true && readStateRef.current.views.some((view) => view.workspaceId === target.workspaceId && view.worktrees.some((record) => record.worktreeId === target.worktreeId && record.diskCleanup === "completed"));
7575
7882
  if (!isCurrent()) return;
7576
7883
  permissionRetryPending.current = true;
7577
7884
  setActionPending(true);
@@ -7676,9 +7983,168 @@ window.__ModuleLoader__.load({
7676
7983
  };
7677
7984
  }
7678
7985
  //#endregion
7986
+ //#region lib/client/dashboard/batch-manage.js
7987
+ function sameBatchTarget(current, confirmed) {
7988
+ return [
7989
+ "workspaceId",
7990
+ "worktreeId",
7991
+ "absolutePath",
7992
+ "gitRootPath",
7993
+ "branch",
7994
+ "source",
7995
+ "status",
7996
+ "diskCleanup",
7997
+ "baseCommit"
7998
+ ].every((key) => current[key] === confirmed[key]);
7999
+ }
8000
+ function canManageWorktree(record, action) {
8001
+ if (isMainWorktreeId$1(record.worktreeId) || !record.mutationToken || record.health === "recovery-needed") return false;
8002
+ if (action === "archive") return record.status === "active";
8003
+ if (action === "clean") return record.status === "removed" && record.diskCleanup !== "completed" && record.health !== "branch-drift";
8004
+ return record.status === "removed";
8005
+ }
8006
+ /** Freeze confirmed identities; each Host call still validates its mutation token. */
8007
+ async function runWorktreeBatch(action, records, execute, isCurrent, onResult) {
8008
+ for (const record of records) {
8009
+ if (!isCurrent()) break;
8010
+ try {
8011
+ if (!canManageWorktree(record, action)) throw {
8012
+ code: "WORKTREE_STATE_CONFLICT",
8013
+ retryable: true
8014
+ };
8015
+ await execute(action, record, isCurrent);
8016
+ if (isCurrent()) onResult({ record });
8017
+ } catch (error) {
8018
+ if (isCurrent()) onResult({
8019
+ record,
8020
+ error: toWorktreeViewError(error)
8021
+ });
8022
+ }
8023
+ }
8024
+ }
8025
+ //#endregion
8026
+ //#region lib/client/surface/actions/useDashboardBatchManage.js
8027
+ /** Batch callers confirm once; each item keeps single-item commit and follow-up semantics. */
8028
+ function useDashboardBatchManage(input) {
8029
+ const latest = (0, react.useRef)(input);
8030
+ latest.current = input;
8031
+ const manager = input.props.manager;
8032
+ const reader = input.reader;
8033
+ const busy = (0, react.useRef)();
8034
+ return (0, react.useCallback)(async (action, confirmed, ownerCurrent = () => true) => {
8035
+ const { props, read, mutation, expansion, session, lifecycleState } = latest.current;
8036
+ const conflict = () => ({
8037
+ code: "WORKTREE_STATE_CONFLICT",
8038
+ message: "",
8039
+ retryable: true,
8040
+ details: {
8041
+ workspaceId: confirmed.workspaceId,
8042
+ worktreeId: confirmed.worktreeId
8043
+ }
8044
+ });
8045
+ if (busy.current?.isCurrent() || !manager || props.manager !== manager || latest.current.reader !== reader || !ownerCurrent()) throw conflict();
8046
+ const guard = lifecycleState.cleanupGuard.current;
8047
+ const generation = guard.begin();
8048
+ const lifecycleCurrent = () => latest.current.props.manager === manager && latest.current.reader === reader && latest.current.lifecycleState.cleanupGuard.current === guard && guard.isCurrent(generation);
8049
+ const operation = { isCurrent: lifecycleCurrent };
8050
+ busy.current = operation;
8051
+ mutation.setActionPending(true);
8052
+ try {
8053
+ const view = await reader.read(confirmed.workspaceId);
8054
+ const record = view.worktrees.find((value) => value.worktreeId === confirmed.worktreeId);
8055
+ if (!ownerCurrent() || !lifecycleCurrent() || !read.readStateRef.current.views.some((value) => value.workspaceId === confirmed.workspaceId) || !record || !sameBatchTarget(record, confirmed) || !canManageWorktree(record, action)) throw conflict();
8056
+ const target = {
8057
+ workspaceId: record.workspaceId,
8058
+ worktreeId: record.worktreeId,
8059
+ mutationToken: record.mutationToken
8060
+ };
8061
+ const refresh = () => read.refresh({
8062
+ scope: {
8063
+ kind: "workspace",
8064
+ workspaceId: record.workspaceId
8065
+ },
8066
+ preserveCurrent: true
8067
+ });
8068
+ if (action === "archive") {
8069
+ await manager.removeWorktree(target);
8070
+ if (!lifecycleCurrent()) return;
8071
+ expansion.suppressCurrentSessionReveal("archived:" + record.workspaceId);
8072
+ } else if (action === "forget") {
8073
+ await manager.forgetWorktree(target);
8074
+ if (!lifecycleCurrent()) return;
8075
+ props.onWorktreeForgotten?.({
8076
+ workspaceId: record.workspaceId,
8077
+ worktreeId: record.worktreeId,
8078
+ sessionIds: bindingIdsFor(view?.bindings ?? [], record.worktreeId)
8079
+ });
8080
+ if (session.pendingSessionBinding?.worktreeId === record.worktreeId) session.setPendingSessionBinding(void 0);
8081
+ expansion.clearSessionGroups(["worktree:" + record.worktreeId]);
8082
+ read.setReadState((current) => ({
8083
+ ...current,
8084
+ views: current.views.map((value) => value.workspaceId !== record.workspaceId ? value : {
8085
+ ...value,
8086
+ worktrees: value.worktrees.filter((item) => item.worktreeId !== record.worktreeId),
8087
+ bindings: value.bindings.filter((item) => item.worktreeId !== record.worktreeId)
8088
+ })
8089
+ }));
8090
+ } else {
8091
+ await runWorktreeCleanupFlow({
8092
+ clean: () => manager.cleanWorktree(target),
8093
+ isCurrent: lifecycleCurrent,
8094
+ onCommitted: () => read.setReadState((current) => ({
8095
+ ...current,
8096
+ views: current.views.map((value) => value.workspaceId !== record.workspaceId ? value : {
8097
+ ...value,
8098
+ worktrees: value.worktrees.map((item) => item.worktreeId !== record.worktreeId ? item : {
8099
+ ...item,
8100
+ status: "removed",
8101
+ diskCleanup: "completed",
8102
+ health: "cleaned",
8103
+ mutationToken: void 0
8104
+ }),
8105
+ bindings: value.bindings.map((item) => item.worktreeId !== record.worktreeId ? item : {
8106
+ ...item,
8107
+ status: "detached"
8108
+ })
8109
+ })
8110
+ })),
8111
+ refresh,
8112
+ normalize: async () => {
8113
+ if (!props.permission?.normalizeDetachedWorktreePermissions) return;
8114
+ try {
8115
+ const result = await props.permission.normalizeDetachedWorktreePermissions(target);
8116
+ if (result && lifecycleCurrent()) props.onPermissionNotice?.(target, result);
8117
+ } catch {
8118
+ if (lifecycleCurrent()) props.onPermissionNotice?.(target, {
8119
+ status: "unverified",
8120
+ retryable: true
8121
+ });
8122
+ }
8123
+ },
8124
+ onFollowUpError: () => {}
8125
+ });
8126
+ return;
8127
+ }
8128
+ if (lifecycleCurrent()) await refresh().catch(() => {});
8129
+ } catch (cause) {
8130
+ if (lifecycleCurrent()) await read.refresh({
8131
+ scope: {
8132
+ kind: "workspace",
8133
+ workspaceId: confirmed.workspaceId
8134
+ },
8135
+ preserveCurrent: true
8136
+ }).catch(() => {});
8137
+ throw cause;
8138
+ } finally {
8139
+ if (busy.current === operation) busy.current = void 0;
8140
+ if (lifecycleCurrent()) mutation.setActionPending(false);
8141
+ }
8142
+ }, [manager, reader]);
8143
+ }
8144
+ //#endregion
7679
8145
  //#region lib/client/surface/state/useLifecycleState.js
7680
8146
  function useLifecycleState({ props, source, mutation }) {
7681
- const { manager } = props;
8147
+ const { manager, viewReader } = props;
7682
8148
  const { mode } = source;
7683
8149
  const { setActionPending } = mutation;
7684
8150
  const [worktreeBranchAdoption, setWorktreeBranchAdoption] = (0, react.useState)();
@@ -7691,14 +8157,22 @@ window.__ModuleLoader__.load({
7691
8157
  const guard = branchAdoptionGuard.current;
7692
8158
  setWorktreeBranchAdoption(void 0);
7693
8159
  return () => guard.invalidate();
7694
- }, [manager, mode]);
8160
+ }, [
8161
+ manager,
8162
+ mode,
8163
+ viewReader
8164
+ ]);
7695
8165
  const permissionRetryPending = (0, react.useRef)(false);
7696
8166
  (0, react.useEffect)(() => {
7697
8167
  const guard = cleanupGuard.current;
7698
8168
  permissionRetryPending.current = false;
7699
8169
  setActionPending(false);
7700
8170
  return () => guard.invalidate();
7701
- }, [manager, mode]);
8171
+ }, [
8172
+ manager,
8173
+ mode,
8174
+ viewReader
8175
+ ]);
7702
8176
  return {
7703
8177
  worktreeBranchAdoption,
7704
8178
  setWorktreeBranchAdoption,
@@ -9596,31 +10070,6 @@ window.__ModuleLoader__.load({
9596
10070
  };
9597
10071
  }
9598
10072
  //#endregion
9599
- //#region lib/client/session/session-labels.js
9600
- /** Localize the native-compatible Session status used by both surfaces. */
9601
- function sessionStatusLabel(t, status) {
9602
- switch (status.labelKey) {
9603
- case "running": return t("session.status.running");
9604
- case "subagentsRunning": return t(status.runningSubagentCount === 1 ? "session.status.subagentsRunning.one" : "session.status.subagentsRunning.other", { n: status.runningSubagentCount });
9605
- case "idle": return t("session.status.idle");
9606
- case "waitingApproval": return t("session.status.waitingApproval");
9607
- case "planReview": return t("session.status.planReview");
9608
- case "waitingAnswer": return t("session.status.waitingAnswer");
9609
- case "completed": return t("session.status.completed");
9610
- }
9611
- }
9612
- /** Localize the compact relative time shown for idle Sessions. */
9613
- function sessionTimeLabel(t, value) {
9614
- switch (value.unit) {
9615
- case "now": return t("session.time.now");
9616
- case "minutes": return t("session.time.minutes", { n: value.n });
9617
- case "hours": return t("session.time.hours", { n: value.n });
9618
- case "days": return t("session.time.days", { n: value.n });
9619
- case "months": return t("session.time.months", { n: value.n });
9620
- case "years": return t("session.time.years", { n: value.n });
9621
- }
9622
- }
9623
- //#endregion
9624
10073
  //#region lib/client/dashboard/vscode-url.js
9625
10074
  /** Encode path segments while retaining Windows drive and directory separators. */
9626
10075
  function vscodeFolderUrl(absolutePath) {
@@ -9698,7 +10147,7 @@ window.__ModuleLoader__.load({
9698
10147
  };
9699
10148
  const defaultOpenInAppController = new OpenInAppController();
9700
10149
  //#endregion
9701
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/dashboard/open-in-app.css.mjs
10150
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/dashboard/open-in-app.css.mjs
9702
10151
  const css$4 = ".-cerbur-clutch-dsh-worktree-control {\n display: inline-flex;\n align-self: flex-end;\n}\n\n.-cerbur-clutch-dsh-worktree-split {\n display: inline-flex;\n align-items: stretch;\n box-sizing: border-box;\n height: 28px;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: 14px;\n overflow: hidden;\n font-family: var(--dsw-font-family);\n}\n\n.-cerbur-clutch-dsh-worktree-split .-cerbur-clutch-dsh-worktree-main,\n.-cerbur-clutch-dsh-worktree-split .-cerbur-clutch-dsh-worktree-chevron {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n border: 0;\n background: none;\n color: var(--dsw-alias-label-primary);\n font-size: 11px;\n font-weight: 400;\n line-height: 16px;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-main {\n padding: 5px 6px 5px 7px;\n}\n\n.-cerbur-clutch-dsh-worktree-main:hover:not(:disabled),\n.-cerbur-clutch-dsh-worktree-main:focus-visible,\n.-cerbur-clutch-dsh-worktree-chevron:hover,\n.-cerbur-clutch-dsh-worktree-chevron:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.-cerbur-clutch-dsh-worktree-main:disabled {\n color: var(--dsw-alias-label-dimmed);\n cursor: wait;\n}\n\n.-cerbur-clutch-dsh-worktree-main[data-state='error'] {\n color: var(--dsw-alias-state-error-primary, #e03e3e);\n box-shadow: inset 0 0 0 1px var(--dsw-alias-state-error-primary, #e03e3e);\n}\n\n.-cerbur-clutch-dsh-worktree-split .-cerbur-clutch-dsh-worktree-chevron {\n padding: 5px 6px 5px 4px;\n border-left: 0.5px solid var(--dsw-alias-border-l4);\n color: var(--dsw-alias-label-secondary);\n}\n\n.-cerbur-clutch-dsh-worktree-icon {\n flex: none;\n}\n\n.-cerbur-clutch-dsh-worktree-split .-cerbur-clutch-dsh-worktree-icon {\n width: 16px;\n height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-split .-cerbur-clutch-dsh-worktree-chevron svg {\n width: 12px;\n height: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-fallback {\n text-decoration: none;\n align-self: flex-end;\n}\n\nimg.-cerbur-clutch-dsh-worktree-icon {\n display: block;\n object-fit: contain;\n user-select: none;\n}\n";
9703
10152
  const styleId$4 = "@cerbur/clutch-dsh-worktree/open-in-app.css";
9704
10153
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/open-in-app.css\"]") === null) {
@@ -9909,8 +10358,8 @@ window.__ModuleLoader__.load({
9909
10358
  };
9910
10359
  }
9911
10360
  //#endregion
9912
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/dashboard/dashboard.css.mjs
9913
- const css$3 = ".-cerbur-clutch-dsh-worktree-dashboardSurface {\n position: absolute;\n box-sizing: border-box;\n z-index: 2;\n overflow: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n container-type: inline-size;\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-primary, #19212f);\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardSurface *,\n.-cerbur-clutch-dsh-worktree-dashboardSurface *::before,\n.-cerbur-clutch-dsh-worktree-dashboardSurface *::after {\n box-sizing: border-box;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface button:not(.-cerbur-clutch-dsh-worktree-dashboardRefButton) {\n font: inherit;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface svg {\n width: 18px;\n height: 18px;\n flex: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface code {\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface button:focus-visible,\n.-cerbur-clutch-dsh-worktree-dashboardSurface a:focus-visible,\n.-cerbur-clutch-dsh-worktree-dashboardPanel:focus-visible {\n outline: 2px solid #497cd4;\n outline-offset: 3px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface h1:focus {\n outline: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPage {\n max-width: 1240px;\n margin: 0 auto;\n padding: 24px 30px 28px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions {\n list-style: none;\n padding: 0;\n margin: 12px 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions button {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 12px 8px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionLabel {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionMeta {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: flex-end;\n min-width: 28px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardChildPath {\n display: block;\n margin-top: 4px;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #788191);\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardChildState {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionStatus {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionTime {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n line-height: 20px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions button:hover,\n.-cerbur-clutch-dsh-worktree-dashboardSessions button[aria-current] {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface a {\n text-decoration: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button:not(:disabled) {\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline {\n position: sticky;\n top: 0;\n z-index: 3;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n justify-content: space-between;\n gap: 8px 20px;\n min-height: 50px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-secondary, #677080);\n font-size: 13px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline > span {\n flex: 1 1 120px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline > span > span {\n margin: 0 8px;\n opacity: 0.5;\n}\n.-cerbur-clutch-dsh-worktree-dashboardToplineActions {\n display: inline-flex;\n flex-wrap: nowrap;\n flex-shrink: 0;\n align-items: center;\n gap: 8px;\n margin-inline-start: auto;\n max-width: 100%;\n -webkit-app-region: no-drag;\n}\n/* AppFrame's native reopen/New Session seat follows shell.-cerbur-clutch-dsh-worktree-overlay in DOM order.\n Keep its existing actions above the Dashboard, with its published clearance\n reserved in the title. This rule disappears as soon as the Dashboard closes. */\nhtml[data-platform='darwin']\n [data-sidebar-collapsed]:has([data-worktree-dashboard], [data-worktree-dashboard-request])\n > [data-shell-leading] {\n z-index: 21;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 6px;\n border: 0;\n border-radius: 28px;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #677080);\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton svg {\n width: 15px;\n height: 15px;\n transform: scaleX(-1);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeader {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(260px, 0.45fr);\n gap: 32px;\n margin-bottom: 15px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIdentity {\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow > svg {\n width: 24px;\n height: 24px;\n color: #3e73ca;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow h1 {\n font-size: 25px;\n letter-spacing: -0.6px;\n line-height: 1.3;\n font-weight: 650;\n margin: 0;\n flex: 0 1 auto;\n overflow: hidden;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardRefButton {\n display: block;\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth,\n.-cerbur-clutch-dsh-worktree-dashboardSoon {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n white-space: nowrap;\n border-radius: 6px;\n padding: 3px 7px;\n font-size: 11px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #687182);\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='ready'] {\n background: color-mix(in srgb, #1eab78 13%, transparent);\n color: #21976f;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='repair'],\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='recovery-needed'],\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='branch-drift'] {\n background: color-mix(in srgb, #e7a839 14%, transparent);\n color: #b27a1e;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPath {\n display: flex;\n align-items: flex-start;\n gap: 9px;\n margin-top: 12px;\n color: var(--dsw-alias-label-secondary, #697283);\n}\n.-cerbur-clutch-dsh-worktree-dashboardPath code {\n padding-top: 4px;\n overflow-wrap: anywhere;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFieldLabel {\n font-size: 10px;\n border: 1px solid var(--dsw-alias-border-l3, #e5e7ed);\n border-radius: 4px;\n padding: 2px 5px;\n margin-top: 2px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 29px;\n height: 29px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardCopyStatus {\n font-size: 12px;\n margin: 4px 0 0;\n min-height: 18px;\n color: #21976f;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCopyStatus[role='alert'] {\n color: #bd5d43;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside > button,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside > a {\n align-self: flex-end;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 7px;\n padding: 6px 11px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #fff);\n color: inherit;\n white-space: nowrap;\n cursor: pointer;\n font-size: 12px !important;\n line-height: 1.5;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton:disabled {\n color: var(--dsw-alias-label-secondary, #737e8e);\n cursor: not-allowed;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton:not(:disabled):hover {\n background: var(--dsw-alias-interactive-bg-hover, #f4f6f9);\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs {\n display: flex;\n gap: 22px;\n overflow-x: auto;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #e1e5ed);\n margin-bottom: 24px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n gap: 8px;\n padding: 12px 2px;\n border: 0;\n border-bottom: 2px solid transparent;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #6c7480);\n cursor: pointer;\n font-size: 13px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs button[aria-selected='true'] {\n color: #4276c8;\n border-bottom-color: #4276c8;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs svg {\n width: 16px;\n height: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPanel {\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardGrid {\n display: grid;\n grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);\n gap: 20px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardColumn {\n display: flex;\n flex-direction: column;\n gap: 20px;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard,\n.-cerbur-clutch-dsh-worktree-dashboardStart {\n padding: 20px;\n border: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n border-radius: 11px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard h2,\n.-cerbur-clutch-dsh-worktree-dashboardStart h2 {\n display: flex;\n align-items: center;\n gap: 9px;\n font-size: 16px;\n font-weight: 620;\n line-height: 1.4;\n margin: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard p,\n.-cerbur-clutch-dsh-worktree-dashboardStart > p {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #7b8290);\n margin: 8px 0 15px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCardHeading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 10px;\n margin-bottom: 7px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStart {\n background: linear-gradient(\n 115deg,\n color-mix(in srgb, #6b9eff 9%, transparent),\n color-mix(in srgb, #6b9eff 3%, transparent)\n );\n}\n.-cerbur-clutch-dsh-worktree-dashboardStart h2 > svg {\n color: #477bc6;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 13px;\n margin-top: 23px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 18px 14px;\n text-align: left;\n border: 1px solid color-mix(in srgb, #7299e7 28%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, #6b9eff 5%, transparent);\n color: #4673bc;\n cursor: not-allowed;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button:nth-child(2) {\n color: #38846e;\n border-color: color-mix(in srgb, #4fba9a 25%, transparent);\n background: color-mix(in srgb, #4fba9a 5%, transparent);\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions svg {\n width: 23px;\n height: 23px;\n margin-top: 3px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions strong {\n display: block;\n font-size: 14px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions small {\n display: block;\n margin-top: 6px;\n line-height: 1.6;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #69788a);\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions em {\n display: block;\n font-size: 10px;\n font-style: normal;\n margin-top: 10px;\n opacity: 0.75;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder {\n padding: 26px 20px;\n min-height: 177px;\n border: 1px dashed var(--dsw-alias-border-l3, #dfe4ed);\n border-radius: 7px;\n background: var(--dsw-alias-interactive-bg-hover, #f7f8fa);\n text-align: center;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder > svg {\n display: block;\n margin: 0 auto 10px;\n width: 25px;\n height: 25px;\n color: #929cac;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder strong {\n font-size: 13px;\n font-weight: 500;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder p {\n max-width: 310px;\n margin: 7px auto 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardEmpty {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n min-height: 78px;\n padding: 10px 8px;\n text-align: center;\n}\n.-cerbur-clutch-dsh-worktree-dashboardEmpty p {\n max-width: 300px;\n margin: 0;\n line-height: 1.7;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts {\n margin: 8px 0 14px;\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div {\n display: grid;\n grid-template-columns: minmax(70px, 0.65fr) minmax(0, 1fr);\n gap: 12px;\n align-items: center;\n padding: 11px 0;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #eef0f5);\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div:last-child {\n border: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dt {\n grid-column: 1;\n min-width: 0;\n color: var(--dsw-alias-label-secondary, #788191);\n /* Prefer normal break points (including trailing `/` and `-`) first. */\n overflow-wrap: break-word;\n word-break: normal;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dd {\n grid-column: 2;\n min-width: 0;\n margin: 0;\n text-align: right;\n /* Only split an unbreakable value after natural opportunities are exhausted. */\n overflow-wrap: break-word;\n word-break: normal;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div:has(.-cerbur-clutch-dsh-worktree-dashboardFactAction > *) {\n grid-template-columns: minmax(70px, 0.65fr) minmax(0, 1fr) 29px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dd > span {\n max-width: 100%;\n flex-wrap: wrap;\n justify-content: flex-end;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFactAction {\n display: flex;\n grid-column: 3;\n align-items: center;\n justify-content: flex-end;\n min-width: 29px;\n min-height: 29px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFactAction:empty { display: none; }\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts {\n width: 100%;\n margin: 0;\n padding: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts > div,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts > div:has(.-cerbur-clutch-dsh-worktree-dashboardFactAction > *) {\n grid-template-columns: minmax(60px, 0.55fr) minmax(0, 1fr) 26px;\n gap: 8px;\n min-height: 34px;\n padding: 3px 0;\n border: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts time {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-secondary, #687182);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardFactAction {\n min-width: 26px;\n min-height: 26px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton {\n width: 26px;\n height: 26px;\n border-radius: 6px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton:hover,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton:focus-visible {\n background: transparent;\n color: var(--dsw-alias-label-primary, #19212f);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton svg {\n width: 14px;\n height: 14px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHistorical {\n color: var(--dsw-alias-label-secondary, #788191);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions p {\n margin: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions input {\n margin-top: 4px;\n accent-color: var(--dsw-alias-text-link, #3e73ca);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions small {\n display: block;\n margin-top: 4px;\n color: var(--dsw-alias-label-secondary, #788191);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-primary, #19212f);\n text-align: left;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink > span {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink svg {\n width: 14px;\n height: 14px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:hover,\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:focus-visible {\n color: var(--dsw-alias-text-link, #3e73ca);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:hover svg,\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:focus-visible svg {\n color: inherit;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton:disabled {\n color: var(--dsw-alias-label-secondary, #788191);\n cursor: not-allowed;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselineModal {\n box-sizing: border-box;\n width: min(440px, calc(100vw - 48px));\n max-height: calc(100vh - 48px);\n max-height: calc(100dvh - 48px);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselineModalContent {\n box-sizing: border-box;\n min-height: 0;\n overflow-y: auto;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselinePicker {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardLink {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n background: transparent;\n border: 1px solid var(--dsw-alias-border-l3, #e2e6ed);\n border-radius: 6px;\n padding: 7px 10px;\n font-size: 12px !important;\n color: inherit;\n cursor: pointer;\n margin-top: 8px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardLink:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f5f7fa);\n}\n.-cerbur-clutch-dsh-worktree-dashboardQuickActions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardQuickActions .-cerbur-clutch-dsh-worktree-dashboardButton {\n justify-content: flex-start;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 390px;\n padding: 40px 24px;\n text-align: center;\n border: 1px dashed var(--dsw-alias-border-l3, #dde3ec);\n border-radius: 11px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder > svg {\n width: 36px;\n height: 36px;\n color: #7c9bcf;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder h2 {\n font-size: 20px;\n font-weight: 600;\n margin: 16px 0 4px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder p {\n max-width: 420px;\n font-size: 13px;\n color: var(--dsw-alias-label-secondary, #7b8596);\n margin: 8px 0 18px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFooter {\n margin: 23px 0 0;\n text-align: center;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary, #8a92a0);\n}\n\n@container (max-width: 820px) {\n .-cerbur-clutch-dsh-worktree-dashboardPage {\n padding: 20px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardHeader {\n grid-template-columns: minmax(0, 1fr);\n gap: 12px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardHeaderAside {\n display: flex;\n }\n .-cerbur-clutch-dsh-worktree-dashboardGrid {\n grid-template-columns: minmax(0, 1fr);\n }\n .-cerbur-clutch-dsh-worktree-dashboardTabs {\n gap: 18px;\n }\n}\n\n@container (max-width: 440px) {\n .-cerbur-clutch-dsh-worktree-dashboardPage {\n padding: 16px 12px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardTitleRow h1 {\n font-size: 22px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardStartActions {\n grid-template-columns: minmax(0, 1fr);\n }\n .-cerbur-clutch-dsh-worktree-dashboardCard,\n .-cerbur-clutch-dsh-worktree-dashboardStart {\n padding: 16px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardTopline {\n gap: 10px;\n }\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionsText {\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n max-height: 240px;\n overflow: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardInstructionsInput {\n box-sizing: border-box;\n width: 100%;\n resize: vertical;\n padding: 10px;\n border: 1px solid var(--dsw-alias-border-l4);\n border-radius: 8px;\n background: var(--dsw-alias-bg-base);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardInstructionActions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n";
10361
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/dashboard/dashboard.css.mjs
10362
+ const css$3 = ".-cerbur-clutch-dsh-worktree-dashboardSurface {\n position: absolute;\n box-sizing: border-box;\n z-index: 2;\n overflow: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n container-type: inline-size;\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-primary, #19212f);\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardSurface *,\n.-cerbur-clutch-dsh-worktree-dashboardSurface *::before,\n.-cerbur-clutch-dsh-worktree-dashboardSurface *::after {\n box-sizing: border-box;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface button:not(.-cerbur-clutch-dsh-worktree-dashboardRefButton) {\n font: inherit;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface svg {\n width: 18px;\n height: 18px;\n flex: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface code {\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface button:focus-visible,\n.-cerbur-clutch-dsh-worktree-dashboardSurface a:focus-visible,\n.-cerbur-clutch-dsh-worktree-dashboardPanel:focus-visible {\n outline: 2px solid #497cd4;\n outline-offset: 3px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface h1:focus {\n outline: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPage {\n max-width: 1240px;\n margin: 0 auto;\n padding: 24px 30px 28px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions {\n list-style: none;\n padding: 0;\n margin: 12px 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions button {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 12px 8px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionLabel {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionMeta {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: flex-end;\n min-width: 28px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardChildPath {\n display: block;\n margin-top: 4px;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #788191);\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardChildState {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: flex-end;\n gap: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardManageToolbar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 20px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageToolbar label,\n.-cerbur-clutch-dsh-worktree-dashboardManageStopped {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageHint {\n color: var(--dsw-alias-label-secondary, #788191);\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageList,\n.-cerbur-clutch-dsh-worktree-dashboardManageResults,\n.-cerbur-clutch-dsh-worktree-dashboardManageConfirmList {\n list-style: none;\n padding: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageList label {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 8px;\n border-radius: 6px;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageList label:hover,\n.-cerbur-clutch-dsh-worktree-dashboardManageList label:has(input:checked) {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageList label:has(input:focus-visible) {\n outline: 2px solid #497cd4;\n outline-offset: 2px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageList input,\n.-cerbur-clutch-dsh-worktree-dashboardManageToolbar input,\n.-cerbur-clutch-dsh-worktree-dashboardManageStopped input {\n flex: none;\n accent-color: var(--dsw-alias-brand-primary, #497cd4);\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageResults li,\n.-cerbur-clutch-dsh-worktree-dashboardManageConfirmList li {\n padding: 8px 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageConfirmList {\n max-height: 260px;\n overflow: auto;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageConfirmList code {\n display: block;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardManageResults [data-batch-result='failed'] {\n color: var(--dsw-alias-label-error, #d34b4b);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionStatus {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessionTime {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n line-height: 20px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSessions button:hover,\n.-cerbur-clutch-dsh-worktree-dashboardSessions button[aria-current] {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSurface a {\n text-decoration: none;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button:not(:disabled) {\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline {\n position: sticky;\n top: 0;\n z-index: 3;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n justify-content: space-between;\n gap: 8px 20px;\n min-height: 50px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-secondary, #677080);\n font-size: 13px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline > span {\n flex: 1 1 120px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTopline > span > span {\n margin: 0 8px;\n opacity: 0.5;\n}\n.-cerbur-clutch-dsh-worktree-dashboardToplineActions {\n display: inline-flex;\n flex-wrap: nowrap;\n flex-shrink: 0;\n align-items: center;\n gap: 8px;\n margin-inline-start: auto;\n max-width: 100%;\n -webkit-app-region: no-drag;\n}\n/* AppFrame's native reopen/New Session seat follows shell.-cerbur-clutch-dsh-worktree-overlay in DOM order.\n Keep its existing actions above the Dashboard, with its published clearance\n reserved in the title. This rule disappears as soon as the Dashboard closes. */\nhtml[data-platform='darwin']\n [data-sidebar-collapsed]:has([data-worktree-dashboard], [data-worktree-dashboard-request])\n > [data-shell-leading] {\n z-index: 21;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 6px;\n border: 0;\n border-radius: 28px;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #677080);\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSidebarButton svg {\n width: 15px;\n height: 15px;\n transform: scaleX(-1);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeader {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(260px, 0.45fr);\n gap: 32px;\n margin-bottom: 15px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIdentity {\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: wrap;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow > svg {\n width: 24px;\n height: 24px;\n color: #3e73ca;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTitleRow h1 {\n font-size: 25px;\n letter-spacing: -0.6px;\n line-height: 1.3;\n font-weight: 650;\n margin: 0;\n flex: 0 1 auto;\n overflow: hidden;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardRefButton {\n display: block;\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth,\n.-cerbur-clutch-dsh-worktree-dashboardSoon {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n white-space: nowrap;\n border-radius: 6px;\n padding: 3px 7px;\n font-size: 11px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #687182);\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='ready'] {\n background: color-mix(in srgb, #1eab78 13%, transparent);\n color: #21976f;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='repair'],\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='recovery-needed'],\n.-cerbur-clutch-dsh-worktree-dashboardHealth[data-health='branch-drift'] {\n background: color-mix(in srgb, #e7a839 14%, transparent);\n color: #b27a1e;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPath {\n display: flex;\n align-items: flex-start;\n gap: 9px;\n margin-top: 12px;\n color: var(--dsw-alias-label-secondary, #697283);\n}\n.-cerbur-clutch-dsh-worktree-dashboardPath code {\n padding-top: 4px;\n overflow-wrap: anywhere;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFieldLabel {\n font-size: 10px;\n border: 1px solid var(--dsw-alias-border-l3, #e5e7ed);\n border-radius: 4px;\n padding: 2px 5px;\n margin-top: 2px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 29px;\n height: 29px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n.-cerbur-clutch-dsh-worktree-dashboardCopyStatus {\n font-size: 12px;\n margin: 4px 0 0;\n min-height: 18px;\n color: #21976f;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCopyStatus[role='alert'] {\n color: #bd5d43;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 8px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside > button,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderAside > a {\n align-self: flex-end;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 7px;\n padding: 6px 11px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #fff);\n color: inherit;\n white-space: nowrap;\n cursor: pointer;\n font-size: 12px !important;\n line-height: 1.5;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton:disabled {\n color: var(--dsw-alias-label-secondary, #737e8e);\n cursor: not-allowed;\n}\n.-cerbur-clutch-dsh-worktree-dashboardButton:not(:disabled):hover {\n background: var(--dsw-alias-interactive-bg-hover, #f4f6f9);\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs {\n display: flex;\n gap: 22px;\n overflow-x: auto;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #e1e5ed);\n margin-bottom: 24px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n gap: 8px;\n padding: 12px 2px;\n border: 0;\n border-bottom: 2px solid transparent;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #6c7480);\n cursor: pointer;\n font-size: 13px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs button[aria-selected='true'] {\n color: #4276c8;\n border-bottom-color: #4276c8;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabs svg {\n width: 16px;\n height: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardPanel {\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardGrid {\n display: grid;\n grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);\n gap: 20px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardColumn {\n display: flex;\n flex-direction: column;\n gap: 20px;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard,\n.-cerbur-clutch-dsh-worktree-dashboardStart {\n padding: 20px;\n border: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n border-radius: 11px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard h2,\n.-cerbur-clutch-dsh-worktree-dashboardStart h2 {\n display: flex;\n align-items: center;\n gap: 9px;\n font-size: 16px;\n font-weight: 620;\n line-height: 1.4;\n margin: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCard p,\n.-cerbur-clutch-dsh-worktree-dashboardStart > p {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #7b8290);\n margin: 8px 0 15px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardCardHeading {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 10px;\n margin-bottom: 7px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStart {\n background: linear-gradient(\n 115deg,\n color-mix(in srgb, #6b9eff 9%, transparent),\n color-mix(in srgb, #6b9eff 3%, transparent)\n );\n}\n.-cerbur-clutch-dsh-worktree-dashboardStart h2 > svg {\n color: #477bc6;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 13px;\n margin-top: 23px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 18px 14px;\n text-align: left;\n border: 1px solid color-mix(in srgb, #7299e7 28%, transparent);\n border-radius: 8px;\n background: color-mix(in srgb, #6b9eff 5%, transparent);\n color: #4673bc;\n cursor: not-allowed;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions button:nth-child(2) {\n color: #38846e;\n border-color: color-mix(in srgb, #4fba9a 25%, transparent);\n background: color-mix(in srgb, #4fba9a 5%, transparent);\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions svg {\n width: 23px;\n height: 23px;\n margin-top: 3px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions strong {\n display: block;\n font-size: 14px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions small {\n display: block;\n margin-top: 6px;\n line-height: 1.6;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #69788a);\n}\n.-cerbur-clutch-dsh-worktree-dashboardStartActions em {\n display: block;\n font-size: 10px;\n font-style: normal;\n margin-top: 10px;\n opacity: 0.75;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder {\n padding: 26px 20px;\n min-height: 177px;\n border: 1px dashed var(--dsw-alias-border-l3, #dfe4ed);\n border-radius: 7px;\n background: var(--dsw-alias-interactive-bg-hover, #f7f8fa);\n text-align: center;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder > svg {\n display: block;\n margin: 0 auto 10px;\n width: 25px;\n height: 25px;\n color: #929cac;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder strong {\n font-size: 13px;\n font-weight: 500;\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionPlaceholder p {\n max-width: 310px;\n margin: 7px auto 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardEmpty {\n display: flex;\n flex-direction: column;\n gap: 8px;\n align-items: center;\n justify-content: center;\n min-height: 78px;\n padding: 10px 8px;\n text-align: center;\n}\n.-cerbur-clutch-dsh-worktree-dashboardEmpty p {\n max-width: 300px;\n margin: 0;\n line-height: 1.7;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts {\n margin: 8px 0 14px;\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div {\n display: grid;\n grid-template-columns: minmax(70px, 0.65fr) minmax(0, 1fr);\n gap: 12px;\n align-items: center;\n padding: 11px 0;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #eef0f5);\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div:last-child {\n border: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dt {\n grid-column: 1;\n min-width: 0;\n color: var(--dsw-alias-label-secondary, #788191);\n /* Prefer normal break points (including trailing `/` and `-`) first. */\n overflow-wrap: break-word;\n word-break: normal;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dd {\n grid-column: 2;\n min-width: 0;\n margin: 0;\n text-align: right;\n /* Only split an unbreakable value after natural opportunities are exhausted. */\n overflow-wrap: break-word;\n word-break: normal;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts > div:has(.-cerbur-clutch-dsh-worktree-dashboardFactAction > *) {\n grid-template-columns: minmax(70px, 0.65fr) minmax(0, 1fr) 29px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFacts dd > span {\n max-width: 100%;\n flex-wrap: wrap;\n justify-content: flex-end;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFactAction {\n display: flex;\n grid-column: 3;\n align-items: center;\n justify-content: flex-end;\n min-width: 29px;\n min-height: 29px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFactAction:empty { display: none; }\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts {\n width: 100%;\n margin: 0;\n padding: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts > div,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts > div:has(.-cerbur-clutch-dsh-worktree-dashboardFactAction > *) {\n grid-template-columns: minmax(60px, 0.55fr) minmax(0, 1fr) 26px;\n gap: 8px;\n min-height: 34px;\n padding: 3px 0;\n border: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts time {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-secondary, #687182);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardFactAction {\n min-width: 26px;\n min-height: 26px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton {\n width: 26px;\n height: 26px;\n border-radius: 6px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton:hover,\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton:focus-visible {\n background: transparent;\n color: var(--dsw-alias-label-primary, #19212f);\n}\n.-cerbur-clutch-dsh-worktree-dashboardHeaderFacts .-cerbur-clutch-dsh-worktree-dashboardIconButton svg {\n width: 14px;\n height: 14px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHistorical {\n color: var(--dsw-alias-label-secondary, #788191);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions p {\n margin: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions label {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions input {\n margin-top: 4px;\n accent-color: var(--dsw-alias-text-link, #3e73ca);\n}\n.-cerbur-clutch-dsh-worktree-dashboardSyncOptions small {\n display: block;\n margin-top: 4px;\n color: var(--dsw-alias-label-secondary, #788191);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-primary, #19212f);\n text-align: left;\n cursor: pointer;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink > span {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink svg {\n width: 14px;\n height: 14px;\n color: var(--dsw-alias-label-tertiary, #858e9d);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:hover,\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:focus-visible {\n color: var(--dsw-alias-text-link, #3e73ca);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:hover svg,\n.-cerbur-clutch-dsh-worktree-dashboardBaseLink:focus-visible svg {\n color: inherit;\n}\n.-cerbur-clutch-dsh-worktree-dashboardIconButton:disabled {\n color: var(--dsw-alias-label-secondary, #788191);\n cursor: not-allowed;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselineModal {\n box-sizing: border-box;\n width: min(440px, calc(100vw - 48px));\n max-height: calc(100vh - 48px);\n max-height: calc(100dvh - 48px);\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselineModalContent {\n box-sizing: border-box;\n min-height: 0;\n overflow-y: auto;\n}\n.-cerbur-clutch-dsh-worktree-dashboardBaselinePicker {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardLink {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n width: 100%;\n background: transparent;\n border: 1px solid var(--dsw-alias-border-l3, #e2e6ed);\n border-radius: 6px;\n padding: 7px 10px;\n font-size: 12px !important;\n color: inherit;\n cursor: pointer;\n margin-top: 8px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardLink:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f5f7fa);\n}\n.-cerbur-clutch-dsh-worktree-dashboardQuickActions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 16px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardQuickActions .-cerbur-clutch-dsh-worktree-dashboardButton {\n justify-content: flex-start;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 390px;\n padding: 40px 24px;\n text-align: center;\n border: 1px dashed var(--dsw-alias-border-l3, #dde3ec);\n border-radius: 11px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder > svg {\n width: 36px;\n height: 36px;\n color: #7c9bcf;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder h2 {\n font-size: 20px;\n font-weight: 600;\n margin: 16px 0 4px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardTabPlaceholder p {\n max-width: 420px;\n font-size: 13px;\n color: var(--dsw-alias-label-secondary, #7b8596);\n margin: 8px 0 18px;\n}\n.-cerbur-clutch-dsh-worktree-dashboardFooter {\n margin: 23px 0 0;\n text-align: center;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary, #8a92a0);\n}\n\n@container (max-width: 820px) {\n .-cerbur-clutch-dsh-worktree-dashboardPage {\n padding: 20px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardHeader {\n grid-template-columns: minmax(0, 1fr);\n gap: 12px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardHeaderAside {\n display: flex;\n }\n .-cerbur-clutch-dsh-worktree-dashboardGrid {\n grid-template-columns: minmax(0, 1fr);\n }\n .-cerbur-clutch-dsh-worktree-dashboardTabs {\n gap: 18px;\n }\n}\n\n@container (max-width: 440px) {\n .-cerbur-clutch-dsh-worktree-dashboardManageList label {\n display: grid;\n grid-template-columns: auto auto minmax(0, 1fr);\n gap: 8px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardManageList .-cerbur-clutch-dsh-worktree-dashboardChildState {\n grid-column: 3;\n align-items: flex-start;\n flex-direction: row;\n flex-wrap: wrap;\n min-width: 0;\n }\n .-cerbur-clutch-dsh-worktree-dashboardManageList .-cerbur-clutch-dsh-worktree-dashboardHealth {\n white-space: normal;\n }\n .-cerbur-clutch-dsh-worktree-dashboardPage {\n padding: 16px 12px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardTitleRow h1 {\n font-size: 22px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardStartActions {\n grid-template-columns: minmax(0, 1fr);\n }\n .-cerbur-clutch-dsh-worktree-dashboardCard,\n .-cerbur-clutch-dsh-worktree-dashboardStart {\n padding: 16px;\n }\n .-cerbur-clutch-dsh-worktree-dashboardTopline {\n gap: 10px;\n }\n}\n.-cerbur-clutch-dsh-worktree-dashboardInstructionsText {\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n max-height: 240px;\n overflow: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardInstructionsInput {\n box-sizing: border-box;\n width: 100%;\n resize: vertical;\n padding: 10px;\n border: 1px solid var(--dsw-alias-border-l4);\n border-radius: 8px;\n background: var(--dsw-alias-bg-base);\n color: var(--dsw-alias-label-primary);\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-dashboardInstructionActions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n";
9914
10363
  const styleId$3 = "@cerbur/clutch-dsh-worktree/dashboard.css";
9915
10364
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/dashboard.css\"]") === null) {
9916
10365
  const tag = document.createElement("style");
@@ -9929,6 +10378,12 @@ window.__ModuleLoader__.load({
9929
10378
  "dashboardSessionMeta": "-cerbur-clutch-dsh-worktree-dashboardSessionMeta",
9930
10379
  "dashboardChildPath": "-cerbur-clutch-dsh-worktree-dashboardChildPath",
9931
10380
  "dashboardChildState": "-cerbur-clutch-dsh-worktree-dashboardChildState",
10381
+ "dashboardManageToolbar": "-cerbur-clutch-dsh-worktree-dashboardManageToolbar",
10382
+ "dashboardManageStopped": "-cerbur-clutch-dsh-worktree-dashboardManageStopped",
10383
+ "dashboardManageHint": "-cerbur-clutch-dsh-worktree-dashboardManageHint",
10384
+ "dashboardManageList": "-cerbur-clutch-dsh-worktree-dashboardManageList",
10385
+ "dashboardManageResults": "-cerbur-clutch-dsh-worktree-dashboardManageResults",
10386
+ "dashboardManageConfirmList": "-cerbur-clutch-dsh-worktree-dashboardManageConfirmList",
9932
10387
  "dashboardSessionStatus": "-cerbur-clutch-dsh-worktree-dashboardSessionStatus",
9933
10388
  "dashboardSessionTime": "-cerbur-clutch-dsh-worktree-dashboardSessionTime",
9934
10389
  "dashboardStartActions": "-cerbur-clutch-dsh-worktree-dashboardStartActions",
@@ -10215,7 +10670,7 @@ window.__ModuleLoader__.load({
10215
10670
  });
10216
10671
  }
10217
10672
  //#endregion
10218
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/dashboard/git/worktree-git.css.mjs
10673
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/dashboard/git/worktree-git.css.mjs
10219
10674
  const css$2 = ".-cerbur-clutch-dsh-worktree-gitPanel {\n min-width: 0;\n min-height: 0;\n}\n.-cerbur-clutch-dsh-worktree-gitCommitStats {\n display: inline-flex;\n gap: 8px;\n color: var(--dsw-alias-label-secondary, #677080);\n font-variant-numeric: tabular-nums;\n}\n.-cerbur-clutch-dsh-worktree-gitFileRow {\n display: flex;\n min-width: 0;\n}\n.-cerbur-clutch-dsh-worktree-gitFileRow > button:first-child { flex: 1; min-width: 0; }\n.-cerbur-clutch-dsh-worktree-gitFileRow > .-cerbur-clutch-dsh-worktree-gitFileOpen { width: 28px; min-width: 28px; flex: none; padding: 4px; opacity: 0; }\n.-cerbur-clutch-dsh-worktree-gitFileRow > .-cerbur-clutch-dsh-worktree-gitFileOpen svg { width: 14px; height: 14px; }\n.-cerbur-clutch-dsh-worktree-gitFileRow:hover > .-cerbur-clutch-dsh-worktree-gitFileOpen,\n.-cerbur-clutch-dsh-worktree-gitFileRow:focus-within > .-cerbur-clutch-dsh-worktree-gitFileOpen { opacity: 1; }\n\n.-cerbur-clutch-dsh-worktree-gitPanelHeader {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 20px;\n margin-bottom: 18px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitPanelHeader h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitPanelHeading {\n min-width: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineSelector {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n margin-top: 10px;\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselinePrompt {\n padding: 22px;\n border: 1px dashed var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 10px;\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-secondary, #6f7887);\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselinePrompt strong {\n display: block;\n margin-bottom: 6px;\n color: var(--dsw-alias-label-primary, #273142);\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselinePrompt p {\n margin: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineFacts {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 20px;\n margin: 10px 0 0;\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineFacts > div {\n display: flex;\n gap: 6px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineFacts dt::after {\n content: ':';\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineFacts dd {\n margin: 0;\n color: var(--dsw-alias-label-primary, #273142);\n}\n\n.-cerbur-clutch-dsh-worktree-gitBaselineFacts code {\n margin-left: 4px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDerived {\n margin-left: 7px;\n color: var(--dsw-alias-state-warn-label, #9a6e22);\n}\n\n.-cerbur-clutch-dsh-worktree-gitRefresh {\n flex: none;\n padding: 6px 11px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #fff);\n color: inherit;\n cursor: pointer;\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitRefresh:disabled {\n color: var(--dsw-alias-label-secondary, #7d8795);\n cursor: wait;\n}\n\n/*\n * One 3x3 grid carries both layouts: commit and changed-file panes sit around a\n * row divider, the diff sits beside them across a column divider. Wide layouts\n * place the stack in the left column, narrow layouts place all three panes on\n * three rows. Both shares are custom properties the dividers drag, and both are\n * clamped so each pane keeps a usable size.\n */\n.-cerbur-clutch-dsh-worktree-gitColumns {\n /* Keep the Git surface bounded by the viewport, never by its data volume. */\n --git-columns-height: clamp(360px, calc(100vh - 300px), 560px);\n --git-columns-height: clamp(360px, calc(100dvh - 300px), 560px);\n /* Leading-pane shares: the row divider and the column divider drag these. */\n --git-rows-top: 45%;\n --git-columns-left: 38%;\n display: grid;\n grid-template-columns:\n minmax(240px, min(var(--git-columns-left), calc(100% - 247px)))\n 7px\n minmax(240px, 1fr);\n grid-template-rows:\n minmax(140px, min(var(--git-rows-top), calc(100% - 147px)))\n 7px\n minmax(140px, 1fr);\n height: var(--git-columns-height);\n min-height: 0;\n border: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n border-radius: 10px;\n overflow: hidden;\n resize: none;\n}\n\n/* Wide: commits over changed files in the left column, diff down the right column. */\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='commits'] {\n grid-area: 1 / 1;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='rows'] {\n grid-area: 2 / 1;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='changed-files'] {\n grid-area: 3 / 1;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='columns'] {\n grid-area: 1 / 2 / -1 / 3;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='diff'] {\n grid-area: 1 / 3 / -1 / -1;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--dsw-alias-bg-base, #fff);\n touch-action: none;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter::before {\n content: '';\n border-radius: 999px;\n background: var(--dsw-alias-border-l2, #cbd2dc);\n transition: background 0.15s ease;\n}\n\n/* Widen the grab area without moving the visible divider line. */\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter::after {\n content: '';\n position: absolute;\n}\n\n/* Both divider panes draw a full border box, so the pane above and the pane below\n (or the pane left and the pane right) are each closed by their own edge. */\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='rows'] {\n box-sizing: border-box;\n height: 7px;\n cursor: row-resize;\n border-top: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n border-bottom: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='rows']::before {\n width: 30px;\n height: 2px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='rows']::after {\n inset: -3px 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='columns'] {\n box-sizing: border-box;\n width: 7px;\n cursor: col-resize;\n border-left: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n border-right: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='columns']::before {\n width: 2px;\n height: 30px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='columns']::after {\n inset: 0 -3px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter:hover::before,\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter:focus-visible::before,\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter[data-dashboard-git-splitting='true']::before {\n background: var(--dsw-alias-state-business-primary, #467bc8);\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnSplitter:focus-visible {\n outline: 2px solid #497cd4;\n outline-offset: -2px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumn {\n display: flex;\n min-width: 0;\n min-height: 0;\n flex-direction: column;\n overflow: hidden;\n background: var(--dsw-alias-bg-base, #fff);\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeader {\n display: flex;\n flex: none;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n min-height: 43px;\n padding: 12px 13px 9px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #edf0f4);\n color: var(--dsw-alias-label-secondary, #6f7887);\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeader h3 {\n margin: 0;\n color: var(--dsw-alias-label-primary, #273142);\n font-size: 12px;\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeader span,\n.-cerbur-clutch-dsh-worktree-gitColumnHeader code {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeaderMeta {\n display: flex;\n min-width: 0;\n align-items: baseline;\n justify-content: flex-end;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeader .-cerbur-clutch-dsh-worktree-gitLineStats,\n.-cerbur-clutch-dsh-worktree-gitColumnHeader .-cerbur-clutch-dsh-worktree-gitLineStats > span {\n overflow: visible;\n text-overflow: clip;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitColumnHeaderUnknown {\n color: var(--dsw-alias-label-tertiary, #8a94a3);\n}\n\n/* Right side of the commits header: the truncation note and the multi-select switch. */\n.-cerbur-clutch-dsh-worktree-gitColumnHeaderControls {\n display: flex;\n min-width: 0;\n align-self: center;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n}\n\n/*\n * A native checkbox owns the state, focus and keyboard behavior; the track and\n * thumb below are presentational and follow :checked through the sibling selector.\n */\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelect {\n position: relative;\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n user-select: none;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelect input {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n border: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelectTrack {\n position: relative;\n display: block;\n flex: none;\n width: 24px;\n height: 14px;\n border-radius: 999px;\n background: var(--dsw-alias-border-l2, #cbd2dc);\n transition: background 0.15s ease;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelectThumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--dsw-alias-bg-base, #fff);\n box-shadow: 0 1px 2px rgb(15 23 42 / 25%);\n transition: transform 0.15s ease;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelect input:checked + .-cerbur-clutch-dsh-worktree-gitCommitMultiSelectTrack {\n background: var(--dsw-alias-state-business-primary, #467bc8);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelect input:checked + .-cerbur-clutch-dsh-worktree-gitCommitMultiSelectTrack .-cerbur-clutch-dsh-worktree-gitCommitMultiSelectThumb {\n transform: translateX(10px);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMultiSelect input:focus-visible + .-cerbur-clutch-dsh-worktree-gitCommitMultiSelectTrack {\n outline: 2px solid #497cd4;\n outline-offset: 2px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryButton {\n display: flex;\n width: calc(100% - 10px);\n flex-direction: column;\n gap: 3px;\n margin: 5px;\n padding: 8px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-primary, #273142);\n text-align: left;\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryButton:hover,\n.-cerbur-clutch-dsh-worktree-gitSummaryButton[aria-pressed='true'] {\n border-color: var(--dsw-alias-state-business-primary, #467bc8);\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryButton span {\n font-size: 12px;\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryButton small {\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle {\n display: flex;\n align-items: flex-start;\n gap: 7px;\n width: calc(100% - 20px);\n margin: 3px 10px 8px;\n color: var(--dsw-alias-label-primary, #273142);\n cursor: pointer;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle input {\n flex: none;\n margin: 2px 0 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle span {\n display: flex;\n min-width: 0;\n flex-direction: column;\n gap: 2px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle strong {\n font-weight: 560;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle small {\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle input:disabled,\n.-cerbur-clutch-dsh-worktree-gitSummaryToggle:has(input:disabled) {\n cursor: wait;\n opacity: 0.65;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSelectionToolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 5px 10px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #edf0f4);\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSelectionToolbar button {\n border: 0;\n background: transparent;\n color: var(--dsw-alias-state-business-primary, #467bc8);\n cursor: pointer;\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList {\n display: block;\n flex: 1 1 auto;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n scrollbar-gutter: stable;\n list-style: none;\n padding: 5px;\n margin: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList {\n overflow-x: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList > li,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitFolderChildren,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitFolderChildren > li {\n width: max-content;\n min-width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-gitFolderChildren {\n list-style: none;\n padding: 0 0 0 12px;\n margin: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitFolderButton {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 7px 8px;\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 11px;\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitFolderButton:hover,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitFolderButton:focus-visible {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n color: var(--dsw-alias-label-primary, #273142);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFolderIcon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--dsw-alias-label-secondary, #6f7887);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFolderIcon > svg {\n width: 16px;\n height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitFolderName {\n min-width: max-content;\n overflow: visible;\n text-overflow: clip;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList button {\n display: block;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button {\n display: grid;\n width: 100%;\n grid-template-columns: 15px minmax(0, 1fr);\n padding: 9px 8px;\n}\n\n/* Without the multi-select marks a row has a single column, so the subject and meta align with it. */\n.-cerbur-clutch-dsh-worktree-gitCommitList[data-dashboard-git-commit-multiselect='off'] button {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList[data-dashboard-git-commit-multiselect='off'] .-cerbur-clutch-dsh-worktree-gitCommitSubject,\n.-cerbur-clutch-dsh-worktree-gitCommitList[data-dashboard-git-commit-multiselect='off'] .-cerbur-clutch-dsh-worktree-gitCommitMeta {\n grid-column: 1;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitSelectionMark {\n grid-row: 1 / span 2;\n color: var(--dsw-alias-state-business-primary, #467bc8);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button:hover,\n.-cerbur-clutch-dsh-worktree-gitCommitList button[aria-selected='true'],\n.-cerbur-clutch-dsh-worktree-gitChangedFileList button:hover,\n.-cerbur-clutch-dsh-worktree-gitChangedFileList button[aria-selected='true'] {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button[aria-selected='true'] {\n box-shadow: inset 2px 0 var(--dsw-alias-state-business-primary, #467bc8);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button[data-dashboard-git-commit-kind='working-tree'] {\n background: var(--dsw-alias-state-warn-tertiary, #f8f5ed);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitList button[data-dashboard-git-commit-kind='working-tree'][aria-selected='true'] {\n box-shadow: inset 2px 0 var(--dsw-alias-state-warn-primary, #b18435);\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitSubject {\n grid-column: 2;\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMeta {\n grid-column: 2;\n display: flex;\n gap: 7px;\n margin-top: 4px;\n overflow: hidden;\n color: var(--dsw-alias-label-secondary, #7c8594);\n font-size: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMeta span,\n.-cerbur-clutch-dsh-worktree-gitCommitMeta time {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitMeta time {\n margin-left: auto;\n}\n\n.-cerbur-clutch-dsh-worktree-gitCommitWorkingTree {\n color: var(--dsw-alias-state-warn-label, #8a6728);\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList button {\n display: flex;\n width: max-content;\n min-width: 100%;\n box-sizing: border-box;\n align-items: flex-start;\n gap: 7px;\n padding: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitFileIcon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n color: var(--dsw-alias-label-secondary, #6f7887);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFileIconGlyph {\n width: 16px;\n height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitFilePath {\n min-width: max-content;\n flex: 0 0 auto;\n overflow: visible;\n text-overflow: clip;\n white-space: nowrap;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='added'] {\n color: var(--dsw-alias-state-success-primary, #23845f);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='deleted'] {\n color: var(--dsw-alias-state-error-secondary, #bd5d55);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='modified'],\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='renamed'],\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='copied'],\n.-cerbur-clutch-dsh-worktree-gitFilePath[data-status='type-changed'] {\n color: var(--dsw-alias-state-business-primary, #467bc8);\n}\n\n.-cerbur-clutch-dsh-worktree-gitFileContributors {\n flex: none;\n max-width: 9em;\n overflow: hidden;\n color: var(--dsw-alias-label-tertiary, #65758d);\n font-size: 9px;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-gitLineStats {\n display: inline-flex;\n flex: none;\n gap: 6px;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n.-cerbur-clutch-dsh-worktree-gitChangedFileList .-cerbur-clutch-dsh-worktree-gitLineStats {\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitLineAdded {\n color: var(--dsw-alias-state-success-primary, #23845f);\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitLineRemoved {\n color: var(--dsw-alias-state-error-secondary, #bd5d55);\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffContainer {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffToolbar {\n display: flex;\n flex: none;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 12px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #edf0f4);\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 11px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffPath {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: ui-monospace, SFMono-Regular, Consolas, monospace;\n color: var(--dsw-alias-label-primary, #263342);\n font-weight: 560;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffOpenInSidebar {\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: 5px;\n padding: 3px 8px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 4px;\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 11px;\n line-height: 16px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n/* The square 16px arrow keeps its aspect ratio; pin the box so it centers on the label. */\n.-cerbur-clutch-dsh-worktree-gitDiffOpenIcon {\n flex: none;\n width: 14px;\n height: 14px;\n color: var(--dsw-alias-label-tertiary, #8a94a3);\n transition: color 0.15s ease;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffOpenInSidebar:hover {\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n color: var(--dsw-alias-label-primary, #263342);\n border-color: var(--dsw-alias-border-l2, #cbd2dc);\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffOpenInSidebar:hover .-cerbur-clutch-dsh-worktree-gitDiffOpenIcon {\n color: var(--dsw-alias-label-primary, #263342);\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiff {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n padding: 7px 0 12px;\n background: var(--dsw-alias-markdown-code-block, #fafbfc);\n color: var(--dsw-alias-label-primary, #263342);\n font: 11px/1.65 ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffSegment {\n margin-bottom: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffSegmentHeader {\n padding: 5px 12px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n background: var(--dsw-alias-interactive-bg-hover, #f1f3f6);\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 10px;\n font-weight: 620;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffSegmentHeader code {\n color: var(--dsw-alias-label-primary, #273142);\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffHunk {\n margin-bottom: 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffHunkHeader {\n padding: 3px 12px;\n background: var(--dsw-alias-markdown-code-block-banner, #edf3fb);\n color: var(--dsw-alias-state-business-primary, #4a70a1);\n box-shadow: inset 0 1px 0 var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.04)), inset 0 -1px 0 var(--dsw-alias-border-l1, rgba(0, 0, 0, 0.04));\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffLine {\n display: grid;\n grid-template-columns: 44px 44px minmax(0, 1fr);\n min-width: max-content;\n padding-right: 12px;\n white-space: pre;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffLineadd {\n background: color-mix(\n in srgb,\n var(--dsw-alias-state-success-primary, #23845f) 18%,\n var(--dsw-alias-markdown-code-block, #fafbfc)\n );\n box-shadow: inset 2px 0 var(--dsw-alias-state-success-primary, #23845f);\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffLinedelete {\n background: color-mix(\n in srgb,\n var(--dsw-alias-state-error-secondary, #bd5d55) 18%,\n var(--dsw-alias-markdown-code-block, #fafbfc)\n );\n box-shadow: inset 2px 0 var(--dsw-alias-state-error-secondary, #bd5d55);\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffLineNumber {\n padding-right: 8px;\n color: var(--dsw-alias-label-tertiary, #9aa3af);\n text-align: right;\n user-select: none;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffLine code {\n min-width: 0;\n color: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-gitSrOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffEmpty,\n.-cerbur-clutch-dsh-worktree-gitDiffMessage,\n.-cerbur-clutch-dsh-worktree-gitEmpty,\n.-cerbur-clutch-dsh-worktree-gitLoading,\n.-cerbur-clutch-dsh-worktree-gitUnavailable,\n.-cerbur-clutch-dsh-worktree-gitError {\n padding: 24px 16px;\n color: var(--dsw-alias-label-secondary, #727d8d);\n font-size: 12px;\n text-align: center;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffMessage,\n.-cerbur-clutch-dsh-worktree-gitUnavailable {\n min-height: 150px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitUnavailable strong {\n display: block;\n margin-bottom: 7px;\n color: var(--dsw-alias-label-primary, #273142);\n font-size: 14px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitUnavailable p {\n max-width: 500px;\n margin: 0 auto;\n line-height: 1.7;\n}\n\n.-cerbur-clutch-dsh-worktree-gitError {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 9px 12px;\n color: var(--dsw-alias-state-error-primary, #ae5c4c);\n text-align: left;\n}\n\n.-cerbur-clutch-dsh-worktree-gitError p {\n margin: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-gitError button {\n flex: none;\n border: 1px solid currentColor;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font-size: 11px;\n padding: 3px 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffFolded {\n display: flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 10px 12px;\n border-top: 1px dashed var(--dsw-alias-border-l3, #dfe3ea);\n background: var(--dsw-alias-bg-base, #fff);\n color: var(--dsw-alias-label-secondary, #6f7887);\n font-size: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-gitDiffShowAll {\n padding: 2px 8px;\n border: 1px solid var(--dsw-alias-border-l3, #dfe3ea);\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-primary, #273142);\n cursor: pointer;\n font: inherit;\n}\n\n.-cerbur-clutch-dsh-worktree-gitRawDiff {\n display: block;\n flex: 1 1 auto;\n min-height: 0;\n max-height: none;\n overflow: auto;\n padding: 12px;\n margin: 0;\n white-space: pre;\n background: var(--dsw-alias-markdown-code-block, #fafbfc);\n color: var(--dsw-alias-label-primary, #263342);\n font: 11px/1.65 ui-monospace, SFMono-Regular, Consolas, monospace;\n}\n\n@container (min-width: 901px) {\n .-cerbur-clutch-dsh-worktree-gitColumns {\n /* Two stacked panes need more vertical room than three side-by-side panes. */\n --git-columns-height: clamp(440px, calc(100vh - 300px), 720px);\n --git-columns-height: clamp(440px, calc(100dvh - 300px), 720px);\n }\n}\n\n@container (max-width: 900px) {\n /* Narrow layout keeps the two-row arrangement: commits and changed files side by\n side on the first row, with the summary diff across the second row. Both\n dividers move with the panes, so either axis stays adjustable. */\n .-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='commits'] {\n grid-area: 1 / 1;\n }\n .-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='columns'] {\n grid-area: 1 / 2;\n }\n .-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='changed-files'] {\n grid-area: 1 / 3;\n }\n .-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-splitter='rows'] {\n grid-area: 2 / 1 / 3 / -1;\n }\n .-cerbur-clutch-dsh-worktree-gitColumns > [data-dashboard-git-pane='diff'] {\n grid-area: 3 / 1 / -1 / -1;\n }\n}\n\n@container (max-width: 520px) {\n .-cerbur-clutch-dsh-worktree-gitPanelHeader {\n flex-direction: column;\n gap: 10px;\n }\n .-cerbur-clutch-dsh-worktree-gitRefresh {\n align-self: flex-end;\n }\n .-cerbur-clutch-dsh-worktree-gitColumns {\n display: block;\n height: auto;\n min-height: 0;\n }\n .-cerbur-clutch-dsh-worktree-gitColumnSplitter {\n display: none;\n }\n .-cerbur-clutch-dsh-worktree-gitColumn {\n height: clamp(260px, calc(100vh - 360px), 360px);\n height: clamp(260px, calc(100dvh - 360px), 360px);\n min-height: 260px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, #e5e8ef);\n }\n .-cerbur-clutch-dsh-worktree-gitColumn:has(> .-cerbur-clutch-dsh-worktree-gitEmpty),\n .-cerbur-clutch-dsh-worktree-gitColumn:has(.-cerbur-clutch-dsh-worktree-gitDiffEmpty) { height: auto; min-height: 100px; }\n .-cerbur-clutch-dsh-worktree-gitColumns > .-cerbur-clutch-dsh-worktree-gitColumn:last-child {\n border-bottom: 0;\n }\n}\n";
10220
10675
  const styleId$2 = "@cerbur/clutch-dsh-worktree/worktree-git.css";
10221
10676
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree-git.css\"]") === null) {
@@ -12392,7 +12847,7 @@ window.__ModuleLoader__.load({
12392
12847
  });
12393
12848
  }
12394
12849
  //#endregion
12395
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/settings/settings.css.mjs
12850
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/settings/settings.css.mjs
12396
12851
  const css$1 = ".-cerbur-clutch-dsh-worktree-settings {\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 100%;\n min-width: 0;\n max-width: 720px;\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsh-content-font-size, 14px);\n line-height: calc(var(--dsh-content-font-size, 14px) + 8px);\n}\n\n[data-worktree-settings-nav-icon] > svg:not(.-cerbur-clutch-dsh-worktree-settingsNavIcon) {\n display: none;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsNavIcon {\n order: -1;\n flex: 0 0 auto;\n width: 16px;\n height: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-toolSettings {\n display: flex;\n flex-direction: column;\n gap: 20px;\n min-width: 0;\n padding: 20px;\n border: 0.5px solid var(--dsw-alias-settings-card-stroke, var(--dsw-alias-border-l4));\n border-radius: var(--dsw-radius-xl, 16px);\n background: var(--dsw-alias-settings-card-fill, var(--dsw-alias-bg-layer-2));\n}\n\n.-cerbur-clutch-dsh-worktree-toolHeader,\n.-cerbur-clutch-dsh-worktree-toolRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 24px;\n}\n\n.-cerbur-clutch-dsh-worktree-toolHeader > div,\n.-cerbur-clutch-dsh-worktree-toolRow > div {\n min-width: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-toolTitle {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-toolHeader h3 {\n margin: 0;\n font-size: calc(var(--dsh-content-font-size, 14px) + 2px);\n font-weight: 600;\n}\n\n.-cerbur-clutch-dsh-worktree-toolHeader p,\n.-cerbur-clutch-dsh-worktree-toolOptionsHeading p,\n.-cerbur-clutch-dsh-worktree-toolRow p {\n margin: 0;\n color: var(--dsw-alias-label-tertiary);\n font-size: var(--dsh-content-font-size-secondary, calc(var(--dsh-content-font-size, 14px) - 1px));\n line-height: 1.5;\n overflow-wrap: anywhere;\n}\n\n.-cerbur-clutch-dsh-worktree-toolOptions {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding-top: 20px;\n border-top: 0.5px solid var(--dsw-alias-settings-card-stroke, var(--dsw-alias-border-l4));\n}\n\n.-cerbur-clutch-dsh-worktree-toolOptionsHeading h4 {\n margin: 0 0 6px;\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsh-content-font-size, 14px);\n font-weight: 500;\n}\n\n.-cerbur-clutch-dsh-worktree-toolList {\n padding-left: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-toolRow {\n padding: 12px 0;\n}\n\n.-cerbur-clutch-dsh-worktree-toolRow + .-cerbur-clutch-dsh-worktree-toolRow {\n border-top: 0.5px solid var(--dsw-alias-border-l4);\n}\n\n.-cerbur-clutch-dsh-worktree-toolRow h5 {\n margin: 0 0 6px;\n font-size: var(--dsh-content-font-size, 14px);\n font-weight: 500;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsTitle {\n margin: 0;\n font-size: calc(var(--dsh-content-font-size, 14px) + 2px);\n line-height: calc(var(--dsh-content-font-size, 14px) + 10px);\n font-weight: 500;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsTabs {\n width: 100%;\n box-sizing: border-box;\n}\n\n/* Native controls keep their palette and keyboard behavior; text and control\n height follow the body's font-size preference even on older DSH themes. */\n.-cerbur-clutch-dsh-worktree-settings .-cerbur-clutch-dsh-worktree-settingsTabs [role='tab'] {\n height: auto;\n min-height: 34px;\n padding-block: 6px;\n font-size: inherit;\n line-height: calc(var(--dsh-content-font-size, 14px) + 6px);\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsPanel,\n.-cerbur-clutch-dsh-worktree-issueList {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: 12px;\n}\n\n.-cerbur-clutch-dsh-worktree-issueList {\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsDescription,\n.-cerbur-clutch-dsh-worktree-settingsHint,\n.-cerbur-clutch-dsh-worktree-settingsEmpty,\n.-cerbur-clutch-dsh-worktree-issueMessage {\n margin: 0;\n overflow-wrap: anywhere;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsDescription,\n.-cerbur-clutch-dsh-worktree-settingsHint,\n.-cerbur-clutch-dsh-worktree-settingsEmpty {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.-cerbur-clutch-dsh-worktree-settingsHint {\n font-size: var(--dsh-content-font-size-secondary, calc(var(--dsh-content-font-size, 14px) - 1px));\n line-height: 1.5;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsToolbar {\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 12px;\n padding: 16px 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-settingsToolbar > .-cerbur-clutch-dsh-worktree-settingsHint {\n flex: 1 1 240px;\n min-width: 0;\n}\n\n.-cerbur-clutch-dsh-worktree-settingsEmpty {\n padding-block: 16px;\n}\n\n.-cerbur-clutch-dsh-worktree-issue {\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-width: 0;\n padding: 12px 14px;\n border: 0.5px solid var(--dsw-alias-settings-card-stroke, var(--dsw-alias-border-l4));\n border-radius: var(--dsw-radius-xl, 16px);\n background: var(--dsw-alias-settings-card-fill, var(--dsw-alias-bg-layer-2));\n}\n\n.-cerbur-clutch-dsh-worktree-issueHeader {\n display: flex;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 6px 10px;\n}\n\n.-cerbur-clutch-dsh-worktree-issueTitle {\n flex: 1 1 240px;\n min-width: 0;\n margin: 0;\n font-size: inherit;\n line-height: inherit;\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n.-cerbur-clutch-dsh-worktree-settings .-cerbur-clutch-dsh-worktree-issueStatus,\n.-cerbur-clutch-dsh-worktree-settings .-cerbur-clutch-dsh-worktree-settingsAction {\n font-size: calc(var(--dsh-content-font-size, 14px) - 2px);\n line-height: calc(var(--dsh-content-font-size, 14px) + 4px);\n}\n\n.-cerbur-clutch-dsh-worktree-settings .-cerbur-clutch-dsh-worktree-settingsAction {\n flex: none;\n height: auto;\n min-height: 28px;\n padding-block: 4px;\n font-family: inherit;\n white-space: normal;\n overflow-wrap: anywhere;\n max-width: 100%;\n}\n\n.-cerbur-clutch-dsh-worktree-issueActions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.-cerbur-clutch-dsh-worktree-issueDiagnostics {\n min-width: 0;\n padding-top: 10px;\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.-cerbur-clutch-dsh-worktree-issueDiagnostics summary {\n width: fit-content;\n max-width: 100%;\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsh-content-font-size-secondary, calc(var(--dsh-content-font-size, 14px) - 1px));\n line-height: 1.5;\n cursor: pointer;\n overflow-wrap: anywhere;\n}\n\n.-cerbur-clutch-dsh-worktree-issueDiagnostics summary:focus-visible,\n.-cerbur-clutch-dsh-worktree-settings .-cerbur-clutch-dsh-worktree-settingsAction:focus-visible {\n outline: var(--dsw-focus-ring-width, 2px) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n border-radius: var(--dsw-radius-xs, 4px);\n}\n\n.-cerbur-clutch-dsh-worktree-issueDiagnostics pre {\n box-sizing: border-box;\n max-width: 100%;\n max-height: 320px;\n overflow: auto;\n margin: 10px 0 0;\n padding: 10px 12px;\n border-radius: var(--dsw-radius-md, 12px);\n background: var(--dsw-alias-bg-module-platform);\n color: var(--dsw-alias-label-secondary);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsh-content-font-size-secondary, calc(var(--dsh-content-font-size, 14px) - 1px));\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n user-select: text;\n}\n";
12397
12852
  const styleId$1 = "@cerbur/clutch-dsh-worktree/settings.css";
12398
12853
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/settings.css\"]") === null) {
@@ -12569,13 +13024,215 @@ window.__ModuleLoader__.load({
12569
13024
  });
12570
13025
  }
12571
13026
  //#endregion
13027
+ //#region lib/client/dashboard/BatchManageWorktrees.js
13028
+ function BatchManageWorktrees({ workspaceId, worktrees, t, actionPending, onManage }) {
13029
+ const rows = worktrees.filter((record) => record.workspaceId === workspaceId && !isMainWorktreeId$1(record.worktreeId));
13030
+ const [selected, setSelected] = (0, react.useState)(/* @__PURE__ */ new Set());
13031
+ const [confirmation, setConfirmation] = (0, react.useState)();
13032
+ const [results, setResults] = (0, react.useState)([]);
13033
+ const [pending, setPending] = (0, react.useState)(false);
13034
+ const [stopped, setStopped] = (0, react.useState)(false);
13035
+ const busy = (0, react.useRef)(false);
13036
+ const generation = (0, react.useRef)(0);
13037
+ (0, react.useEffect)(() => {
13038
+ generation.current++;
13039
+ busy.current = false;
13040
+ setPending(false);
13041
+ setConfirmation(void 0);
13042
+ setSelected(/* @__PURE__ */ new Set());
13043
+ setResults([]);
13044
+ return () => {
13045
+ generation.current++;
13046
+ };
13047
+ }, [workspaceId, onManage]);
13048
+ const picked = rows.filter((record) => selected.has(record.worktreeId));
13049
+ const disabled = pending || actionPending || onManage === void 0;
13050
+ const allSelected = rows.length > 0 && picked.length === rows.length;
13051
+ const close = () => {
13052
+ if (!busy.current) setConfirmation(void 0);
13053
+ };
13054
+ const submit = async () => {
13055
+ if (busy.current || actionPending || !confirmation || !onManage || confirmation.action === "clean" && !stopped) return;
13056
+ busy.current = true;
13057
+ setPending(true);
13058
+ setResults([]);
13059
+ const lifetime = generation.current;
13060
+ const isCurrent = () => generation.current === lifetime;
13061
+ try {
13062
+ await runWorktreeBatch(confirmation.action, confirmation.records, onManage, isCurrent, (result) => {
13063
+ setResults((current) => [...current, result]);
13064
+ if (!result.error) setSelected((current) => {
13065
+ const next = new Set(current);
13066
+ next.delete(result.record.worktreeId);
13067
+ return next;
13068
+ });
13069
+ });
13070
+ } finally {
13071
+ if (isCurrent()) {
13072
+ busy.current = false;
13073
+ setPending(false);
13074
+ setConfirmation(void 0);
13075
+ }
13076
+ }
13077
+ };
13078
+ return (0, react_jsx_runtime.jsxs)("section", {
13079
+ "data-dashboard-batch-manage": true,
13080
+ "aria-busy": pending,
13081
+ children: [
13082
+ (0, react_jsx_runtime.jsxs)("div", {
13083
+ className: dashboard_css_default.dashboardCardHeading,
13084
+ children: [(0, react_jsx_runtime.jsx)("h2", { children: t("dashboard.tab.manage") }), (0, react_jsx_runtime.jsx)("span", { children: rows.length })]
13085
+ }),
13086
+ (0, react_jsx_runtime.jsx)("p", { children: t("dashboard.manage.description") }),
13087
+ (0, react_jsx_runtime.jsxs)("div", {
13088
+ className: dashboard_css_default.dashboardManageToolbar,
13089
+ children: [
13090
+ (0, react_jsx_runtime.jsxs)("label", { children: [(0, react_jsx_runtime.jsx)("input", {
13091
+ type: "checkbox",
13092
+ checked: allSelected,
13093
+ disabled: disabled || rows.length === 0,
13094
+ "aria-label": t("dashboard.manage.selectAll"),
13095
+ onChange: () => setSelected(allSelected ? /* @__PURE__ */ new Set() : new Set(rows.map((record) => record.worktreeId)))
13096
+ }), t("dashboard.manage.selectAll")] }),
13097
+ (0, react_jsx_runtime.jsx)("span", {
13098
+ role: "status",
13099
+ children: t("dashboard.manage.selected", { count: picked.length })
13100
+ }),
13101
+ [
13102
+ "archive",
13103
+ "clean",
13104
+ "forget"
13105
+ ].map((action) => (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13106
+ variant: "outline",
13107
+ "data-batch-action": action,
13108
+ disabled: disabled || !picked.some((record) => canManageWorktree(record, action)),
13109
+ onClick: () => {
13110
+ setStopped(false);
13111
+ setConfirmation({
13112
+ action,
13113
+ records: picked.filter((record) => canManageWorktree(record, action))
13114
+ });
13115
+ },
13116
+ children: [
13117
+ t(`dashboard.manage.${action}`),
13118
+ " (",
13119
+ picked.filter((record) => canManageWorktree(record, action)).length,
13120
+ ")"
13121
+ ]
13122
+ }, action))
13123
+ ]
13124
+ }),
13125
+ (0, react_jsx_runtime.jsx)("p", {
13126
+ className: dashboard_css_default.dashboardManageHint,
13127
+ children: t("dashboard.manage.availability")
13128
+ }),
13129
+ rows.length === 0 ? (0, react_jsx_runtime.jsx)("p", { children: t("dashboard.manage.empty") }) : (0, react_jsx_runtime.jsx)("ul", {
13130
+ className: `${dashboard_css_default.dashboardSessions} ${dashboard_css_default.dashboardManageList}`,
13131
+ children: rows.map((record) => (0, react_jsx_runtime.jsx)("li", { children: (0, react_jsx_runtime.jsxs)("label", { children: [
13132
+ (0, react_jsx_runtime.jsx)("input", {
13133
+ type: "checkbox",
13134
+ checked: selected.has(record.worktreeId),
13135
+ disabled,
13136
+ "aria-label": record.branch + " · " + record.absolutePath,
13137
+ onChange: () => setSelected((current) => {
13138
+ const next = new Set(current);
13139
+ if (next.has(record.worktreeId)) next.delete(record.worktreeId);
13140
+ else next.add(record.worktreeId);
13141
+ return next;
13142
+ })
13143
+ }),
13144
+ (0, react_jsx_runtime.jsx)(IconBranchOutline16, {}),
13145
+ (0, react_jsx_runtime.jsxs)("span", {
13146
+ className: dashboard_css_default.dashboardSessionLabel,
13147
+ children: [(0, react_jsx_runtime.jsx)("strong", { children: record.currentHead?.name ?? record.currentBranch ?? record.branch }), (0, react_jsx_runtime.jsx)("code", {
13148
+ className: dashboard_css_default.dashboardChildPath,
13149
+ children: record.absolutePath
13150
+ })]
13151
+ }),
13152
+ (0, react_jsx_runtime.jsxs)("span", {
13153
+ className: dashboard_css_default.dashboardChildState,
13154
+ children: [record.status === "removed" && (0, react_jsx_runtime.jsx)("span", {
13155
+ className: dashboard_css_default.dashboardSoon,
13156
+ children: t("dashboard.archived")
13157
+ }), (0, react_jsx_runtime.jsx)("span", {
13158
+ className: dashboard_css_default.dashboardHealth,
13159
+ "data-health": record.health ?? "unknown",
13160
+ children: t(record.health === "ready" ? "worktree.ready" : record.health === "repair" ? "worktree.repair" : record.health === "recovery-needed" ? "worktree.recovery" : record.health === "branch-drift" ? "worktree.branchDrift" : record.health === "cleaned" ? "dashboard.cleaned" : "dashboard.unknown")
13161
+ })]
13162
+ })
13163
+ ] }) }, record.worktreeId))
13164
+ }),
13165
+ (0, react_jsx_runtime.jsx)("ul", {
13166
+ className: dashboard_css_default.dashboardManageResults,
13167
+ "aria-live": "polite",
13168
+ children: results.map(({ record, error }) => (0, react_jsx_runtime.jsxs)("li", {
13169
+ "data-batch-result": error ? "failed" : "success",
13170
+ children: [
13171
+ (0, react_jsx_runtime.jsx)("strong", { children: record.branch }),
13172
+ " · ",
13173
+ record.absolutePath,
13174
+ " · ",
13175
+ error ? t("dashboard.manage.failed") + " " + formatWorktreeViewError(error, t) : t("dashboard.manage.success")
13176
+ ]
13177
+ }, record.worktreeId))
13178
+ }),
13179
+ (0, react_jsx_runtime.jsx)(NotificationToasts, { notices: results.flatMap(({ record, error }) => error ? [{
13180
+ key: "batch:" + record.worktreeId,
13181
+ error,
13182
+ context: record.branch + " · " + record.absolutePath,
13183
+ text: formatWorktreeViewError(error, t),
13184
+ message: (translate) => formatWorktreeViewError(error, translate)
13185
+ }] : []) }),
13186
+ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
13187
+ open: confirmation !== void 0,
13188
+ onClose: close,
13189
+ closeLabel: t("dialog.cancel"),
13190
+ title: confirmation ? t(`dashboard.manage.${confirmation.action}`) : "",
13191
+ description: confirmation ? t(`dashboard.manage.confirm.${confirmation.action}`) : "",
13192
+ footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13193
+ variant: "outline",
13194
+ disabled: pending,
13195
+ onClick: close,
13196
+ children: t("dialog.cancel")
13197
+ }), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13198
+ variant: "primary",
13199
+ "data-batch-confirm": true,
13200
+ disabled: pending || actionPending || confirmation?.action === "clean" && !stopped,
13201
+ onClick: () => void submit(),
13202
+ children: t(pending ? "dashboard.manage.running" : "dashboard.manage.confirm")
13203
+ })] }),
13204
+ children: (0, react_jsx_runtime.jsxs)("div", {
13205
+ "data-dashboard-batch-dialog": true,
13206
+ children: [
13207
+ (0, react_jsx_runtime.jsx)("p", { children: t("dashboard.manage.selected", { count: confirmation?.records.length ?? 0 }) }),
13208
+ (0, react_jsx_runtime.jsx)("ul", {
13209
+ className: dashboard_css_default.dashboardManageConfirmList,
13210
+ children: confirmation?.records.map((record) => (0, react_jsx_runtime.jsxs)("li", { children: [(0, react_jsx_runtime.jsx)("strong", { children: record.branch }), (0, react_jsx_runtime.jsx)("code", { children: confirmation.action === "clean" ? record.gitRootPath ?? record.absolutePath : record.absolutePath })] }, record.worktreeId))
13211
+ }),
13212
+ confirmation?.action === "clean" && (0, react_jsx_runtime.jsxs)("label", {
13213
+ className: dashboard_css_default.dashboardManageStopped,
13214
+ children: [(0, react_jsx_runtime.jsx)("input", {
13215
+ type: "checkbox",
13216
+ checked: stopped,
13217
+ disabled: pending,
13218
+ onChange: (event) => setStopped(event.currentTarget.checked)
13219
+ }), t("dashboard.manage.stopped")]
13220
+ })
13221
+ ]
13222
+ })
13223
+ })
13224
+ ]
13225
+ });
13226
+ }
13227
+ //#endregion
12572
13228
  //#region lib/client/dashboard/WorktreeDashboard.js
12573
13229
  const TABS = [
12574
13230
  "overview",
12575
13231
  "git",
12576
13232
  "sessions",
12577
13233
  "children",
12578
- "settings"
13234
+ "settings",
13235
+ "manage"
12579
13236
  ];
12580
13237
  /** getRandomValues is also available on plain-HTTP LAN origins. */
12581
13238
  function createSyncRequestId() {
@@ -12631,6 +13288,7 @@ window.__ModuleLoader__.load({
12631
13288
  sessions: "M4 4h16v13H9l-5 4z M8 8h8 M8 12h5",
12632
13289
  children: "M12 7v5 M5 17v-5h14v5 M9 3h6v4H9z M2 17h6v4H2z M16 17h6v4h-6z",
12633
13290
  settings: "M4 6h16 M4 12h16 M4 18h16 M8 3v6 M16 9v6 M10 15v6",
13291
+ manage: "M9 5h12 M9 12h12 M9 19h12 M3 4h2v2H3z M3 11h2v2H3z M3 18h2v2H3z",
12634
13292
  instructions: "M5 3h14v18H5z M8 7h8 M8 11h8 M8 15h5",
12635
13293
  actions: "M13 2 4 14h7l-1 8 10-13h-8z"
12636
13294
  }[kind] })
@@ -12833,7 +13491,7 @@ window.__ModuleLoader__.load({
12833
13491
  })] });
12834
13492
  }
12835
13493
  /** A managed Worktree or browser Main projection with explicit unavailable states for inapplicable facts. */
12836
- function WorktreeDashboard({ manager, record, worktrees = [], mainRecord, onOpenWorktree, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onSyncBaseline, onOpenFile, onSaveInstructions, onSaveBaseline, onFetchBranches, onLoadBranches, branches = [], branchesLoading = false }) {
13494
+ function WorktreeDashboard({ manager, record, worktrees = [], mainRecord, onOpenWorktree, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onManageWorktree, onSyncBaseline, onOpenFile, onSaveInstructions, onSaveBaseline, onFetchBranches, onLoadBranches, branches = [], branchesLoading = false }) {
12837
13495
  const surface = (0, react.useRef)(null);
12838
13496
  const heading = (0, react.useRef)(null);
12839
13497
  const [placement, setPlacement] = (0, react.useState)();
@@ -12902,6 +13560,7 @@ window.__ModuleLoader__.load({
12902
13560
  }
12903
13561
  };
12904
13562
  const isMain = isMainWorktreeId$1(record.worktreeId);
13563
+ const tabs = TABS.filter((value) => value !== "manage" || isMain);
12905
13564
  const refName = record.currentHead?.name ?? record.currentBranch ?? record.branch;
12906
13565
  const branchAvailable = refName.length > 0;
12907
13566
  const displayBranch = branchAvailable ? refName : t("dashboard.branchUnavailable");
@@ -13138,7 +13797,7 @@ window.__ModuleLoader__.load({
13138
13797
  onKeyDown: (event) => {
13139
13798
  if (event.defaultPrevented) return;
13140
13799
  if (event.key === "Escape") {
13141
- if (syncOpen) return;
13800
+ if (syncOpen || surface.current?.ownerDocument.querySelector("[data-dashboard-batch-dialog]") || event.target?.closest?.("[role=\"dialog\"]")) return;
13142
13801
  if (event.target?.closest?.("[data-single-select-picker]")) return;
13143
13802
  if (event.currentTarget.querySelector("[role=\"menu\"]")) return;
13144
13803
  event.stopPropagation();
@@ -13326,7 +13985,7 @@ window.__ModuleLoader__.load({
13326
13985
  className: dashboard_css_default.dashboardTabs,
13327
13986
  role: "tablist",
13328
13987
  "aria-label": t("dashboard.title"),
13329
- children: TABS.map((value) => (0, react_jsx_runtime.jsxs)("button", {
13988
+ children: tabs.map((value) => (0, react_jsx_runtime.jsxs)("button", {
13330
13989
  type: "button",
13331
13990
  id: `${id}-${value}`,
13332
13991
  role: "tab",
@@ -13335,8 +13994,8 @@ window.__ModuleLoader__.load({
13335
13994
  tabIndex: tab === value ? 0 : -1,
13336
13995
  onClick: () => selectTab(value),
13337
13996
  onKeyDown: (event) => {
13338
- const index = TABS.indexOf(value);
13339
- const next = event.key === "ArrowRight" ? TABS[(index + 1) % TABS.length] : event.key === "ArrowLeft" ? TABS[(index + TABS.length - 1) % TABS.length] : event.key === "Home" ? TABS[0] : event.key === "End" ? TABS[TABS.length - 1] : void 0;
13997
+ const index = tabs.indexOf(value);
13998
+ const next = event.key === "ArrowRight" ? tabs[(index + 1) % tabs.length] : event.key === "ArrowLeft" ? tabs[(index + tabs.length - 1) % tabs.length] : event.key === "Home" ? tabs[0] : event.key === "End" ? tabs[tabs.length - 1] : void 0;
13340
13999
  if (next) {
13341
14000
  event.preventDefault();
13342
14001
  selectTab(next, true);
@@ -13512,6 +14171,15 @@ window.__ModuleLoader__.load({
13512
14171
  children: t("dashboard.newSession")
13513
14172
  }),
13514
14173
  children: sessionList(sessionIds)
14174
+ }) : tab === "manage" && isMain ? (0, react_jsx_runtime.jsx)("div", {
14175
+ className: dashboard_css_default.dashboardCard,
14176
+ children: (0, react_jsx_runtime.jsx)(BatchManageWorktrees, {
14177
+ workspaceId: record.workspaceId,
14178
+ worktrees,
14179
+ t,
14180
+ actionPending,
14181
+ onManage: onManageWorktree
14182
+ })
13515
14183
  }) : tab === "settings" ? (0, react_jsx_runtime.jsx)(Card, {
13516
14184
  title: tabLabel("settings"),
13517
14185
  icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "settings" }),
@@ -13987,6 +14655,16 @@ window.__ModuleLoader__.load({
13987
14655
  props,
13988
14656
  mutation
13989
14657
  });
14658
+ const manageDashboardWorktree = useDashboardBatchManage({
14659
+ props,
14660
+ read,
14661
+ mutation,
14662
+ expansion,
14663
+ session,
14664
+ lifecycleState,
14665
+ lifecycle,
14666
+ reader: props.viewReader
14667
+ });
13990
14668
  const dashboardWorkspace = source.workspaces.items.find((workspace) => workspace.workspaceId === dashboardRecord?.workspaceId);
13991
14669
  const dashboardView = dashboardRecord === void 0 ? void 0 : read.viewByWorkspace.get(dashboardRecord.workspaceId);
13992
14670
  const dashboardCanCreate = dashboardRecord?.status === "active" && dashboardRecord.diskCleanup !== "completed" && dashboardRecord.health !== "cleaned" && dashboardRecord.health !== "repair" && dashboardRecord.health !== "recovery-needed";
@@ -14060,6 +14738,7 @@ window.__ModuleLoader__.load({
14060
14738
  (0, react_jsx_runtime.jsxs)("div", {
14061
14739
  className: worktree_css_default.wideContent,
14062
14740
  children: [(0, react_jsx_runtime.jsx)(SurfaceHeader, {
14741
+ onOpenSession: session.openWorkspaceSession,
14063
14742
  expansion,
14064
14743
  props,
14065
14744
  source,
@@ -14128,6 +14807,7 @@ window.__ModuleLoader__.load({
14128
14807
  worktrees: dashboardView?.worktrees ?? [],
14129
14808
  mainRecord: dashboardMainRecord,
14130
14809
  onOpenWorktree: openDashboard,
14810
+ onManageWorktree: props.manager === void 0 ? void 0 : manageDashboardWorktree,
14131
14811
  onSaveInstructions: props.manager ? async (instructions, expectedInstructions) => {
14132
14812
  try {
14133
14813
  return await props.manager.updateWorktreeInstructions({
@@ -14630,7 +15310,7 @@ window.__ModuleLoader__.load({
14630
15310
  }, "clutch-dsh-worktree: steer activity");
14631
15311
  }
14632
15312
  //#endregion
14633
- //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_0b7104c2a210/packages/clutch-dsh-worktree/src/client/steer/steer.css.mjs
15313
+ //#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/wt_3206e001ea2a/packages/clutch-dsh-worktree/src/client/steer/steer.css.mjs
14634
15314
  const css = ".-cerbur-clutch-dsh-worktree-strip {\n box-sizing: border-box;\n flex: none;\n min-width: 0;\n width: calc(100% - var(--dsh-composer-side-clearance, 16px) - var(--dsh-composer-side-clearance, 16px));\n max-width: var(--dsh-composer-card-max-width, 760px);\n margin: 0 auto;\n padding: 8px 12px;\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 12px;\n background: var(--dsw-alias-bg-layer-1);\n color: var(--dsw-alias-label-secondary);\n font-size: 12px;\n}\n.-cerbur-clutch-dsh-worktree-title { font-weight: 600; margin-bottom: 4px; }\n.-cerbur-clutch-dsh-worktree-items { max-height: 200px; overflow: auto; }\n.-cerbur-clutch-dsh-worktree-item summary { display: flex; align-items: baseline; gap: 8px; cursor: pointer; padding: 4px 0; }\n.-cerbur-clutch-dsh-worktree-item summary::before { content: '›'; flex: none; }\n.-cerbur-clutch-dsh-worktree-item[open] summary::before { transform: rotate(90deg); }\n.-cerbur-clutch-dsh-worktree-status { flex: none; }\n.-cerbur-clutch-dsh-worktree-preview { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.-cerbur-clutch-dsh-worktree-body { padding: 4px 0 8px; overflow-wrap: anywhere; }\n.-cerbur-clutch-dsh-worktree-body p { margin: 6px 0; white-space: pre-wrap; }\n.-cerbur-clutch-dsh-worktree-sender { font-family: monospace; }\n";
14635
15315
  const styleId = "@cerbur/clutch-dsh-worktree/steer.css";
14636
15316
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/steer.css\"]") === null) {
@@ -15590,16 +16270,17 @@ window.__ModuleLoader__.load({
15590
16270
  const viewReader = createWorktreeViewReader(manager);
15591
16271
  const fullAccessConfirmation = createWorktreeFullAccessConfirmationController();
15592
16272
  const restartNotice = new RestartNotice((signal) => manager.probeHost(signal));
15593
- const permissionNotice = createSnapshotStore(void 0);
16273
+ const permissionNotice = createSnapshotStore([]);
15594
16274
  const permissionManager = typeof document !== "undefined" ? manager : void 0;
15595
16275
  const dashboardStore = createSnapshotStore(void 0);
15596
16276
  const reportPermissionNotice = (input, result) => {
15597
16277
  restartNotice.reportPermissionResult(result);
15598
16278
  const visible = result.status === "fallback-workspace-write" || result.status === "user-restricted" || result.status === "unverified";
15599
- permissionNotice.set(visible ? {
16279
+ const remaining = permissionNotice.getSnapshot().filter((notice) => notice.workspaceId !== input.workspaceId || notice.worktreeId !== input.worktreeId);
16280
+ permissionNotice.set(visible ? [...remaining, {
15600
16281
  ...input,
15601
16282
  result
15602
- } : void 0);
16283
+ }] : remaining);
15603
16284
  };
15604
16285
  const sessions = ctx.sessions;
15605
16286
  const slots = ctx.slots;
@@ -15921,8 +16602,7 @@ window.__ModuleLoader__.load({
15921
16602
  onWorktreeForgotten: (input) => {
15922
16603
  forkCoordinator?.forgetWorktree(input);
15923
16604
  for (const sessionId of input.sessionIds) virtualWorkspaceMembership.removeSession(sessionId);
15924
- const currentNotice = permissionNotice.getSnapshot();
15925
- if (currentNotice !== void 0 && (currentNotice.worktreeId === input.worktreeId || currentNotice.sessionId !== void 0 && input.sessionIds.includes(currentNotice.sessionId))) permissionNotice.set(void 0);
16605
+ permissionNotice.set(permissionNotice.getSnapshot().filter((notice) => notice.workspaceId !== input.workspaceId || notice.worktreeId !== input.worktreeId && (notice.sessionId === void 0 || !input.sessionIds.includes(notice.sessionId))));
15926
16606
  }
15927
16607
  })
15928
16608
  }, WorktreeOverlay));