@cerbur/clutch-dsh-worktree 0.1.18 → 0.1.19
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.
- package/README.md +103 -10
- package/README.zh.md +83 -10
- package/assets/screenshots/screenshots-agent-steer.jpg +0 -0
- package/assets/screenshots/screenshots-baseline-sync.png +0 -0
- package/lib/client/WorktreeSurface.d.ts.map +1 -1
- package/lib/client/WorktreeSurface.js +18 -2
- package/lib/client/WorktreeSurface.js.map +1 -1
- package/lib/client/context/worktree-context-store.d.ts +3 -1
- package/lib/client/context/worktree-context-store.d.ts.map +1 -1
- package/lib/client/context/worktree-context-store.js +3 -2
- package/lib/client/context/worktree-context-store.js.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.d.ts +8 -3
- package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
- package/lib/client/dashboard/WorktreeDashboard.js +120 -12
- package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
- package/lib/client/dashboard/dashboard-selection.d.ts +4 -0
- package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
- package/lib/client/dashboard/dashboard-selection.js +23 -0
- package/lib/client/dashboard/dashboard-selection.js.map +1 -1
- package/lib/client/dsh-slot-contract.d.ts +8 -1
- package/lib/client/dsh-slot-contract.d.ts.map +1 -1
- package/lib/client/entry.d.ts.map +1 -1
- package/lib/client/entry.js +22 -4
- package/lib/client/entry.js.map +1 -1
- package/lib/client/locales.d.ts +46 -0
- package/lib/client/locales.d.ts.map +1 -1
- package/lib/client/locales.js +54 -8
- package/lib/client/locales.js.map +1 -1
- package/lib/client/permission/worktree-permission.d.ts.map +1 -1
- package/lib/client/permission/worktree-permission.js +14 -6
- package/lib/client/permission/worktree-permission.js.map +1 -1
- package/lib/client/settings/diagnostics.d.ts +4 -0
- package/lib/client/settings/diagnostics.d.ts.map +1 -1
- package/lib/client/settings/diagnostics.js +12 -0
- package/lib/client/settings/diagnostics.js.map +1 -1
- package/lib/client/steer/SteerDock.d.ts +8 -0
- package/lib/client/steer/SteerDock.d.ts.map +1 -0
- package/lib/client/steer/SteerDock.js +12 -0
- package/lib/client/steer/SteerDock.js.map +1 -0
- package/lib/client/steer/steer-activity.d.ts +18 -0
- package/lib/client/steer/steer-activity.d.ts.map +1 -0
- package/lib/client/steer/steer-activity.js +37 -0
- package/lib/client/steer/steer-activity.js.map +1 -0
- package/lib/client/steer/steer-state.d.ts +24 -0
- package/lib/client/steer/steer-state.d.ts.map +1 -0
- package/lib/client/steer/steer-state.js +102 -0
- package/lib/client/steer/steer-state.js.map +1 -0
- package/lib/client/surface/state/useSurfaceRefresh.d.ts.map +1 -1
- package/lib/client/surface/state/useSurfaceRefresh.js +6 -3
- package/lib/client/surface/state/useSurfaceRefresh.js.map +1 -1
- package/lib/client/surface/types.d.ts +5 -1
- package/lib/client/surface/types.d.ts.map +1 -1
- package/lib/client/view/worktree-view-read.d.ts +3 -0
- package/lib/client/view/worktree-view-read.d.ts.map +1 -1
- package/lib/client/view/worktree-view-read.js +23 -1
- package/lib/client/view/worktree-view-read.js.map +1 -1
- package/lib/client/worktree-connection.d.ts +1 -0
- package/lib/client/worktree-connection.d.ts.map +1 -1
- package/lib/client/worktree-connection.js +2 -0
- package/lib/client/worktree-connection.js.map +1 -1
- package/lib/client.js +1031 -456
- package/lib/client.js.map +1 -1
- package/lib/contract/baseline-sync.d.ts +27 -0
- package/lib/contract/baseline-sync.d.ts.map +1 -0
- package/lib/contract/baseline-sync.js +2 -0
- package/lib/contract/baseline-sync.js.map +1 -0
- package/lib/contract/index.contract.js +1 -0
- package/lib/contract/index.contract.js.map +1 -1
- package/lib/contract/index.d.ts +5 -1
- package/lib/contract/index.d.ts.map +1 -1
- package/lib/contract/index.js +1 -0
- package/lib/contract/index.js.map +1 -1
- package/lib/contract/worktree-permission.d.ts +2 -0
- package/lib/contract/worktree-permission.d.ts.map +1 -1
- package/lib/contract/worktree-permission.js +1 -1
- package/lib/contract/worktree-permission.js.map +1 -1
- package/lib/contract/worktree-tool-changes.d.ts +2 -0
- package/lib/contract/worktree-tool-changes.d.ts.map +1 -1
- package/lib/host/baseline-sync.d.ts +15 -0
- package/lib/host/baseline-sync.d.ts.map +1 -0
- package/lib/host/baseline-sync.js +93 -0
- package/lib/host/baseline-sync.js.map +1 -0
- package/lib/host/remote.d.ts +2 -1
- package/lib/host/remote.d.ts.map +1 -1
- package/lib/host/remote.js +1 -1
- package/lib/host/remote.js.map +1 -1
- package/lib/host/service.d.ts +5 -0
- package/lib/host/service.d.ts.map +1 -1
- package/lib/host/service.js +27 -2
- package/lib/host/service.js.map +1 -1
- package/lib/host/worktree-permission.d.ts +12 -0
- package/lib/host/worktree-permission.d.ts.map +1 -1
- package/lib/host/worktree-permission.js +87 -16
- package/lib/host/worktree-permission.js.map +1 -1
- package/lib/host/worktree-tool-changes.d.ts +1 -1
- package/lib/host/worktree-tool-changes.d.ts.map +1 -1
- package/lib/host/worktree-tool-changes.js +5 -2
- package/lib/host/worktree-tool-changes.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/manage/manager.d.ts +5 -0
- package/lib/manage/manager.d.ts.map +1 -1
- package/lib/manage/manager.js +17 -1
- package/lib/manage/manager.js.map +1 -1
- package/lib/manage/types.d.ts +5 -0
- package/lib/manage/types.d.ts.map +1 -1
- package/lib/tool/agent-relay.d.ts +55 -0
- package/lib/tool/agent-relay.d.ts.map +1 -0
- package/lib/tool/agent-relay.js +159 -0
- package/lib/tool/agent-relay.js.map +1 -0
- package/lib/tool/delegation.d.ts +1 -0
- package/lib/tool/delegation.d.ts.map +1 -1
- package/lib/tool/delegation.js +32 -6
- package/lib/tool/delegation.js.map +1 -1
- package/lib/tool/dispatch-session.d.ts +18 -0
- package/lib/tool/dispatch-session.d.ts.map +1 -0
- package/lib/tool/dispatch-session.js +41 -0
- package/lib/tool/dispatch-session.js.map +1 -0
- package/lib/tool/errors.d.ts +6 -0
- package/lib/tool/errors.d.ts.map +1 -1
- package/lib/tool/errors.js +16 -2
- package/lib/tool/errors.js.map +1 -1
- package/lib/tool/guidance.d.ts +1 -0
- package/lib/tool/guidance.d.ts.map +1 -1
- package/lib/tool/guidance.js +2 -0
- package/lib/tool/guidance.js.map +1 -1
- package/lib/tool/index.d.ts.map +1 -1
- package/lib/tool/index.js +38 -4
- package/lib/tool/index.js.map +1 -1
- package/lib/tool/inputs.d.ts.map +1 -1
- package/lib/tool/inputs.js +6 -6
- package/lib/tool/inputs.js.map +1 -1
- package/lib/tool/list-models.js +2 -2
- package/lib/tool/list-models.js.map +1 -1
- package/lib/tool/list-sessions.js +2 -2
- package/lib/tool/list-sessions.js.map +1 -1
- package/lib/tool/list-worktrees.js +1 -1
- package/lib/tool/list-worktrees.js.map +1 -1
- package/lib/tool/native-session.d.ts +4 -0
- package/lib/tool/native-session.d.ts.map +1 -1
- package/lib/tool/native-session.js +17 -0
- package/lib/tool/native-session.js.map +1 -1
- package/lib/tool/new-worktree.js +4 -4
- package/lib/tool/new-worktree.js.map +1 -1
- package/lib/tool/report-result.d.ts.map +1 -1
- package/lib/tool/report-result.js +9 -7
- package/lib/tool/report-result.js.map +1 -1
- package/lib/tool/schema.d.ts +8 -0
- package/lib/tool/schema.d.ts.map +1 -1
- package/lib/tool/schema.js +31 -2
- package/lib/tool/schema.js.map +1 -1
- package/lib/tool/send-message.d.ts.map +1 -1
- package/lib/tool/send-message.js +8 -7
- package/lib/tool/send-message.js.map +1 -1
- package/lib/tool/span-worktree.d.ts.map +1 -1
- package/lib/tool/span-worktree.js +33 -59
- package/lib/tool/span-worktree.js.map +1 -1
- package/lib/tool/types.d.ts +2 -0
- package/lib/tool/types.d.ts.map +1 -1
- package/lib/tool/wire-schema.d.ts +4 -0
- package/lib/tool/wire-schema.d.ts.map +1 -0
- package/lib/tool/wire-schema.js +24 -0
- package/lib/tool/wire-schema.js.map +1 -0
- package/lib/typert.host.js +117 -56
- package/lib/typert.remote-client.d.ts +3 -1
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +117 -56
- package/package.json +4 -1
package/lib/client.js
CHANGED
|
@@ -780,6 +780,14 @@ window.__ModuleLoader__.load({
|
|
|
780
780
|
//#region lib/client/locales.js
|
|
781
781
|
const WORKTREE_NS = "worktree";
|
|
782
782
|
const zh = {
|
|
783
|
+
"steer.title": "Agent steer",
|
|
784
|
+
"steer.pending": "等待接收",
|
|
785
|
+
"steer.preparing": "准备接收",
|
|
786
|
+
"steer.received": "已进入会话上下文",
|
|
787
|
+
"steer.canceled": "已取消",
|
|
788
|
+
"steer.unknown": "状态待确认",
|
|
789
|
+
"steer.sender": "发送方:{sender}",
|
|
790
|
+
"steer.receiptHint": "接收不代表任务完成。展示本轮或最近一轮的接收记录。",
|
|
783
791
|
"dashboard.mainReady": "本地 checkout",
|
|
784
792
|
"dashboard.git.sessionRequired": "请先为此工作目录新建会话,再在侧栏打开文件。",
|
|
785
793
|
"dashboard.git.outsideSession": "文件位于此会话工作目录之外。请在 IDE 中打开,或使用仓库根目录的会话。",
|
|
@@ -941,6 +949,7 @@ window.__ModuleLoader__.load({
|
|
|
941
949
|
"dashboard.cancelInstructions": "取消",
|
|
942
950
|
"dashboard.instructionsSaveFailed": "保存失败,草稿已保留。可重试;若其他窗口已修改指令,请取消并重新打开编辑。",
|
|
943
951
|
"dashboard.editBase": "编辑基线",
|
|
952
|
+
"dashboard.openBaseWorktree": "前往基线 Worktree",
|
|
944
953
|
"dashboard.editBaseDescription": "选择本地或已获取的远端 branch 作为 Git 与变更的比较基线。",
|
|
945
954
|
"dashboard.searchBranches": "搜索 branch",
|
|
946
955
|
"dashboard.noMatchingBranches": "没有匹配的 branch",
|
|
@@ -976,7 +985,8 @@ window.__ModuleLoader__.load({
|
|
|
976
985
|
"dashboard.workingTree": "未提交变更",
|
|
977
986
|
"dashboard.viewDetails": "查看详情",
|
|
978
987
|
"dashboard.derived": "派生 Worktree",
|
|
979
|
-
"dashboard.childrenHint": "
|
|
988
|
+
"dashboard.childrenHint": "显示同一 Workspace 中,已保存基线为当前分支的直接派生 Worktree(含已归档项)。修改基线后,列表随之更新。",
|
|
989
|
+
"dashboard.noChildren": "暂无基线指向当前分支的 Worktree。",
|
|
980
990
|
"dashboard.viewChildren": "查看派生 Worktree",
|
|
981
991
|
"dashboard.quickActions": "快捷操作",
|
|
982
992
|
"dashboard.action.terminal": "在终端中打开",
|
|
@@ -984,11 +994,24 @@ window.__ModuleLoader__.load({
|
|
|
984
994
|
"dashboard.action.pullRequest": "创建 Pull Request",
|
|
985
995
|
"dashboard.action.tests": "运行测试",
|
|
986
996
|
"dashboard.action.sync": "同步基线",
|
|
997
|
+
"dashboard.sync.description": "选择同步方式。确认后会在当前 Worktree 创建并打开一个任务会话,由 Agent 执行;使用原生权限策略,遇到未提交变更或冲突时停止并报告。",
|
|
998
|
+
"dashboard.sync.rebase": "将当前分支的提交重放到已保存基线之上,改写当前分支的提交历史。",
|
|
999
|
+
"dashboard.sync.merge": "将已保存基线合入当前分支,保留已有提交历史。",
|
|
1000
|
+
"dashboard.sync.create": "创建同步会话",
|
|
1001
|
+
"dashboard.sync.creating": "正在创建…",
|
|
1002
|
+
"dashboard.sync.openSession": "打开已创建会话",
|
|
1003
|
+
"dashboard.sync.partial": "会话已保留。请打开该会话检查;检查前不要重复创建会话或提交任务。",
|
|
1004
|
+
"dashboard.sync.binding-failed": "会话已创建,但 Worktree 绑定失败。请打开已创建会话检查目录与 Worktree 可用状态,确认绑定恢复后再提交任务。",
|
|
1005
|
+
"dashboard.sync.model-failed": "会话已创建并绑定,但模型配置失败。请在已创建会话中检查可用模型与配置。",
|
|
1006
|
+
"dashboard.sync.title-failed": "会话已创建并绑定,但标题设置失败。请在已创建会话中检查或修改标题。",
|
|
1007
|
+
"dashboard.sync.reporting-failed": "会话已创建,但结果报告准备失败。请在已创建会话中检查报告配置。",
|
|
1008
|
+
"dashboard.sync.prompt-failed": "会话已创建,但任务提交未获确认。请先检查已创建会话的消息与运行状态,确认是否已接收任务。",
|
|
1009
|
+
"dashboard.sync.failed": "同步会话创建失败,可重试同一请求。",
|
|
987
1010
|
"dashboard.action.archive": "归档 Worktree",
|
|
988
1011
|
"dashboard.hint.git": "这里展示相对于所选 branch 基线的提交、已提交和未提交的变化行数、变更文件和统一 Diff。",
|
|
989
|
-
"dashboard.hint.children": "
|
|
1012
|
+
"dashboard.hint.children": "查看以当前分支为已保存基线的 Worktree。",
|
|
990
1013
|
"dashboard.hint.settings": "这里将提供 Worktree 指令与偏好设置。当前不会保存任何更改。",
|
|
991
|
-
"dashboard.mvpHint": "
|
|
1014
|
+
"dashboard.mvpHint": "同步基线会创建 Agent 任务会话,完成状态与执行结果请在会话中查看。",
|
|
992
1015
|
"mode.open": "打开 Worktree 模式",
|
|
993
1016
|
"mode.exit": "退出 Worktree 模式",
|
|
994
1017
|
"mode.label": "Worktree",
|
|
@@ -1124,7 +1147,7 @@ window.__ModuleLoader__.load({
|
|
|
1124
1147
|
"permission.unverified": "无法确认 Session 权限,会话已保留。请检查 DSH 的权限设置;清理后的权限调整可在设置 → Worktree → 报错与修复中重试。",
|
|
1125
1148
|
"permission.unavailable": "暂时无法读取 Worktree Session 权限。请检查 DSH 连接和 Session 权限设置后重试。",
|
|
1126
1149
|
"permission.fullAccessTitle": "确认启用 Worktree Full access?",
|
|
1127
|
-
"permission.fullAccessDescription": "启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session
|
|
1150
|
+
"permission.fullAccessDescription": "启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。若命名预设尚未加载,原生权限菜单可能显示 Custom(自定义),实际仍使用完全文件访问与 ask 审批,无需仅为预设名称重启。目标 Worktree:{cwd}",
|
|
1128
1151
|
"permission.fullAccessAcknowledge": "我已了解风险,并愿意继续",
|
|
1129
1152
|
"permission.fullAccessEnable": "启用 Worktree Full access",
|
|
1130
1153
|
"status.loading": "正在加载工作区…",
|
|
@@ -1192,6 +1215,14 @@ window.__ModuleLoader__.load({
|
|
|
1192
1215
|
"error.unexpected": "操作失败(错误码:{code})。请刷新后重试;若仍失败,请将错误码和 DSH 日志提供给维护者。"
|
|
1193
1216
|
};
|
|
1194
1217
|
const en = {
|
|
1218
|
+
"steer.title": "Agent steer",
|
|
1219
|
+
"steer.pending": "Waiting for receipt",
|
|
1220
|
+
"steer.preparing": "Preparing receipt",
|
|
1221
|
+
"steer.received": "Entered conversation context",
|
|
1222
|
+
"steer.canceled": "Canceled",
|
|
1223
|
+
"steer.unknown": "Status unconfirmed",
|
|
1224
|
+
"steer.sender": "From: {sender}",
|
|
1225
|
+
"steer.receiptHint": "Receipt does not mean task completion. Entries belong to the current or most recent turn.",
|
|
1195
1226
|
"dashboard.mainReady": "Local checkout",
|
|
1196
1227
|
"dashboard.git.sessionRequired": "Create a Session for this working directory before opening files in the sidebar.",
|
|
1197
1228
|
"dashboard.git.outsideSession": "This file is outside the Session working directory. Open it in an IDE or use a Session at the repository root.",
|
|
@@ -1353,6 +1384,7 @@ window.__ModuleLoader__.load({
|
|
|
1353
1384
|
"dashboard.cancelInstructions": "Cancel",
|
|
1354
1385
|
"dashboard.instructionsSaveFailed": "Save failed; your draft is retained. Retry, or cancel and reopen if another window changed the instructions.",
|
|
1355
1386
|
"dashboard.editBase": "Edit baseline",
|
|
1387
|
+
"dashboard.openBaseWorktree": "Open base Worktree",
|
|
1356
1388
|
"dashboard.editBaseDescription": "Choose a local or fetched remote branch as the Git & Changes comparison baseline.",
|
|
1357
1389
|
"dashboard.searchBranches": "Search branches",
|
|
1358
1390
|
"dashboard.noMatchingBranches": "No matching branches",
|
|
@@ -1388,7 +1420,8 @@ window.__ModuleLoader__.load({
|
|
|
1388
1420
|
"dashboard.workingTree": "Uncommitted changes",
|
|
1389
1421
|
"dashboard.viewDetails": "View details",
|
|
1390
1422
|
"dashboard.derived": "Derived Worktrees",
|
|
1391
|
-
"dashboard.childrenHint": "
|
|
1423
|
+
"dashboard.childrenHint": "Direct Worktrees in this Workspace whose saved baseline matches the current branch, including archived entries. Changing a baseline updates this list.",
|
|
1424
|
+
"dashboard.noChildren": "No Worktrees have a saved baseline matching the current branch.",
|
|
1392
1425
|
"dashboard.viewChildren": "View all children",
|
|
1393
1426
|
"dashboard.quickActions": "Quick Actions",
|
|
1394
1427
|
"dashboard.action.terminal": "Open in Terminal",
|
|
@@ -1396,11 +1429,24 @@ window.__ModuleLoader__.load({
|
|
|
1396
1429
|
"dashboard.action.pullRequest": "Create Pull Request",
|
|
1397
1430
|
"dashboard.action.tests": "Run Tests",
|
|
1398
1431
|
"dashboard.action.sync": "Sync with Base",
|
|
1432
|
+
"dashboard.sync.description": "Choose a strategy. Confirming creates and opens a task Session in this Worktree for the Agent to execute under native permissions. It stops and reports uncommitted changes or conflicts.",
|
|
1433
|
+
"dashboard.sync.rebase": "Replay this branch’s commits onto the saved baseline, rewriting this branch’s history.",
|
|
1434
|
+
"dashboard.sync.merge": "Merge the saved baseline into this branch while preserving existing commit history.",
|
|
1435
|
+
"dashboard.sync.create": "Create sync Session",
|
|
1436
|
+
"dashboard.sync.creating": "Creating…",
|
|
1437
|
+
"dashboard.sync.openSession": "Open created Session",
|
|
1438
|
+
"dashboard.sync.partial": "The Session is retained. Open it to inspect before creating another Session or submitting the task again.",
|
|
1439
|
+
"dashboard.sync.binding-failed": "The Session was created, but its Worktree binding failed. Open it to check its directory and Worktree availability, and confirm the binding is restored before submitting the task.",
|
|
1440
|
+
"dashboard.sync.model-failed": "The Session was created and bound, but model setup failed. Check available models and configuration in the created Session.",
|
|
1441
|
+
"dashboard.sync.title-failed": "The Session was created and bound, but setting its title failed. Check or change the title in the created Session.",
|
|
1442
|
+
"dashboard.sync.reporting-failed": "The Session was created, but result reporting setup failed. Check reporting configuration in the created Session.",
|
|
1443
|
+
"dashboard.sync.prompt-failed": "The Session was created, but task submission was not confirmed. Inspect its messages and running state first to determine whether the task was accepted.",
|
|
1444
|
+
"dashboard.sync.failed": "Sync Session creation failed. Retry the same request.",
|
|
1399
1445
|
"dashboard.action.archive": "Archive Worktree",
|
|
1400
1446
|
"dashboard.hint.git": "View commits, committed and uncommitted line totals, changed files, and unified diffs relative to the selected branch baseline.",
|
|
1401
|
-
"dashboard.hint.children": "
|
|
1447
|
+
"dashboard.hint.children": "View Worktrees whose saved baseline matches the current branch.",
|
|
1402
1448
|
"dashboard.hint.settings": "Worktree instructions and preferences will appear here. No changes are saved yet.",
|
|
1403
|
-
"dashboard.mvpHint": "
|
|
1449
|
+
"dashboard.mvpHint": "Baseline synchronization creates an Agent task Session. Check that Session for completion and results.",
|
|
1404
1450
|
"mode.open": "Open Worktree mode",
|
|
1405
1451
|
"mode.exit": "Exit Worktree mode",
|
|
1406
1452
|
"mode.label": "Worktree",
|
|
@@ -1536,7 +1582,7 @@ window.__ModuleLoader__.load({
|
|
|
1536
1582
|
"permission.unverified": "Session permissions could not be verified; the Session was retained. Check the permission settings in DSH. Permission updates after cleanup can be retried in Settings → Worktree → Errors & recovery.",
|
|
1537
1583
|
"permission.unavailable": "Worktree Session permissions could not be read. Check your DSH connection and the Session permission settings, then retry.",
|
|
1538
1584
|
"permission.fullAccessTitle": "Enable Worktree Full access?",
|
|
1539
|
-
"permission.fullAccessDescription": "Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. Target Worktree: {cwd}",
|
|
1585
|
+
"permission.fullAccessDescription": "Worktree Full access lets this Session access linked Git metadata and Worktree files outside the Session directory. It disables filesystem confinement for this Session while keeping approval prompts enabled; network and process policy are unchanged. If the named preset has not loaded, the native permission menu may show Custom; full file access and ask approval still apply without restarting just for the preset label. Target Worktree: {cwd}",
|
|
1540
1586
|
"permission.fullAccessAcknowledge": "I understand the risks and want to continue",
|
|
1541
1587
|
"permission.fullAccessEnable": "Enable Worktree Full access",
|
|
1542
1588
|
"status.loading": "Loading Workspaces…",
|
|
@@ -1612,6 +1658,7 @@ window.__ModuleLoader__.load({
|
|
|
1612
1658
|
* the browser call surface auditable without making React know wire names.
|
|
1613
1659
|
*/
|
|
1614
1660
|
const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({
|
|
1661
|
+
syncWorktreeBaseline: "worktreeManager/syncWorktreeBaseline",
|
|
1615
1662
|
getWorkspaceGitState: "worktreeManager/getWorkspaceGitState",
|
|
1616
1663
|
getToolSettings: "worktreeManager/getToolSettings",
|
|
1617
1664
|
updateToolSettings: "worktreeManager/updateToolSettings",
|
|
@@ -1746,6 +1793,7 @@ window.__ModuleLoader__.load({
|
|
|
1746
1793
|
return unwrap(WORKTREE_CONNECTION_ENDPOINTS[method], await call(method, input));
|
|
1747
1794
|
}
|
|
1748
1795
|
return {
|
|
1796
|
+
syncWorktreeBaseline: (input) => invoke("syncWorktreeBaseline", input),
|
|
1749
1797
|
getToolSettings: (input) => invoke("getToolSettings", input),
|
|
1750
1798
|
updateToolSettings: (input) => invoke("updateToolSettings", input),
|
|
1751
1799
|
watchToolChanges: async (afterRevision, signal) => unwrap(WORKTREE_CONNECTION_ENDPOINTS.watchToolChanges, await call("watchToolChanges", { afterRevision }, signal)),
|
|
@@ -1969,6 +2017,7 @@ window.__ModuleLoader__.load({
|
|
|
1969
2017
|
const IconArchiveOutline20 = createDshIconAlias(exports$1, "IconArchiveOutline20", "IconArchiveOutlineRegular");
|
|
1970
2018
|
const IconBranchOutline16 = createDshIconAlias(exports$1, "IconBranchOutline16", "IconBranchOutlineRegular");
|
|
1971
2019
|
const IconChevronDownOutline14 = createDshIconAlias(exports$1, "IconChevronDownOutline14", "IconChevronDownOutlineRegular");
|
|
2020
|
+
const IconChevronRightOutline14 = createDshIconAlias(exports$1, "IconChevronRightOutline14", "IconChevronRightOutlineRegular");
|
|
1972
2021
|
const IconCheckOutline16 = createDshIconAlias(exports$1, "IconCheckOutline16", "IconCheckOutlineRegular");
|
|
1973
2022
|
const IconCloseFill14 = createDshIconAlias(exports$1, "IconCloseFill14", "IconCloseFillRegular");
|
|
1974
2023
|
const IconCloseOutline16 = createDshIconAlias(exports$1, "IconCloseOutline16", "IconCloseOutlineRegular");
|
|
@@ -1986,14 +2035,14 @@ window.__ModuleLoader__.load({
|
|
|
1986
2035
|
const IconSearchOutline16 = createDshIconAlias(exports$1, "IconSearchOutline16", "IconSearchOutlineRegular");
|
|
1987
2036
|
const IconTrashOutline16 = createDshIconAlias(exports$1, "IconTrashOutline16", "IconTrashOutlineRegular");
|
|
1988
2037
|
//#endregion
|
|
1989
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
1990
|
-
const css$
|
|
1991
|
-
const styleId$
|
|
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
|
|
2039
|
+
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
|
+
const styleId$9 = "@cerbur/clutch-dsh-worktree/worktree-context.css";
|
|
1992
2041
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree-context.css\"]") === null) {
|
|
1993
2042
|
const tag = document.createElement("style");
|
|
1994
2043
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
1995
|
-
tag.dataset.pluginCss = styleId$
|
|
1996
|
-
tag.textContent = css$
|
|
2044
|
+
tag.dataset.pluginCss = styleId$9;
|
|
2045
|
+
tag.textContent = css$9;
|
|
1997
2046
|
document.head.appendChild(tag);
|
|
1998
2047
|
}
|
|
1999
2048
|
var worktree_context_css_default = {
|
|
@@ -2050,14 +2099,14 @@ window.__ModuleLoader__.load({
|
|
|
2050
2099
|
globalSetViewMode?.(mode);
|
|
2051
2100
|
}
|
|
2052
2101
|
//#endregion
|
|
2053
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
2054
|
-
const css$7 = ".-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";
|
|
2055
|
-
const styleId$
|
|
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";
|
|
2104
|
+
const styleId$8 = "@cerbur/clutch-dsh-worktree/worktree.css";
|
|
2056
2105
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree.css\"]") === null) {
|
|
2057
2106
|
const tag = document.createElement("style");
|
|
2058
2107
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
2059
|
-
tag.dataset.pluginCss = styleId$
|
|
2060
|
-
tag.textContent = css$
|
|
2108
|
+
tag.dataset.pluginCss = styleId$8;
|
|
2109
|
+
tag.textContent = css$8;
|
|
2061
2110
|
document.head.appendChild(tag);
|
|
2062
2111
|
}
|
|
2063
2112
|
var worktree_css_default = {
|
|
@@ -2231,14 +2280,14 @@ window.__ModuleLoader__.load({
|
|
|
2231
2280
|
});
|
|
2232
2281
|
}
|
|
2233
2282
|
//#endregion
|
|
2234
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
2235
|
-
const css$
|
|
2236
|
-
const styleId$
|
|
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
|
|
2284
|
+
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
|
+
const styleId$7 = "@cerbur/clutch-dsh-worktree/dashboard-header-action.css";
|
|
2237
2286
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/dashboard-header-action.css\"]") === null) {
|
|
2238
2287
|
const tag = document.createElement("style");
|
|
2239
2288
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
2240
|
-
tag.dataset.pluginCss = styleId$
|
|
2241
|
-
tag.textContent = css$
|
|
2289
|
+
tag.dataset.pluginCss = styleId$7;
|
|
2290
|
+
tag.textContent = css$7;
|
|
2242
2291
|
document.head.appendChild(tag);
|
|
2243
2292
|
}
|
|
2244
2293
|
var dashboard_header_action_css_default = { "headerDashboardButton": "-cerbur-clutch-dsh-worktree-headerDashboardButton" };
|
|
@@ -2510,6 +2559,7 @@ window.__ModuleLoader__.load({
|
|
|
2510
2559
|
return record.gitRootPath ?? record.absolutePath;
|
|
2511
2560
|
}
|
|
2512
2561
|
Object.freeze([
|
|
2562
|
+
"syncWorktreeBaseline",
|
|
2513
2563
|
"getWorkspaceGitState",
|
|
2514
2564
|
"getToolSettings",
|
|
2515
2565
|
"updateToolSettings",
|
|
@@ -2724,6 +2774,18 @@ window.__ModuleLoader__.load({
|
|
|
2724
2774
|
limitHistory();
|
|
2725
2775
|
emit();
|
|
2726
2776
|
},
|
|
2777
|
+
/** Late results retain evidence without reactivating an unmounted UI source. */
|
|
2778
|
+
recordInactive(source, notices) {
|
|
2779
|
+
if (notices.length === 0) return;
|
|
2780
|
+
for (const notice of notices) snapshot = [...snapshot.filter((entry) => entry.key !== notice.key), {
|
|
2781
|
+
...notice,
|
|
2782
|
+
source,
|
|
2783
|
+
status: "inactive",
|
|
2784
|
+
actions: []
|
|
2785
|
+
}];
|
|
2786
|
+
limitHistory();
|
|
2787
|
+
emit();
|
|
2788
|
+
},
|
|
2727
2789
|
deactivate(source) {
|
|
2728
2790
|
sources.delete(source);
|
|
2729
2791
|
retire(source, "inactive");
|
|
@@ -2856,14 +2918,14 @@ window.__ModuleLoader__.load({
|
|
|
2856
2918
|
}, current.key);
|
|
2857
2919
|
}
|
|
2858
2920
|
//#endregion
|
|
2859
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
2860
|
-
const css$
|
|
2861
|
-
const styleId$
|
|
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
|
|
2922
|
+
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
|
+
const styleId$6 = "@cerbur/clutch-dsh-worktree/single-select.css";
|
|
2862
2924
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/single-select.css\"]") === null) {
|
|
2863
2925
|
const tag = document.createElement("style");
|
|
2864
2926
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
2865
|
-
tag.dataset.pluginCss = styleId$
|
|
2866
|
-
tag.textContent = css$
|
|
2927
|
+
tag.dataset.pluginCss = styleId$6;
|
|
2928
|
+
tag.textContent = css$6;
|
|
2867
2929
|
document.head.appendChild(tag);
|
|
2868
2930
|
}
|
|
2869
2931
|
var single_select_css_default = {
|
|
@@ -3257,14 +3319,14 @@ window.__ModuleLoader__.load({
|
|
|
3257
3319
|
});
|
|
3258
3320
|
}
|
|
3259
3321
|
//#endregion
|
|
3260
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
3261
|
-
const css$
|
|
3262
|
-
const styleId$
|
|
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
|
|
3323
|
+
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
|
+
const styleId$5 = "@cerbur/clutch-dsh-worktree/git-branch.css";
|
|
3263
3325
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/git-branch.css\"]") === null) {
|
|
3264
3326
|
const tag = document.createElement("style");
|
|
3265
3327
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
3266
|
-
tag.dataset.pluginCss = styleId$
|
|
3267
|
-
tag.textContent = css$
|
|
3328
|
+
tag.dataset.pluginCss = styleId$5;
|
|
3329
|
+
tag.textContent = css$5;
|
|
3268
3330
|
document.head.appendChild(tag);
|
|
3269
3331
|
}
|
|
3270
3332
|
var git_branch_css_default = { "branchFetch": "-cerbur-clutch-dsh-worktree-branchFetch" };
|
|
@@ -3546,7 +3608,8 @@ window.__ModuleLoader__.load({
|
|
|
3546
3608
|
if (current !== void 0) return current;
|
|
3547
3609
|
const created = {
|
|
3548
3610
|
generation: 0,
|
|
3549
|
-
stale: false
|
|
3611
|
+
stale: false,
|
|
3612
|
+
changeIds: /* @__PURE__ */ new Set()
|
|
3550
3613
|
};
|
|
3551
3614
|
entries.set(workspaceId, created);
|
|
3552
3615
|
return created;
|
|
@@ -3577,10 +3640,21 @@ window.__ModuleLoader__.load({
|
|
|
3577
3640
|
return promise;
|
|
3578
3641
|
};
|
|
3579
3642
|
return {
|
|
3643
|
+
resetChangeIds() {
|
|
3644
|
+
if (disposed) return;
|
|
3645
|
+
for (const entry of entries.values()) entry.changeIds.clear();
|
|
3646
|
+
},
|
|
3580
3647
|
invalidate(workspaceId, options) {
|
|
3581
3648
|
if (disposed) return;
|
|
3582
3649
|
const entry = entryFor(workspaceId);
|
|
3650
|
+
const changeId = options?.changeId;
|
|
3651
|
+
if (changeId !== void 0 && entry.changeIds.has(changeId)) return;
|
|
3583
3652
|
if (options?.reuseInFlight && entry.inFlight?.generation === entry.generation) return;
|
|
3653
|
+
if (changeId === void 0) entry.changeIds.clear();
|
|
3654
|
+
else {
|
|
3655
|
+
entry.changeIds.add(changeId);
|
|
3656
|
+
if (entry.changeIds.size > 128) entry.changeIds.delete(entry.changeIds.values().next().value);
|
|
3657
|
+
}
|
|
3584
3658
|
entry.generation += 1;
|
|
3585
3659
|
entry.stale = true;
|
|
3586
3660
|
entry.view = void 0;
|
|
@@ -5268,6 +5342,24 @@ window.__ModuleLoader__.load({
|
|
|
5268
5342
|
}
|
|
5269
5343
|
//#endregion
|
|
5270
5344
|
//#region lib/client/dashboard/dashboard-selection.js
|
|
5345
|
+
function localBranch(record) {
|
|
5346
|
+
if (record.currentBranch === null || record.currentHead !== void 0 && record.currentHead.kind !== "branch") return void 0;
|
|
5347
|
+
const branch = record.currentHead?.name ?? record.currentBranch ?? record.branch;
|
|
5348
|
+
return branch ? branch.replace(/^refs\/heads\//u, "") : void 0;
|
|
5349
|
+
}
|
|
5350
|
+
function matchesBaseline(baseBranch, branch) {
|
|
5351
|
+
return branch !== void 0 && (baseBranch === branch || baseBranch === `refs/heads/${branch}`);
|
|
5352
|
+
}
|
|
5353
|
+
/** Direct baseline relationships from the current Workspace projection, never Git ancestry. */
|
|
5354
|
+
function selectDerivedWorktrees(parent, records) {
|
|
5355
|
+
const branch = localBranch(parent);
|
|
5356
|
+
return records.filter((candidate) => candidate.workspaceId === parent.workspaceId && candidate.worktreeId !== parent.worktreeId && matchesBaseline(candidate.baseBranch, branch));
|
|
5357
|
+
}
|
|
5358
|
+
/** Navigate only when the saved baseline identifies one checkout in this Workspace. */
|
|
5359
|
+
function selectBaseWorktree(child, records, mainRecord, baseBranch = child.baseBranch) {
|
|
5360
|
+
const matches = (mainRecord === void 0 ? records : [...records, mainRecord]).filter((candidate) => candidate.workspaceId === child.workspaceId && candidate.worktreeId !== child.worktreeId && matchesBaseline(baseBranch, localBranch(candidate)));
|
|
5361
|
+
return matches.length === 1 ? matches[0] : void 0;
|
|
5362
|
+
}
|
|
5271
5363
|
function isMainWorktreeId$1(worktreeId) {
|
|
5272
5364
|
return worktreeId === "main" || worktreeId.startsWith("main:");
|
|
5273
5365
|
}
|
|
@@ -8565,7 +8657,7 @@ window.__ModuleLoader__.load({
|
|
|
8565
8657
|
});
|
|
8566
8658
|
const selectedWorkspaceIds = [...currentWorkspaceIds];
|
|
8567
8659
|
for (const workspaceId of selectedWorkspaceIds) viewReader.invalidate(workspaceId);
|
|
8568
|
-
const contextRefresh = options.invalidateContext === false ? void 0 : invalidateWorktreeContext?.();
|
|
8660
|
+
const contextRefresh = options.invalidateContext === false ? void 0 : invalidateWorktreeContext?.(void 0, { alreadyInvalidated: true });
|
|
8569
8661
|
await refreshGuard.current.run(async () => {
|
|
8570
8662
|
const [views] = await Promise.all([viewReader.readMany(selectedWorkspaceIds), contextRefresh ?? Promise.resolve()]);
|
|
8571
8663
|
return views;
|
|
@@ -8592,8 +8684,11 @@ window.__ModuleLoader__.load({
|
|
|
8592
8684
|
if (selectedWorkspaceIds.length === 0) return;
|
|
8593
8685
|
await Promise.allSettled(selectedWorkspaceIds.map(async (workspaceId) => {
|
|
8594
8686
|
const guard = guardFor(workspaceId);
|
|
8595
|
-
if (!options.alreadyInvalidated) viewReader.invalidate(workspaceId, {
|
|
8596
|
-
|
|
8687
|
+
if (!options.alreadyInvalidated) viewReader.invalidate(workspaceId, {
|
|
8688
|
+
reuseInFlight: options.reuseInFlight,
|
|
8689
|
+
changeId: options.changeId
|
|
8690
|
+
});
|
|
8691
|
+
const contextRefresh = options.invalidateContext === false ? void 0 : invalidateWorktreeContext?.(workspaceId, { alreadyInvalidated: true });
|
|
8597
8692
|
const generation = guard.begin();
|
|
8598
8693
|
try {
|
|
8599
8694
|
const view = await viewReader.read(workspaceId);
|
|
@@ -9603,14 +9698,14 @@ window.__ModuleLoader__.load({
|
|
|
9603
9698
|
};
|
|
9604
9699
|
const defaultOpenInAppController = new OpenInAppController();
|
|
9605
9700
|
//#endregion
|
|
9606
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
9607
|
-
const css$
|
|
9608
|
-
const styleId$
|
|
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
|
|
9702
|
+
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
|
+
const styleId$4 = "@cerbur/clutch-dsh-worktree/open-in-app.css";
|
|
9609
9704
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/open-in-app.css\"]") === null) {
|
|
9610
9705
|
const tag = document.createElement("style");
|
|
9611
9706
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
9612
|
-
tag.dataset.pluginCss = styleId$
|
|
9613
|
-
tag.textContent = css$
|
|
9707
|
+
tag.dataset.pluginCss = styleId$4;
|
|
9708
|
+
tag.textContent = css$4;
|
|
9614
9709
|
document.head.appendChild(tag);
|
|
9615
9710
|
}
|
|
9616
9711
|
var open_in_app_css_default = {
|
|
@@ -9814,14 +9909,14 @@ window.__ModuleLoader__.load({
|
|
|
9814
9909
|
};
|
|
9815
9910
|
}
|
|
9816
9911
|
//#endregion
|
|
9817
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
9818
|
-
const css$2 = ".-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-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-dashboardHeaderAside .-cerbur-clutch-dsh-worktree-dashboardFacts > div {\n padding: 4px 0;\n border: 0;\n}\n.-cerbur-clutch-dsh-worktree-dashboardHistorical {\n color: var(--dsw-alias-label-secondary, #788191);\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";
|
|
9819
|
-
const styleId$
|
|
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";
|
|
9914
|
+
const styleId$3 = "@cerbur/clutch-dsh-worktree/dashboard.css";
|
|
9820
9915
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/dashboard.css\"]") === null) {
|
|
9821
9916
|
const tag = document.createElement("style");
|
|
9822
9917
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
9823
|
-
tag.dataset.pluginCss = styleId$
|
|
9824
|
-
tag.textContent = css$
|
|
9918
|
+
tag.dataset.pluginCss = styleId$3;
|
|
9919
|
+
tag.textContent = css$3;
|
|
9825
9920
|
document.head.appendChild(tag);
|
|
9826
9921
|
}
|
|
9827
9922
|
var dashboard_css_default = {
|
|
@@ -9832,6 +9927,8 @@ window.__ModuleLoader__.load({
|
|
|
9832
9927
|
"dashboardSessions": "-cerbur-clutch-dsh-worktree-dashboardSessions",
|
|
9833
9928
|
"dashboardSessionLabel": "-cerbur-clutch-dsh-worktree-dashboardSessionLabel",
|
|
9834
9929
|
"dashboardSessionMeta": "-cerbur-clutch-dsh-worktree-dashboardSessionMeta",
|
|
9930
|
+
"dashboardChildPath": "-cerbur-clutch-dsh-worktree-dashboardChildPath",
|
|
9931
|
+
"dashboardChildState": "-cerbur-clutch-dsh-worktree-dashboardChildState",
|
|
9835
9932
|
"dashboardSessionStatus": "-cerbur-clutch-dsh-worktree-dashboardSessionStatus",
|
|
9836
9933
|
"dashboardSessionTime": "-cerbur-clutch-dsh-worktree-dashboardSessionTime",
|
|
9837
9934
|
"dashboardStartActions": "-cerbur-clutch-dsh-worktree-dashboardStartActions",
|
|
@@ -9860,7 +9957,10 @@ window.__ModuleLoader__.load({
|
|
|
9860
9957
|
"dashboardEmpty": "-cerbur-clutch-dsh-worktree-dashboardEmpty",
|
|
9861
9958
|
"dashboardFacts": "-cerbur-clutch-dsh-worktree-dashboardFacts",
|
|
9862
9959
|
"dashboardFactAction": "-cerbur-clutch-dsh-worktree-dashboardFactAction",
|
|
9960
|
+
"dashboardHeaderFacts": "-cerbur-clutch-dsh-worktree-dashboardHeaderFacts",
|
|
9863
9961
|
"dashboardHistorical": "-cerbur-clutch-dsh-worktree-dashboardHistorical",
|
|
9962
|
+
"dashboardSyncOptions": "-cerbur-clutch-dsh-worktree-dashboardSyncOptions",
|
|
9963
|
+
"dashboardBaseLink": "-cerbur-clutch-dsh-worktree-dashboardBaseLink",
|
|
9864
9964
|
"dashboardBaselineModal": "-cerbur-clutch-dsh-worktree-dashboardBaselineModal",
|
|
9865
9965
|
"dashboardBaselineModalContent": "-cerbur-clutch-dsh-worktree-dashboardBaselineModalContent",
|
|
9866
9966
|
"dashboardBaselinePicker": "-cerbur-clutch-dsh-worktree-dashboardBaselinePicker",
|
|
@@ -10115,14 +10215,14 @@ window.__ModuleLoader__.load({
|
|
|
10115
10215
|
});
|
|
10116
10216
|
}
|
|
10117
10217
|
//#endregion
|
|
10118
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
10119
|
-
const css$1 = ".-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";
|
|
10120
|
-
const styleId$
|
|
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
|
|
10219
|
+
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
|
+
const styleId$2 = "@cerbur/clutch-dsh-worktree/worktree-git.css";
|
|
10121
10221
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/worktree-git.css\"]") === null) {
|
|
10122
10222
|
const tag = document.createElement("style");
|
|
10123
10223
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
10124
|
-
tag.dataset.pluginCss = styleId$
|
|
10125
|
-
tag.textContent = css$
|
|
10224
|
+
tag.dataset.pluginCss = styleId$2;
|
|
10225
|
+
tag.textContent = css$2;
|
|
10126
10226
|
document.head.appendChild(tag);
|
|
10127
10227
|
}
|
|
10128
10228
|
var worktree_git_css_default = {
|
|
@@ -12292,14 +12392,14 @@ window.__ModuleLoader__.load({
|
|
|
12292
12392
|
});
|
|
12293
12393
|
}
|
|
12294
12394
|
//#endregion
|
|
12295
|
-
//#region \0clutch-dsh-worktree-css:/Users/yuancheng/.dsh/clutch-dsh-worktree/worktree/
|
|
12296
|
-
const css = ".-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";
|
|
12297
|
-
const styleId = "@cerbur/clutch-dsh-worktree/settings.css";
|
|
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
|
|
12396
|
+
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
|
+
const styleId$1 = "@cerbur/clutch-dsh-worktree/settings.css";
|
|
12298
12398
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/settings.css\"]") === null) {
|
|
12299
12399
|
const tag = document.createElement("style");
|
|
12300
12400
|
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
12301
|
-
tag.dataset.pluginCss = styleId;
|
|
12302
|
-
tag.textContent = css;
|
|
12401
|
+
tag.dataset.pluginCss = styleId$1;
|
|
12402
|
+
tag.textContent = css$1;
|
|
12303
12403
|
document.head.appendChild(tag);
|
|
12304
12404
|
}
|
|
12305
12405
|
var settings_css_default = {
|
|
@@ -12477,6 +12577,45 @@ window.__ModuleLoader__.load({
|
|
|
12477
12577
|
"children",
|
|
12478
12578
|
"settings"
|
|
12479
12579
|
];
|
|
12580
|
+
/** getRandomValues is also available on plain-HTTP LAN origins. */
|
|
12581
|
+
function createSyncRequestId() {
|
|
12582
|
+
return "sync:" + Array.from(globalThis.crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
12583
|
+
}
|
|
12584
|
+
function baselineSyncFailureNotices(record, requestId, result, t, onOpenSession) {
|
|
12585
|
+
if (result.status === "dispatched") return [];
|
|
12586
|
+
const status = result.status;
|
|
12587
|
+
const context = record.branch + " · " + record.absolutePath;
|
|
12588
|
+
return [{
|
|
12589
|
+
key: JSON.stringify([
|
|
12590
|
+
"sync",
|
|
12591
|
+
record.workspaceId,
|
|
12592
|
+
record.worktreeId,
|
|
12593
|
+
requestId,
|
|
12594
|
+
result.sessionId
|
|
12595
|
+
]),
|
|
12596
|
+
context,
|
|
12597
|
+
error: {
|
|
12598
|
+
code: "WORKTREE_SYNC_PARTIAL",
|
|
12599
|
+
message: result.error ?? "",
|
|
12600
|
+
retryable: false,
|
|
12601
|
+
details: {
|
|
12602
|
+
workspaceId: record.workspaceId,
|
|
12603
|
+
worktreeId: record.worktreeId,
|
|
12604
|
+
requestId,
|
|
12605
|
+
sessionId: result.sessionId,
|
|
12606
|
+
status
|
|
12607
|
+
}
|
|
12608
|
+
},
|
|
12609
|
+
text: t(`dashboard.sync.${status}`) + " " + t("dashboard.sync.partial"),
|
|
12610
|
+
message: (translate) => translate(`dashboard.sync.${status}`) + " " + translate("dashboard.sync.partial"),
|
|
12611
|
+
describe: (translate) => translate("dashboard.action.sync") + " · " + context,
|
|
12612
|
+
actions: onOpenSession === void 0 ? [] : [{
|
|
12613
|
+
label: t("dashboard.sync.openSession"),
|
|
12614
|
+
leaveSettings: true,
|
|
12615
|
+
onClick: () => onOpenSession(result.sessionId)
|
|
12616
|
+
}]
|
|
12617
|
+
}];
|
|
12618
|
+
}
|
|
12480
12619
|
function DashboardIcon({ kind }) {
|
|
12481
12620
|
return (0, react_jsx_runtime.jsx)("svg", {
|
|
12482
12621
|
viewBox: "0 0 24 24",
|
|
@@ -12519,16 +12658,7 @@ window.__ModuleLoader__.load({
|
|
|
12519
12658
|
})
|
|
12520
12659
|
] });
|
|
12521
12660
|
}
|
|
12522
|
-
function
|
|
12523
|
-
return (0, react_jsx_runtime.jsx)("button", {
|
|
12524
|
-
type: "button",
|
|
12525
|
-
className: dashboard_css_default.dashboardButton,
|
|
12526
|
-
disabled: true,
|
|
12527
|
-
title: t("dashboard.soon"),
|
|
12528
|
-
children
|
|
12529
|
-
});
|
|
12530
|
-
}
|
|
12531
|
-
function WorktreeBaselineEditor({ value, branches, loading, currentBranch, onSave, onFetch, onLoad, t, disabled, context }) {
|
|
12661
|
+
function WorktreeBaselineEditor({ value, renderValue, branches, loading, currentBranch, onSave, onFetch, onLoad, t, disabled, context }) {
|
|
12532
12662
|
const [saved, setSaved] = (0, react.useState)(value);
|
|
12533
12663
|
const [draft, setDraft] = (0, react.useState)();
|
|
12534
12664
|
const [pending, setPending] = (0, react.useState)(false);
|
|
@@ -12638,7 +12768,7 @@ window.__ModuleLoader__.load({
|
|
|
12638
12768
|
children: (0, react_jsx_runtime.jsx)(IconEditOutline16, {})
|
|
12639
12769
|
})
|
|
12640
12770
|
}) : void 0,
|
|
12641
|
-
children: saved === void 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
12771
|
+
children: renderValue !== void 0 ? renderValue(saved) : saved === void 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
12642
12772
|
className: dashboard_css_default.dashboardHistorical,
|
|
12643
12773
|
children: t("dashboard.historicalUnavailable")
|
|
12644
12774
|
}) : (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -12703,7 +12833,7 @@ window.__ModuleLoader__.load({
|
|
|
12703
12833
|
})] });
|
|
12704
12834
|
}
|
|
12705
12835
|
/** A managed Worktree or browser Main projection with explicit unavailable states for inapplicable facts. */
|
|
12706
|
-
function WorktreeDashboard({ manager, record, workspaceTitle, t, onClose, onOpenSidebar, isRightSidebarExpanded, sessions, sessionPresentations, sessionIds, actionPending, onOpenSession, onCreateSession, onCreateWorktree, onArchiveWorktree, onOpenFile, onSaveInstructions, onSaveBaseline, onFetchBranches, onLoadBranches, branches = [], branchesLoading = false }) {
|
|
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 }) {
|
|
12707
12837
|
const surface = (0, react.useRef)(null);
|
|
12708
12838
|
const heading = (0, react.useRef)(null);
|
|
12709
12839
|
const [placement, setPlacement] = (0, react.useState)();
|
|
@@ -12798,6 +12928,89 @@ window.__ModuleLoader__.load({
|
|
|
12798
12928
|
return result;
|
|
12799
12929
|
};
|
|
12800
12930
|
const displayedBaseline = onSaveBaseline === void 0 ? record.baseBranch : baselineBranch;
|
|
12931
|
+
const [syncOpen, setSyncOpen] = (0, react.useState)(false);
|
|
12932
|
+
const [syncStrategy, setSyncStrategy] = (0, react.useState)("rebase");
|
|
12933
|
+
const [syncPending, setSyncPending] = (0, react.useState)(false);
|
|
12934
|
+
const [syncError, setSyncError] = (0, react.useState)();
|
|
12935
|
+
const [syncResult, setSyncResult] = (0, react.useState)();
|
|
12936
|
+
const syncRequest = (0, react.useRef)();
|
|
12937
|
+
const syncBusy = (0, react.useRef)(false);
|
|
12938
|
+
const syncGeneration = (0, react.useRef)(0);
|
|
12939
|
+
(0, react.useEffect)(() => {
|
|
12940
|
+
syncGeneration.current++;
|
|
12941
|
+
syncBusy.current = false;
|
|
12942
|
+
syncRequest.current = void 0;
|
|
12943
|
+
setSyncOpen(false);
|
|
12944
|
+
setSyncPending(false);
|
|
12945
|
+
setSyncError(void 0);
|
|
12946
|
+
setSyncResult(void 0);
|
|
12947
|
+
return () => {
|
|
12948
|
+
syncGeneration.current++;
|
|
12949
|
+
};
|
|
12950
|
+
}, [
|
|
12951
|
+
record.workspaceId,
|
|
12952
|
+
record.worktreeId,
|
|
12953
|
+
displayedBaseline,
|
|
12954
|
+
manager
|
|
12955
|
+
]);
|
|
12956
|
+
const closeSync = () => {
|
|
12957
|
+
if (syncBusy.current) return;
|
|
12958
|
+
syncGeneration.current++;
|
|
12959
|
+
setSyncOpen(false);
|
|
12960
|
+
};
|
|
12961
|
+
const startSync = async () => {
|
|
12962
|
+
if (syncBusy.current || syncResult || !onSyncBaseline || !displayedBaseline) return;
|
|
12963
|
+
const generation = syncGeneration.current;
|
|
12964
|
+
syncBusy.current = true;
|
|
12965
|
+
setSyncPending(true);
|
|
12966
|
+
setSyncError(void 0);
|
|
12967
|
+
let requestId = syncRequest.current;
|
|
12968
|
+
try {
|
|
12969
|
+
requestId ??= createSyncRequestId();
|
|
12970
|
+
syncRequest.current = requestId;
|
|
12971
|
+
const result = await onSyncBaseline(syncStrategy, displayedBaseline, requestId);
|
|
12972
|
+
if (generation !== syncGeneration.current) {
|
|
12973
|
+
if (result.status !== "dispatched") worktreeDiagnostics.recordInactive("sync:" + requestId, baselineSyncFailureNotices(record, requestId, result, t));
|
|
12974
|
+
return;
|
|
12975
|
+
}
|
|
12976
|
+
setSyncResult(result);
|
|
12977
|
+
if (result.status === "dispatched") {
|
|
12978
|
+
setSyncOpen(false);
|
|
12979
|
+
onOpenSession(result.sessionId);
|
|
12980
|
+
}
|
|
12981
|
+
} catch (cause) {
|
|
12982
|
+
if (generation === syncGeneration.current) setSyncError(toWorktreeViewError(cause));
|
|
12983
|
+
} finally {
|
|
12984
|
+
if (generation === syncGeneration.current) {
|
|
12985
|
+
syncBusy.current = false;
|
|
12986
|
+
setSyncPending(false);
|
|
12987
|
+
}
|
|
12988
|
+
}
|
|
12989
|
+
};
|
|
12990
|
+
const partialSync = syncResult !== void 0 && syncResult.status !== "dispatched" ? {
|
|
12991
|
+
...syncResult,
|
|
12992
|
+
status: syncResult.status
|
|
12993
|
+
} : void 0;
|
|
12994
|
+
const renderBaseline = (value) => {
|
|
12995
|
+
const label = value === void 0 ? (0, react_jsx_runtime.jsx)("span", {
|
|
12996
|
+
className: dashboard_css_default.dashboardHistorical,
|
|
12997
|
+
children: t("dashboard.historicalUnavailable")
|
|
12998
|
+
}) : (0, react_jsx_runtime.jsx)("span", {
|
|
12999
|
+
"data-dashboard-baseline-value": true,
|
|
13000
|
+
title: value,
|
|
13001
|
+
children: value.replace(/^refs\/(heads|remotes)\//u, "")
|
|
13002
|
+
});
|
|
13003
|
+
const base = selectBaseWorktree(record, worktrees, mainRecord, value);
|
|
13004
|
+
return base === void 0 || onOpenWorktree === void 0 ? label : (0, react_jsx_runtime.jsxs)("button", {
|
|
13005
|
+
type: "button",
|
|
13006
|
+
className: dashboard_css_default.dashboardBaseLink,
|
|
13007
|
+
"data-dashboard-base-worktree": base.worktreeId,
|
|
13008
|
+
"aria-label": t("dashboard.openBaseWorktree"),
|
|
13009
|
+
title: t("dashboard.openBaseWorktree"),
|
|
13010
|
+
onClick: () => onOpenWorktree(base),
|
|
13011
|
+
children: [label, (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, {})]
|
|
13012
|
+
});
|
|
13013
|
+
};
|
|
12801
13014
|
const gitOverview = useWorktreeGitOverview({
|
|
12802
13015
|
manager,
|
|
12803
13016
|
workspaceId: record.workspaceId,
|
|
@@ -12809,9 +13022,43 @@ window.__ModuleLoader__.load({
|
|
|
12809
13022
|
const acquisitionFacts = selectWorktreeAcquisitionFacts(record);
|
|
12810
13023
|
const acquisitionLabel = acquisitionFacts.timestampKind === "imported" ? "dashboard.imported" : "dashboard.created";
|
|
12811
13024
|
const tabLabel = (value) => t(`dashboard.tab.${value}`);
|
|
12812
|
-
const
|
|
12813
|
-
|
|
12814
|
-
|
|
13025
|
+
const derivedWorktrees = selectDerivedWorktrees(record, worktrees);
|
|
13026
|
+
const worktreeList = (records) => records.length === 0 ? (0, react_jsx_runtime.jsx)("div", {
|
|
13027
|
+
className: dashboard_css_default.dashboardEmpty,
|
|
13028
|
+
children: (0, react_jsx_runtime.jsx)("p", { children: t("dashboard.noChildren") })
|
|
13029
|
+
}) : (0, react_jsx_runtime.jsx)("ul", {
|
|
13030
|
+
className: dashboard_css_default.dashboardSessions,
|
|
13031
|
+
children: records.map((child) => (0, react_jsx_runtime.jsx)("li", { children: (0, react_jsx_runtime.jsxs)("button", {
|
|
13032
|
+
type: "button",
|
|
13033
|
+
"data-dashboard-worktree": child.worktreeId,
|
|
13034
|
+
disabled: onOpenWorktree === void 0,
|
|
13035
|
+
onClick: () => onOpenWorktree?.(child),
|
|
13036
|
+
children: [
|
|
13037
|
+
(0, react_jsx_runtime.jsx)(IconBranchOutline16, {}),
|
|
13038
|
+
(0, react_jsx_runtime.jsxs)("span", {
|
|
13039
|
+
className: dashboard_css_default.dashboardSessionLabel,
|
|
13040
|
+
children: [(0, react_jsx_runtime.jsx)("strong", { children: child.currentHead?.name ?? child.currentBranch ?? child.branch }), (0, react_jsx_runtime.jsx)("code", {
|
|
13041
|
+
className: dashboard_css_default.dashboardChildPath,
|
|
13042
|
+
children: child.absolutePath
|
|
13043
|
+
})]
|
|
13044
|
+
}),
|
|
13045
|
+
(0, react_jsx_runtime.jsxs)("span", {
|
|
13046
|
+
className: dashboard_css_default.dashboardChildState,
|
|
13047
|
+
children: [child.status === "removed" && (0, react_jsx_runtime.jsx)("span", {
|
|
13048
|
+
className: dashboard_css_default.dashboardSoon,
|
|
13049
|
+
children: t("dashboard.archived")
|
|
13050
|
+
}), (0, react_jsx_runtime.jsx)("span", {
|
|
13051
|
+
className: dashboard_css_default.dashboardHealth,
|
|
13052
|
+
"data-health": child.health ?? "unknown",
|
|
13053
|
+
children: t(child.health === "ready" ? "worktree.ready" : child.health === "repair" ? "worktree.repair" : child.health === "recovery-needed" ? "worktree.recovery" : child.health === "branch-drift" ? "worktree.branchDrift" : child.health === "cleaned" ? "dashboard.cleaned" : "dashboard.unknown")
|
|
13054
|
+
})]
|
|
13055
|
+
}),
|
|
13056
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
13057
|
+
"aria-hidden": "true",
|
|
13058
|
+
children: "→"
|
|
13059
|
+
})
|
|
13060
|
+
]
|
|
13061
|
+
}) }, child.worktreeId))
|
|
12815
13062
|
});
|
|
12816
13063
|
const selectTab = (next, focus = false) => {
|
|
12817
13064
|
setTab(next);
|
|
@@ -12891,409 +13138,472 @@ window.__ModuleLoader__.load({
|
|
|
12891
13138
|
onKeyDown: (event) => {
|
|
12892
13139
|
if (event.defaultPrevented) return;
|
|
12893
13140
|
if (event.key === "Escape") {
|
|
13141
|
+
if (syncOpen) return;
|
|
12894
13142
|
if (event.target?.closest?.("[data-single-select-picker]")) return;
|
|
12895
13143
|
if (event.currentTarget.querySelector("[role=\"menu\"]")) return;
|
|
12896
13144
|
event.stopPropagation();
|
|
12897
13145
|
onClose();
|
|
12898
13146
|
}
|
|
12899
13147
|
},
|
|
12900
|
-
children: [
|
|
12901
|
-
|
|
12902
|
-
|
|
12903
|
-
|
|
12904
|
-
|
|
12905
|
-
|
|
12906
|
-
|
|
12907
|
-
|
|
12908
|
-
|
|
12909
|
-
|
|
12910
|
-
|
|
12911
|
-
|
|
12912
|
-
|
|
12913
|
-
|
|
12914
|
-
|
|
12915
|
-
|
|
12916
|
-
|
|
12917
|
-
|
|
12918
|
-
|
|
12919
|
-
|
|
12920
|
-
|
|
12921
|
-
|
|
12922
|
-
|
|
12923
|
-
|
|
12924
|
-
className: dashboard_css_default.dashboardButton,
|
|
12925
|
-
"aria-label": t(topActionIsCreateSession ? "dashboard.newSession" : "dashboard.back"),
|
|
12926
|
-
onClick: () => {
|
|
12927
|
-
if (topActionIsCreateSession) onCreateSession?.();
|
|
12928
|
-
else onClose();
|
|
12929
|
-
},
|
|
12930
|
-
children: topActionIsCreateSession ? t("dashboard.newSession") : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: ["← ", t("dashboard.back")] })
|
|
12931
|
-
}),
|
|
12932
|
-
!rightSidebarOpen && onOpenSidebar !== void 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
12933
|
-
label: t("dashboard.openSidebar"),
|
|
12934
|
-
side: "bottom",
|
|
12935
|
-
delayMs: 500,
|
|
12936
|
-
children: (0, react_jsx_runtime.jsx)("button", {
|
|
13148
|
+
children: [
|
|
13149
|
+
(0, react_jsx_runtime.jsxs)("header", {
|
|
13150
|
+
className: dashboard_css_default.dashboardTopline,
|
|
13151
|
+
"data-dashboard-topbar": true,
|
|
13152
|
+
"data-window-drag": true,
|
|
13153
|
+
children: [(0, react_jsx_runtime.jsxs)("span", {
|
|
13154
|
+
title: `${workspaceTitle}/${displayBranch}`,
|
|
13155
|
+
style: { marginInlineStart: `max(0px, calc(var(--dsh-frame-leading-clearance, 0px) - ${placement?.left ?? 0}px - 20px))` },
|
|
13156
|
+
children: [
|
|
13157
|
+
workspaceTitle,
|
|
13158
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
13159
|
+
"aria-hidden": "true",
|
|
13160
|
+
children: " / "
|
|
13161
|
+
}),
|
|
13162
|
+
displayBranch
|
|
13163
|
+
]
|
|
13164
|
+
}), (0, react_jsx_runtime.jsxs)("div", {
|
|
13165
|
+
className: dashboard_css_default.dashboardToplineActions,
|
|
13166
|
+
children: [
|
|
13167
|
+
(0, react_jsx_runtime.jsx)(OpenInAppButton, {
|
|
13168
|
+
path: record.absolutePath,
|
|
13169
|
+
t
|
|
13170
|
+
}),
|
|
13171
|
+
(0, react_jsx_runtime.jsx)("button", {
|
|
12937
13172
|
type: "button",
|
|
12938
|
-
className: dashboard_css_default.
|
|
12939
|
-
"aria-label": t("dashboard.
|
|
12940
|
-
title: t("dashboard.openSidebar"),
|
|
12941
|
-
"data-sidebar-right-expand": true,
|
|
13173
|
+
className: dashboard_css_default.dashboardButton,
|
|
13174
|
+
"aria-label": t(topActionIsCreateSession ? "dashboard.newSession" : "dashboard.back"),
|
|
12942
13175
|
onClick: () => {
|
|
12943
|
-
|
|
12944
|
-
|
|
13176
|
+
if (topActionIsCreateSession) onCreateSession?.();
|
|
13177
|
+
else onClose();
|
|
12945
13178
|
},
|
|
12946
|
-
children: (0, react_jsx_runtime.
|
|
12947
|
-
})
|
|
12948
|
-
|
|
12949
|
-
|
|
12950
|
-
|
|
12951
|
-
|
|
12952
|
-
|
|
12953
|
-
|
|
12954
|
-
|
|
12955
|
-
|
|
12956
|
-
|
|
12957
|
-
|
|
12958
|
-
|
|
12959
|
-
|
|
12960
|
-
|
|
12961
|
-
|
|
12962
|
-
|
|
12963
|
-
(0, react_jsx_runtime.jsx)("h1", {
|
|
12964
|
-
id: `${id}-title`,
|
|
12965
|
-
ref: heading,
|
|
12966
|
-
tabIndex: -1,
|
|
12967
|
-
children: (0, react_jsx_runtime.jsx)("button", {
|
|
12968
|
-
type: "button",
|
|
12969
|
-
className: dashboard_css_default.dashboardRefButton,
|
|
12970
|
-
"data-dashboard-copy": "branch",
|
|
12971
|
-
disabled: !branchAvailable,
|
|
12972
|
-
"aria-label": branchAvailable ? t("dashboard.copyBranch") : void 0,
|
|
12973
|
-
title: branchAvailable ? t("dashboard.copyBranch") : void 0,
|
|
12974
|
-
"aria-busy": branchAvailable && branchCopyState === "pending" ? true : void 0,
|
|
12975
|
-
onClick: branchAvailable ? () => void copyBranch() : void 0,
|
|
12976
|
-
children: displayBranch
|
|
12977
|
-
})
|
|
12978
|
-
}),
|
|
12979
|
-
record.currentHead?.kind !== void 0 && record.currentHead.kind !== "branch" && (0, react_jsx_runtime.jsx)("span", {
|
|
12980
|
-
className: dashboard_css_default.dashboardSoon,
|
|
12981
|
-
children: t(record.currentHead.kind === "tag" ? "dashboard.refKind.tag" : "dashboard.refKind.commit")
|
|
12982
|
-
}),
|
|
12983
|
-
(0, react_jsx_runtime.jsxs)("span", {
|
|
12984
|
-
className: dashboard_css_default.dashboardHealth,
|
|
12985
|
-
"data-health": isMain ? "local" : record.health ?? "unknown",
|
|
12986
|
-
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
12987
|
-
"aria-hidden": "true",
|
|
12988
|
-
children: "●"
|
|
12989
|
-
}), t(healthKey)]
|
|
12990
|
-
}),
|
|
12991
|
-
record.status === "removed" && (0, react_jsx_runtime.jsx)("span", {
|
|
12992
|
-
className: dashboard_css_default.dashboardSoon,
|
|
12993
|
-
children: t("dashboard.archived")
|
|
12994
|
-
})
|
|
12995
|
-
]
|
|
12996
|
-
}),
|
|
12997
|
-
(0, react_jsx_runtime.jsxs)("div", {
|
|
12998
|
-
className: dashboard_css_default.dashboardPath,
|
|
12999
|
-
children: [
|
|
13000
|
-
(0, react_jsx_runtime.jsx)("span", {
|
|
13001
|
-
className: dashboard_css_default.dashboardFieldLabel,
|
|
13002
|
-
children: "cwd"
|
|
13003
|
-
}),
|
|
13004
|
-
(0, react_jsx_runtime.jsx)("code", { children: record.absolutePath }),
|
|
13005
|
-
(0, react_jsx_runtime.jsx)("button", {
|
|
13006
|
-
type: "button",
|
|
13007
|
-
className: dashboard_css_default.dashboardIconButton,
|
|
13008
|
-
"aria-label": t("worktree.copyPath"),
|
|
13009
|
-
title: t("worktree.copyPath"),
|
|
13010
|
-
disabled: copyState === "pending",
|
|
13011
|
-
onClick: () => {
|
|
13012
|
-
copyPath();
|
|
13013
|
-
},
|
|
13014
|
-
children: (0, react_jsx_runtime.jsx)(IconCopyOutline16, {})
|
|
13015
|
-
})
|
|
13016
|
-
]
|
|
13017
|
-
}),
|
|
13018
|
-
(0, react_jsx_runtime.jsx)(NotificationToasts, { notices: [...branchCopyState === "failed" ? [{
|
|
13019
|
-
key: "copy-branch:" + record.absolutePath,
|
|
13020
|
-
text: t("dashboard.branchCopyFailed"),
|
|
13021
|
-
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13022
|
-
message: (translate) => translate("dashboard.branchCopyFailed")
|
|
13023
|
-
}] : [], ...copyState === "failed" ? [{
|
|
13024
|
-
key: "copy-path:" + record.absolutePath,
|
|
13025
|
-
text: t("dashboard.copyFailed"),
|
|
13026
|
-
context: workspaceTitle + " · " + record.absolutePath,
|
|
13027
|
-
message: (translate) => translate("dashboard.copyFailed")
|
|
13028
|
-
}] : []] }),
|
|
13029
|
-
(0, react_jsx_runtime.jsx)("p", {
|
|
13030
|
-
className: dashboard_css_default.dashboardCopyStatus,
|
|
13031
|
-
role: "status",
|
|
13032
|
-
children: branchCopyState === "copied" ? t("dashboard.branchCopied") : copyState === "copied" ? t("dashboard.copied") : "\xA0"
|
|
13179
|
+
children: topActionIsCreateSession ? t("dashboard.newSession") : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: ["← ", t("dashboard.back")] })
|
|
13180
|
+
}),
|
|
13181
|
+
!rightSidebarOpen && onOpenSidebar !== void 0 && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
13182
|
+
label: t("dashboard.openSidebar"),
|
|
13183
|
+
side: "bottom",
|
|
13184
|
+
delayMs: 500,
|
|
13185
|
+
children: (0, react_jsx_runtime.jsx)("button", {
|
|
13186
|
+
type: "button",
|
|
13187
|
+
className: dashboard_css_default.dashboardSidebarButton,
|
|
13188
|
+
"aria-label": t("dashboard.openSidebar"),
|
|
13189
|
+
title: t("dashboard.openSidebar"),
|
|
13190
|
+
"data-sidebar-right-expand": true,
|
|
13191
|
+
onClick: () => {
|
|
13192
|
+
onOpenSidebar();
|
|
13193
|
+
setRightSidebarOpen(true);
|
|
13194
|
+
},
|
|
13195
|
+
children: (0, react_jsx_runtime.jsx)(IconPanelLeftOutline16, {})
|
|
13033
13196
|
})
|
|
13034
|
-
]
|
|
13035
|
-
}), (0, react_jsx_runtime.jsx)("div", {
|
|
13036
|
-
className: dashboard_css_default.dashboardHeaderAside,
|
|
13037
|
-
children: (0, react_jsx_runtime.jsxs)("dl", {
|
|
13038
|
-
className: dashboard_css_default.dashboardFacts,
|
|
13039
|
-
children: [
|
|
13040
|
-
!isMain && (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13041
|
-
label: t(acquisitionLabel),
|
|
13042
|
-
children: acquisitionFacts.timestamp ? (0, react_jsx_runtime.jsx)("time", {
|
|
13043
|
-
dateTime: acquisitionFacts.timestamp,
|
|
13044
|
-
children: new Date(acquisitionFacts.timestamp).toLocaleString()
|
|
13045
|
-
}) : (0, react_jsx_runtime.jsx)("span", {
|
|
13046
|
-
className: dashboard_css_default.dashboardHistorical,
|
|
13047
|
-
children: t("dashboard.historicalUnavailable")
|
|
13048
|
-
})
|
|
13049
|
-
}),
|
|
13050
|
-
!isMain && (persistBaseline !== void 0 ? (0, react_jsx_runtime.jsx)(WorktreeBaselineEditor, {
|
|
13051
|
-
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13052
|
-
value: baselineBranch,
|
|
13053
|
-
branches,
|
|
13054
|
-
loading: branchesLoading,
|
|
13055
|
-
currentBranch: baselineCurrentBranch,
|
|
13056
|
-
onSave: persistBaseline,
|
|
13057
|
-
onFetch: onFetchBranches,
|
|
13058
|
-
onLoad: onLoadBranches,
|
|
13059
|
-
t,
|
|
13060
|
-
disabled: record.status !== "active" || record.health === "recovery-needed"
|
|
13061
|
-
}) : (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13062
|
-
label: t("dashboard.base"),
|
|
13063
|
-
baseline: true,
|
|
13064
|
-
children: displayedBaseline?.replace(/^refs\/(heads|remotes)\//u, "") ?? (0, react_jsx_runtime.jsx)("span", {
|
|
13065
|
-
className: dashboard_css_default.dashboardHistorical,
|
|
13066
|
-
children: t("dashboard.historicalUnavailable")
|
|
13067
|
-
})
|
|
13068
|
-
})),
|
|
13069
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13070
|
-
label: t("dashboard.source"),
|
|
13071
|
-
children: isMainWorktreeId$1(record.worktreeId) ? t("worktree.main") : t(record.source === "external" ? "dashboard.external" : "dashboard.plugin")
|
|
13072
|
-
})
|
|
13073
|
-
]
|
|
13074
13197
|
})
|
|
13075
|
-
|
|
13076
|
-
})
|
|
13077
|
-
|
|
13078
|
-
|
|
13079
|
-
|
|
13080
|
-
|
|
13081
|
-
|
|
13082
|
-
|
|
13083
|
-
id: `${id}-${value}`,
|
|
13084
|
-
role: "tab",
|
|
13085
|
-
"aria-selected": tab === value,
|
|
13086
|
-
"aria-controls": `${id}-panel`,
|
|
13087
|
-
tabIndex: tab === value ? 0 : -1,
|
|
13088
|
-
onClick: () => selectTab(value),
|
|
13089
|
-
onKeyDown: (event) => {
|
|
13090
|
-
const index = TABS.indexOf(value);
|
|
13091
|
-
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;
|
|
13092
|
-
if (next) {
|
|
13093
|
-
event.preventDefault();
|
|
13094
|
-
selectTab(next, true);
|
|
13095
|
-
}
|
|
13096
|
-
},
|
|
13097
|
-
children: [(0, react_jsx_runtime.jsx)(DashboardIcon, { kind: value }), tabLabel(value)]
|
|
13098
|
-
}, value))
|
|
13099
|
-
}),
|
|
13100
|
-
(0, react_jsx_runtime.jsx)("div", {
|
|
13101
|
-
id: `${id}-panel`,
|
|
13102
|
-
role: "tabpanel",
|
|
13103
|
-
"aria-labelledby": `${id}-${tab}`,
|
|
13104
|
-
tabIndex: 0,
|
|
13105
|
-
className: dashboard_css_default.dashboardPanel,
|
|
13106
|
-
children: tab === "overview" ? (0, react_jsx_runtime.jsxs)("div", {
|
|
13107
|
-
className: dashboard_css_default.dashboardGrid,
|
|
13198
|
+
]
|
|
13199
|
+
})]
|
|
13200
|
+
}),
|
|
13201
|
+
(0, react_jsx_runtime.jsxs)("div", {
|
|
13202
|
+
className: dashboard_css_default.dashboardPage,
|
|
13203
|
+
children: [
|
|
13204
|
+
(0, react_jsx_runtime.jsxs)("header", {
|
|
13205
|
+
className: dashboard_css_default.dashboardHeader,
|
|
13108
13206
|
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
13109
|
-
className: dashboard_css_default.
|
|
13207
|
+
className: dashboard_css_default.dashboardIdentity,
|
|
13110
13208
|
children: [
|
|
13111
|
-
(0, react_jsx_runtime.jsxs)("
|
|
13112
|
-
className: dashboard_css_default.
|
|
13209
|
+
(0, react_jsx_runtime.jsxs)("div", {
|
|
13210
|
+
className: dashboard_css_default.dashboardTitleRow,
|
|
13113
13211
|
children: [
|
|
13114
|
-
(0, react_jsx_runtime.
|
|
13115
|
-
(0, react_jsx_runtime.jsx)("
|
|
13116
|
-
|
|
13117
|
-
|
|
13118
|
-
|
|
13119
|
-
|
|
13120
|
-
disabled: actionPending || !onCreateWorktree,
|
|
13121
|
-
onClick: onCreateWorktree,
|
|
13122
|
-
"data-dashboard-action": "create-worktree",
|
|
13123
|
-
children: [(0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "git" }), (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: t("dashboard.newWorktree") }), (0, react_jsx_runtime.jsx)("small", { children: t("dashboard.newWorktreeDescription") })] })]
|
|
13124
|
-
}), (0, react_jsx_runtime.jsxs)("button", {
|
|
13212
|
+
(0, react_jsx_runtime.jsx)(IconBranchOutline16, {}),
|
|
13213
|
+
(0, react_jsx_runtime.jsx)("h1", {
|
|
13214
|
+
id: `${id}-title`,
|
|
13215
|
+
ref: heading,
|
|
13216
|
+
tabIndex: -1,
|
|
13217
|
+
children: (0, react_jsx_runtime.jsx)("button", {
|
|
13125
13218
|
type: "button",
|
|
13126
|
-
|
|
13127
|
-
|
|
13128
|
-
|
|
13129
|
-
|
|
13130
|
-
|
|
13219
|
+
className: dashboard_css_default.dashboardRefButton,
|
|
13220
|
+
"data-dashboard-copy": "branch",
|
|
13221
|
+
disabled: !branchAvailable,
|
|
13222
|
+
"aria-label": branchAvailable ? t("dashboard.copyBranch") : void 0,
|
|
13223
|
+
title: branchAvailable ? t("dashboard.copyBranch") : void 0,
|
|
13224
|
+
"aria-busy": branchAvailable && branchCopyState === "pending" ? true : void 0,
|
|
13225
|
+
onClick: branchAvailable ? () => void copyBranch() : void 0,
|
|
13226
|
+
children: displayBranch
|
|
13227
|
+
})
|
|
13228
|
+
}),
|
|
13229
|
+
record.currentHead?.kind !== void 0 && record.currentHead.kind !== "branch" && (0, react_jsx_runtime.jsx)("span", {
|
|
13230
|
+
className: dashboard_css_default.dashboardSoon,
|
|
13231
|
+
children: t(record.currentHead.kind === "tag" ? "dashboard.refKind.tag" : "dashboard.refKind.commit")
|
|
13232
|
+
}),
|
|
13233
|
+
(0, react_jsx_runtime.jsxs)("span", {
|
|
13234
|
+
className: dashboard_css_default.dashboardHealth,
|
|
13235
|
+
"data-health": isMain ? "local" : record.health ?? "unknown",
|
|
13236
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
13237
|
+
"aria-hidden": "true",
|
|
13238
|
+
children: "●"
|
|
13239
|
+
}), t(healthKey)]
|
|
13240
|
+
}),
|
|
13241
|
+
record.status === "removed" && (0, react_jsx_runtime.jsx)("span", {
|
|
13242
|
+
className: dashboard_css_default.dashboardSoon,
|
|
13243
|
+
children: t("dashboard.archived")
|
|
13131
13244
|
})
|
|
13132
13245
|
]
|
|
13133
13246
|
}),
|
|
13134
|
-
(0, react_jsx_runtime.jsxs)(
|
|
13135
|
-
|
|
13136
|
-
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "instructions" }),
|
|
13137
|
-
children: [(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.instructionsDescription") }), (0, react_jsx_runtime.jsx)(WorktreeInstructions, {
|
|
13138
|
-
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13139
|
-
value: record.instructions ?? "",
|
|
13140
|
-
onSave: onSaveInstructions,
|
|
13141
|
-
t,
|
|
13142
|
-
disabled: actionPending || record.health === "recovery-needed"
|
|
13143
|
-
})]
|
|
13144
|
-
}),
|
|
13145
|
-
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13146
|
-
title: tabLabel("sessions"),
|
|
13147
|
-
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "sessions" }),
|
|
13148
|
-
action: (0, react_jsx_runtime.jsx)("span", { children: sessionIds.length }),
|
|
13149
|
-
children: [sessionList(sessionIds.slice(0, 5)), tabLink("sessions", t("dashboard.viewSessions"))]
|
|
13150
|
-
})
|
|
13151
|
-
]
|
|
13152
|
-
}), (0, react_jsx_runtime.jsxs)("div", {
|
|
13153
|
-
className: dashboard_css_default.dashboardColumn,
|
|
13154
|
-
children: [
|
|
13155
|
-
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13156
|
-
title: t("dashboard.status"),
|
|
13157
|
-
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "git" }),
|
|
13247
|
+
(0, react_jsx_runtime.jsxs)("div", {
|
|
13248
|
+
className: dashboard_css_default.dashboardPath,
|
|
13158
13249
|
children: [
|
|
13159
|
-
(0, react_jsx_runtime.jsx)("
|
|
13160
|
-
|
|
13161
|
-
|
|
13162
|
-
children: [
|
|
13163
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13164
|
-
label: t("dashboard.health"),
|
|
13165
|
-
children: t(healthKey)
|
|
13166
|
-
}),
|
|
13167
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13168
|
-
label: t("dashboard.branch"),
|
|
13169
|
-
children: liveBranch
|
|
13170
|
-
}),
|
|
13171
|
-
!isMain && (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13172
|
-
label: t("dashboard.base"),
|
|
13173
|
-
children: displayedBaseline?.replace(/^refs\/(heads|remotes)\//u, "") ?? (0, react_jsx_runtime.jsx)("span", {
|
|
13174
|
-
className: dashboard_css_default.dashboardHistorical,
|
|
13175
|
-
children: t("dashboard.historicalUnavailable")
|
|
13176
|
-
})
|
|
13177
|
-
}),
|
|
13178
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13179
|
-
label: t("dashboard.aheadBehind"),
|
|
13180
|
-
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13181
|
-
state: gitOverview,
|
|
13182
|
-
metric: "aheadBehind",
|
|
13183
|
-
t
|
|
13184
|
-
})
|
|
13185
|
-
}),
|
|
13186
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13187
|
-
label: t("dashboard.committedChanges"),
|
|
13188
|
-
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13189
|
-
state: gitOverview,
|
|
13190
|
-
metric: "committed",
|
|
13191
|
-
t
|
|
13192
|
-
})
|
|
13193
|
-
}),
|
|
13194
|
-
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13195
|
-
label: t("dashboard.workingTree"),
|
|
13196
|
-
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13197
|
-
state: gitOverview,
|
|
13198
|
-
metric: "workingTree",
|
|
13199
|
-
t
|
|
13200
|
-
})
|
|
13201
|
-
})
|
|
13202
|
-
]
|
|
13250
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
13251
|
+
className: dashboard_css_default.dashboardFieldLabel,
|
|
13252
|
+
children: "cwd"
|
|
13203
13253
|
}),
|
|
13204
|
-
|
|
13254
|
+
(0, react_jsx_runtime.jsx)("code", { children: record.absolutePath }),
|
|
13255
|
+
(0, react_jsx_runtime.jsx)("button", {
|
|
13256
|
+
type: "button",
|
|
13257
|
+
className: dashboard_css_default.dashboardIconButton,
|
|
13258
|
+
"aria-label": t("worktree.copyPath"),
|
|
13259
|
+
title: t("worktree.copyPath"),
|
|
13260
|
+
disabled: copyState === "pending",
|
|
13261
|
+
onClick: () => {
|
|
13262
|
+
copyPath();
|
|
13263
|
+
},
|
|
13264
|
+
children: (0, react_jsx_runtime.jsx)(IconCopyOutline16, {})
|
|
13265
|
+
})
|
|
13205
13266
|
]
|
|
13206
13267
|
}),
|
|
13207
|
-
(0, react_jsx_runtime.
|
|
13208
|
-
|
|
13209
|
-
|
|
13210
|
-
|
|
13211
|
-
|
|
13212
|
-
|
|
13213
|
-
|
|
13214
|
-
|
|
13215
|
-
|
|
13216
|
-
|
|
13217
|
-
|
|
13218
|
-
|
|
13219
|
-
|
|
13220
|
-
|
|
13221
|
-
|
|
13222
|
-
"terminal",
|
|
13223
|
-
"diff",
|
|
13224
|
-
"pullRequest",
|
|
13225
|
-
"tests",
|
|
13226
|
-
"sync"
|
|
13227
|
-
].map((action) => (0, react_jsx_runtime.jsx)(PlaceholderButton, {
|
|
13228
|
-
t,
|
|
13229
|
-
children: t(`dashboard.action.${action}`)
|
|
13230
|
-
}, action)), (0, react_jsx_runtime.jsx)("button", {
|
|
13231
|
-
type: "button",
|
|
13232
|
-
className: dashboard_css_default.dashboardButton,
|
|
13233
|
-
disabled: actionPending || !onArchiveWorktree,
|
|
13234
|
-
onClick: onArchiveWorktree,
|
|
13235
|
-
"data-dashboard-action": "archive-worktree",
|
|
13236
|
-
children: t("dashboard.action.archive")
|
|
13237
|
-
})]
|
|
13238
|
-
})
|
|
13268
|
+
(0, react_jsx_runtime.jsx)(NotificationToasts, { notices: [...branchCopyState === "failed" ? [{
|
|
13269
|
+
key: "copy-branch:" + record.absolutePath,
|
|
13270
|
+
text: t("dashboard.branchCopyFailed"),
|
|
13271
|
+
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13272
|
+
message: (translate) => translate("dashboard.branchCopyFailed")
|
|
13273
|
+
}] : [], ...copyState === "failed" ? [{
|
|
13274
|
+
key: "copy-path:" + record.absolutePath,
|
|
13275
|
+
text: t("dashboard.copyFailed"),
|
|
13276
|
+
context: workspaceTitle + " · " + record.absolutePath,
|
|
13277
|
+
message: (translate) => translate("dashboard.copyFailed")
|
|
13278
|
+
}] : []] }),
|
|
13279
|
+
(0, react_jsx_runtime.jsx)("p", {
|
|
13280
|
+
className: dashboard_css_default.dashboardCopyStatus,
|
|
13281
|
+
role: "status",
|
|
13282
|
+
children: branchCopyState === "copied" ? t("dashboard.branchCopied") : copyState === "copied" ? t("dashboard.copied") : "\xA0"
|
|
13239
13283
|
})
|
|
13240
13284
|
]
|
|
13285
|
+
}), (0, react_jsx_runtime.jsx)("div", {
|
|
13286
|
+
className: dashboard_css_default.dashboardHeaderAside,
|
|
13287
|
+
children: (0, react_jsx_runtime.jsxs)("dl", {
|
|
13288
|
+
className: `${dashboard_css_default.dashboardFacts} ${dashboard_css_default.dashboardHeaderFacts}`,
|
|
13289
|
+
children: [
|
|
13290
|
+
!isMain && (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13291
|
+
label: t(acquisitionLabel),
|
|
13292
|
+
children: acquisitionFacts.timestamp ? (0, react_jsx_runtime.jsx)("time", {
|
|
13293
|
+
dateTime: acquisitionFacts.timestamp,
|
|
13294
|
+
children: new Date(acquisitionFacts.timestamp).toLocaleString()
|
|
13295
|
+
}) : (0, react_jsx_runtime.jsx)("span", {
|
|
13296
|
+
className: dashboard_css_default.dashboardHistorical,
|
|
13297
|
+
children: t("dashboard.historicalUnavailable")
|
|
13298
|
+
})
|
|
13299
|
+
}),
|
|
13300
|
+
!isMain && (persistBaseline !== void 0 ? (0, react_jsx_runtime.jsx)(WorktreeBaselineEditor, {
|
|
13301
|
+
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13302
|
+
value: baselineBranch,
|
|
13303
|
+
renderValue: renderBaseline,
|
|
13304
|
+
branches,
|
|
13305
|
+
loading: branchesLoading,
|
|
13306
|
+
currentBranch: baselineCurrentBranch,
|
|
13307
|
+
onSave: persistBaseline,
|
|
13308
|
+
onFetch: onFetchBranches,
|
|
13309
|
+
onLoad: onLoadBranches,
|
|
13310
|
+
t,
|
|
13311
|
+
disabled: record.status !== "active" || record.health === "recovery-needed"
|
|
13312
|
+
}) : (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13313
|
+
label: t("dashboard.base"),
|
|
13314
|
+
baseline: true,
|
|
13315
|
+
children: renderBaseline(displayedBaseline)
|
|
13316
|
+
})),
|
|
13317
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13318
|
+
label: t("dashboard.source"),
|
|
13319
|
+
children: isMainWorktreeId$1(record.worktreeId) ? t("worktree.main") : t(record.source === "external" ? "dashboard.external" : "dashboard.plugin")
|
|
13320
|
+
})
|
|
13321
|
+
]
|
|
13322
|
+
})
|
|
13241
13323
|
})]
|
|
13242
|
-
})
|
|
13243
|
-
|
|
13244
|
-
|
|
13245
|
-
|
|
13246
|
-
|
|
13247
|
-
|
|
13248
|
-
currentBranch: baselineCurrentBranch,
|
|
13249
|
-
capturedBaseline: record.baseCommit !== void 0,
|
|
13250
|
-
onOpenFile: onOpenFile === void 0 ? void 0 : (filePath) => {
|
|
13251
|
-
onOpenFile?.(filePath);
|
|
13252
|
-
setRightSidebarOpen(isRightSidebarExpanded?.() ?? false);
|
|
13253
|
-
},
|
|
13254
|
-
t
|
|
13255
|
-
}) : tab === "sessions" ? (0, react_jsx_runtime.jsx)(Card, {
|
|
13256
|
-
title: tabLabel("sessions"),
|
|
13257
|
-
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "sessions" }),
|
|
13258
|
-
action: (0, react_jsx_runtime.jsx)("button", {
|
|
13324
|
+
}),
|
|
13325
|
+
(0, react_jsx_runtime.jsx)("div", {
|
|
13326
|
+
className: dashboard_css_default.dashboardTabs,
|
|
13327
|
+
role: "tablist",
|
|
13328
|
+
"aria-label": t("dashboard.title"),
|
|
13329
|
+
children: TABS.map((value) => (0, react_jsx_runtime.jsxs)("button", {
|
|
13259
13330
|
type: "button",
|
|
13260
|
-
|
|
13261
|
-
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
13266
|
-
|
|
13267
|
-
|
|
13268
|
-
|
|
13269
|
-
|
|
13331
|
+
id: `${id}-${value}`,
|
|
13332
|
+
role: "tab",
|
|
13333
|
+
"aria-selected": tab === value,
|
|
13334
|
+
"aria-controls": `${id}-panel`,
|
|
13335
|
+
tabIndex: tab === value ? 0 : -1,
|
|
13336
|
+
onClick: () => selectTab(value),
|
|
13337
|
+
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;
|
|
13340
|
+
if (next) {
|
|
13341
|
+
event.preventDefault();
|
|
13342
|
+
selectTab(next, true);
|
|
13343
|
+
}
|
|
13344
|
+
},
|
|
13345
|
+
children: [(0, react_jsx_runtime.jsx)(DashboardIcon, { kind: value }), tabLabel(value)]
|
|
13346
|
+
}, value))
|
|
13347
|
+
}),
|
|
13348
|
+
(0, react_jsx_runtime.jsx)("div", {
|
|
13349
|
+
id: `${id}-panel`,
|
|
13350
|
+
role: "tabpanel",
|
|
13351
|
+
"aria-labelledby": `${id}-${tab}`,
|
|
13352
|
+
tabIndex: 0,
|
|
13353
|
+
className: dashboard_css_default.dashboardPanel,
|
|
13354
|
+
children: tab === "overview" ? (0, react_jsx_runtime.jsxs)("div", {
|
|
13355
|
+
className: dashboard_css_default.dashboardGrid,
|
|
13356
|
+
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
13357
|
+
className: dashboard_css_default.dashboardColumn,
|
|
13358
|
+
children: [
|
|
13359
|
+
(0, react_jsx_runtime.jsxs)("section", {
|
|
13360
|
+
className: dashboard_css_default.dashboardStart,
|
|
13361
|
+
children: [
|
|
13362
|
+
(0, react_jsx_runtime.jsxs)("h2", { children: [(0, react_jsx_runtime.jsx)(IconBranchOutline16, {}), t("dashboard.start")] }),
|
|
13363
|
+
(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.startDescription") }),
|
|
13364
|
+
(0, react_jsx_runtime.jsxs)("div", {
|
|
13365
|
+
className: dashboard_css_default.dashboardStartActions,
|
|
13366
|
+
children: [(0, react_jsx_runtime.jsxs)("button", {
|
|
13367
|
+
type: "button",
|
|
13368
|
+
disabled: actionPending || !onCreateWorktree,
|
|
13369
|
+
onClick: onCreateWorktree,
|
|
13370
|
+
"data-dashboard-action": "create-worktree",
|
|
13371
|
+
children: [(0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "git" }), (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: t("dashboard.newWorktree") }), (0, react_jsx_runtime.jsx)("small", { children: t("dashboard.newWorktreeDescription") })] })]
|
|
13372
|
+
}), (0, react_jsx_runtime.jsxs)("button", {
|
|
13373
|
+
type: "button",
|
|
13374
|
+
disabled: actionPending || !onCreateSession,
|
|
13375
|
+
onClick: onCreateSession,
|
|
13376
|
+
"data-dashboard-action": "create-session",
|
|
13377
|
+
children: [(0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "sessions" }), (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: t("dashboard.newSession") }), (0, react_jsx_runtime.jsx)("small", { children: t("dashboard.newSessionDescription") })] })]
|
|
13378
|
+
})]
|
|
13379
|
+
})
|
|
13380
|
+
]
|
|
13381
|
+
}),
|
|
13382
|
+
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13383
|
+
title: t("dashboard.instructions"),
|
|
13384
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "instructions" }),
|
|
13385
|
+
children: [(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.instructionsDescription") }), (0, react_jsx_runtime.jsx)(WorktreeInstructions, {
|
|
13386
|
+
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13387
|
+
value: record.instructions ?? "",
|
|
13388
|
+
onSave: onSaveInstructions,
|
|
13389
|
+
t,
|
|
13390
|
+
disabled: actionPending || record.health === "recovery-needed"
|
|
13391
|
+
})]
|
|
13392
|
+
}),
|
|
13393
|
+
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13394
|
+
title: tabLabel("sessions"),
|
|
13395
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "sessions" }),
|
|
13396
|
+
action: (0, react_jsx_runtime.jsx)("span", { children: sessionIds.length }),
|
|
13397
|
+
children: [sessionList(sessionIds.slice(0, 5)), tabLink("sessions", t("dashboard.viewSessions"))]
|
|
13398
|
+
})
|
|
13399
|
+
]
|
|
13400
|
+
}), (0, react_jsx_runtime.jsxs)("div", {
|
|
13401
|
+
className: dashboard_css_default.dashboardColumn,
|
|
13402
|
+
children: [
|
|
13403
|
+
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13404
|
+
title: t("dashboard.status"),
|
|
13405
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "git" }),
|
|
13406
|
+
children: [
|
|
13407
|
+
(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.statusHint") }),
|
|
13408
|
+
(0, react_jsx_runtime.jsxs)("dl", {
|
|
13409
|
+
className: dashboard_css_default.dashboardFacts,
|
|
13410
|
+
children: [
|
|
13411
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13412
|
+
label: t("dashboard.health"),
|
|
13413
|
+
children: t(healthKey)
|
|
13414
|
+
}),
|
|
13415
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13416
|
+
label: t("dashboard.branch"),
|
|
13417
|
+
children: liveBranch
|
|
13418
|
+
}),
|
|
13419
|
+
!isMain && (0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13420
|
+
label: t("dashboard.base"),
|
|
13421
|
+
children: displayedBaseline?.replace(/^refs\/(heads|remotes)\//u, "") ?? (0, react_jsx_runtime.jsx)("span", {
|
|
13422
|
+
className: dashboard_css_default.dashboardHistorical,
|
|
13423
|
+
children: t("dashboard.historicalUnavailable")
|
|
13424
|
+
})
|
|
13425
|
+
}),
|
|
13426
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13427
|
+
label: t("dashboard.aheadBehind"),
|
|
13428
|
+
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13429
|
+
state: gitOverview,
|
|
13430
|
+
metric: "aheadBehind",
|
|
13431
|
+
t
|
|
13432
|
+
})
|
|
13433
|
+
}),
|
|
13434
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13435
|
+
label: t("dashboard.committedChanges"),
|
|
13436
|
+
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13437
|
+
state: gitOverview,
|
|
13438
|
+
metric: "committed",
|
|
13439
|
+
t
|
|
13440
|
+
})
|
|
13441
|
+
}),
|
|
13442
|
+
(0, react_jsx_runtime.jsx)(DashboardFactRow, {
|
|
13443
|
+
label: t("dashboard.workingTree"),
|
|
13444
|
+
children: (0, react_jsx_runtime.jsx)(WorktreeGitOverviewValue, {
|
|
13445
|
+
state: gitOverview,
|
|
13446
|
+
metric: "workingTree",
|
|
13447
|
+
t
|
|
13448
|
+
})
|
|
13449
|
+
})
|
|
13450
|
+
]
|
|
13451
|
+
}),
|
|
13452
|
+
tabLink("git", t("dashboard.viewDetails"))
|
|
13453
|
+
]
|
|
13454
|
+
}),
|
|
13455
|
+
(0, react_jsx_runtime.jsxs)(Card, {
|
|
13456
|
+
title: t("dashboard.derived"),
|
|
13457
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "children" }),
|
|
13458
|
+
action: (0, react_jsx_runtime.jsx)("span", { children: derivedWorktrees.length }),
|
|
13459
|
+
children: [
|
|
13460
|
+
(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.childrenHint") }),
|
|
13461
|
+
worktreeList(derivedWorktrees.slice(0, 5)),
|
|
13462
|
+
tabLink("children", t("dashboard.viewChildren"))
|
|
13463
|
+
]
|
|
13464
|
+
}),
|
|
13465
|
+
(0, react_jsx_runtime.jsx)(Card, {
|
|
13466
|
+
title: t("dashboard.quickActions"),
|
|
13467
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "actions" }),
|
|
13468
|
+
children: (0, react_jsx_runtime.jsxs)("div", {
|
|
13469
|
+
className: dashboard_css_default.dashboardQuickActions,
|
|
13470
|
+
children: [(0, react_jsx_runtime.jsx)("button", {
|
|
13471
|
+
type: "button",
|
|
13472
|
+
className: dashboard_css_default.dashboardButton,
|
|
13473
|
+
"data-dashboard-action": "sync-baseline",
|
|
13474
|
+
disabled: actionPending || !onSyncBaseline || !displayedBaseline,
|
|
13475
|
+
onClick: () => {
|
|
13476
|
+
setSyncOpen(true);
|
|
13477
|
+
},
|
|
13478
|
+
children: t("dashboard.action.sync")
|
|
13479
|
+
}), (0, react_jsx_runtime.jsx)("button", {
|
|
13480
|
+
type: "button",
|
|
13481
|
+
className: dashboard_css_default.dashboardButton,
|
|
13482
|
+
disabled: actionPending || !onArchiveWorktree,
|
|
13483
|
+
onClick: onArchiveWorktree,
|
|
13484
|
+
"data-dashboard-action": "archive-worktree",
|
|
13485
|
+
children: t("dashboard.action.archive")
|
|
13486
|
+
})]
|
|
13487
|
+
})
|
|
13488
|
+
})
|
|
13489
|
+
]
|
|
13490
|
+
})]
|
|
13491
|
+
}) : tab === "git" ? (0, react_jsx_runtime.jsx)(WorktreeGitPanel, {
|
|
13492
|
+
context: workspaceTitle + " · " + record.branch + " · " + record.absolutePath,
|
|
13270
13493
|
manager,
|
|
13271
|
-
|
|
13272
|
-
|
|
13273
|
-
|
|
13274
|
-
|
|
13275
|
-
|
|
13276
|
-
|
|
13277
|
-
|
|
13494
|
+
workspaceId: record.workspaceId,
|
|
13495
|
+
worktreeId: record.worktreeId,
|
|
13496
|
+
defaultBaselineBranch: displayedBaseline,
|
|
13497
|
+
currentBranch: baselineCurrentBranch,
|
|
13498
|
+
capturedBaseline: record.baseCommit !== void 0,
|
|
13499
|
+
onOpenFile: onOpenFile === void 0 ? void 0 : (filePath) => {
|
|
13500
|
+
onOpenFile?.(filePath);
|
|
13501
|
+
setRightSidebarOpen(isRightSidebarExpanded?.() ?? false);
|
|
13278
13502
|
},
|
|
13279
13503
|
t
|
|
13280
|
-
},
|
|
13281
|
-
|
|
13282
|
-
|
|
13283
|
-
|
|
13284
|
-
|
|
13285
|
-
|
|
13286
|
-
|
|
13287
|
-
|
|
13288
|
-
|
|
13504
|
+
}) : tab === "sessions" ? (0, react_jsx_runtime.jsx)(Card, {
|
|
13505
|
+
title: tabLabel("sessions"),
|
|
13506
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "sessions" }),
|
|
13507
|
+
action: (0, react_jsx_runtime.jsx)("button", {
|
|
13508
|
+
type: "button",
|
|
13509
|
+
className: dashboard_css_default.dashboardButton,
|
|
13510
|
+
disabled: actionPending || !onCreateSession,
|
|
13511
|
+
onClick: onCreateSession,
|
|
13512
|
+
children: t("dashboard.newSession")
|
|
13513
|
+
}),
|
|
13514
|
+
children: sessionList(sessionIds)
|
|
13515
|
+
}) : tab === "settings" ? (0, react_jsx_runtime.jsx)(Card, {
|
|
13516
|
+
title: tabLabel("settings"),
|
|
13517
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "settings" }),
|
|
13518
|
+
children: (0, react_jsx_runtime.jsx)(ToolSettings, {
|
|
13519
|
+
manager,
|
|
13520
|
+
scope: isMainWorktreeId$1(record.worktreeId) ? {
|
|
13521
|
+
kind: "local",
|
|
13522
|
+
workspaceId: record.workspaceId
|
|
13523
|
+
} : {
|
|
13524
|
+
kind: "worktree",
|
|
13525
|
+
workspaceId: record.workspaceId,
|
|
13526
|
+
worktreeId: record.worktreeId
|
|
13527
|
+
},
|
|
13528
|
+
t
|
|
13529
|
+
}, JSON.stringify([record.workspaceId, record.worktreeId]))
|
|
13530
|
+
}) : (0, react_jsx_runtime.jsxs)(Card, {
|
|
13531
|
+
title: tabLabel("children"),
|
|
13532
|
+
icon: (0, react_jsx_runtime.jsx)(DashboardIcon, { kind: "children" }),
|
|
13533
|
+
action: (0, react_jsx_runtime.jsx)("span", { children: derivedWorktrees.length }),
|
|
13534
|
+
children: [(0, react_jsx_runtime.jsx)("p", { children: t("dashboard.childrenHint") }), worktreeList(derivedWorktrees)]
|
|
13535
|
+
})
|
|
13536
|
+
}),
|
|
13537
|
+
(0, react_jsx_runtime.jsx)("p", {
|
|
13538
|
+
className: dashboard_css_default.dashboardFooter,
|
|
13539
|
+
children: t("dashboard.mvpHint")
|
|
13289
13540
|
})
|
|
13290
|
-
|
|
13291
|
-
|
|
13292
|
-
|
|
13293
|
-
|
|
13541
|
+
]
|
|
13542
|
+
}),
|
|
13543
|
+
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
13544
|
+
open: syncOpen,
|
|
13545
|
+
onClose: closeSync,
|
|
13546
|
+
closeLabel: t("dialog.close"),
|
|
13547
|
+
title: t("dashboard.action.sync"),
|
|
13548
|
+
description: t("dashboard.sync.description"),
|
|
13549
|
+
className: dashboard_css_default.dashboardBaselineModal,
|
|
13550
|
+
footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13551
|
+
variant: "outline",
|
|
13552
|
+
disabled: syncPending,
|
|
13553
|
+
onClick: closeSync,
|
|
13554
|
+
children: t("dashboard.cancelBase")
|
|
13555
|
+
}), syncResult ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13556
|
+
variant: "primary",
|
|
13557
|
+
onClick: () => onOpenSession(syncResult.sessionId),
|
|
13558
|
+
children: t("dashboard.sync.openSession")
|
|
13559
|
+
}) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13560
|
+
variant: "primary",
|
|
13561
|
+
disabled: syncPending,
|
|
13562
|
+
onClick: () => void startSync(),
|
|
13563
|
+
children: t(syncPending ? "dashboard.sync.creating" : "dashboard.sync.create")
|
|
13564
|
+
})] }),
|
|
13565
|
+
children: (0, react_jsx_runtime.jsxs)("div", {
|
|
13566
|
+
className: dashboard_css_default.dashboardSyncOptions,
|
|
13567
|
+
children: [
|
|
13568
|
+
(0, react_jsx_runtime.jsxs)("p", { children: [
|
|
13569
|
+
(0, react_jsx_runtime.jsx)("code", { children: displayedBaseline }),
|
|
13570
|
+
(0, react_jsx_runtime.jsx)("span", {
|
|
13571
|
+
"aria-hidden": "true",
|
|
13572
|
+
children: " → "
|
|
13573
|
+
}),
|
|
13574
|
+
(0, react_jsx_runtime.jsx)("code", { children: record.currentBranch ?? record.branch })
|
|
13575
|
+
] }),
|
|
13576
|
+
["rebase", "merge"].map((strategy) => (0, react_jsx_runtime.jsxs)("label", { children: [(0, react_jsx_runtime.jsx)("input", {
|
|
13577
|
+
type: "radio",
|
|
13578
|
+
name: `${id}-sync-strategy`,
|
|
13579
|
+
value: strategy,
|
|
13580
|
+
checked: syncStrategy === strategy,
|
|
13581
|
+
disabled: syncPending || syncResult !== void 0 || syncError !== void 0,
|
|
13582
|
+
onChange: () => {
|
|
13583
|
+
syncRequest.current = void 0;
|
|
13584
|
+
setSyncStrategy(strategy);
|
|
13585
|
+
}
|
|
13586
|
+
}), (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: strategy === "rebase" ? "Rebase" : "Merge baseline" }), (0, react_jsx_runtime.jsx)("small", { children: t(`dashboard.sync.${strategy}`) })] })] }, strategy)),
|
|
13587
|
+
partialSync && (0, react_jsx_runtime.jsxs)("p", {
|
|
13588
|
+
role: "status",
|
|
13589
|
+
children: [
|
|
13590
|
+
t(`dashboard.sync.${partialSync.status}`),
|
|
13591
|
+
(0, react_jsx_runtime.jsx)("br", {}),
|
|
13592
|
+
t("dashboard.sync.partial"),
|
|
13593
|
+
(0, react_jsx_runtime.jsx)("br", {}),
|
|
13594
|
+
(0, react_jsx_runtime.jsx)("code", { children: partialSync.sessionId })
|
|
13595
|
+
]
|
|
13596
|
+
})
|
|
13597
|
+
]
|
|
13294
13598
|
})
|
|
13295
|
-
|
|
13296
|
-
|
|
13599
|
+
}),
|
|
13600
|
+
(0, react_jsx_runtime.jsx)(NotificationToasts, { notices: partialSync !== void 0 ? baselineSyncFailureNotices(record, syncRequest.current, partialSync, t, onOpenSession) : syncError === void 0 ? [] : [{
|
|
13601
|
+
key: "sync:" + record.worktreeId,
|
|
13602
|
+
error: syncError,
|
|
13603
|
+
text: t("dashboard.sync.failed") + " " + formatWorktreeViewError(syncError, t),
|
|
13604
|
+
message: (translate) => translate("dashboard.sync.failed") + " " + formatWorktreeViewError(syncError, translate)
|
|
13605
|
+
}] })
|
|
13606
|
+
]
|
|
13297
13607
|
});
|
|
13298
13608
|
}
|
|
13299
13609
|
//#endregion
|
|
@@ -13815,6 +14125,9 @@ window.__ModuleLoader__.load({
|
|
|
13815
14125
|
dashboardRecord !== void 0 && (0, react_jsx_runtime.jsx)(WorktreeDashboard, {
|
|
13816
14126
|
manager: props.manager,
|
|
13817
14127
|
record: dashboardRecord,
|
|
14128
|
+
worktrees: dashboardView?.worktrees ?? [],
|
|
14129
|
+
mainRecord: dashboardMainRecord,
|
|
14130
|
+
onOpenWorktree: openDashboard,
|
|
13818
14131
|
onSaveInstructions: props.manager ? async (instructions, expectedInstructions) => {
|
|
13819
14132
|
try {
|
|
13820
14133
|
return await props.manager.updateWorktreeInstructions({
|
|
@@ -13872,6 +14185,29 @@ window.__ModuleLoader__.load({
|
|
|
13872
14185
|
sessionPresentations: source.sessionPresentations,
|
|
13873
14186
|
sessionIds: dashboardSessionIds(dashboardRecord, source.sessions, dashboardView?.bindings ?? [], source.archivedSessionIds, isMainWorktreeId$1(dashboardRecord.worktreeId) ? ordering.orderedSessionIdsByAccount.get(`main:${dashboardRecord.workspaceId}`) : ordering.orderedSessionIdsByAccount.get(`worktree:${dashboardRecord.worktreeId}`), dashboardWorkspace === void 0 ? [] : workspaceSessionIds(source.workspaces, dashboardWorkspace.workspaceId, source.sessions.ids)),
|
|
13874
14187
|
actionPending: mutation.actionPending,
|
|
14188
|
+
onSyncBaseline: props.manager?.syncWorktreeBaseline !== void 0 && dashboardManagedRecord !== void 0 && dashboardCanCreate && (dashboardRecord.health === void 0 || dashboardRecord.health === "ready") ? async (strategy, baseBranch, requestId) => {
|
|
14189
|
+
let completed = false;
|
|
14190
|
+
try {
|
|
14191
|
+
const result = await props.manager.syncWorktreeBaseline({
|
|
14192
|
+
workspaceId: dashboardRecord.workspaceId,
|
|
14193
|
+
worktreeId: dashboardRecord.worktreeId,
|
|
14194
|
+
strategy,
|
|
14195
|
+
baseBranch,
|
|
14196
|
+
requestId
|
|
14197
|
+
});
|
|
14198
|
+
completed = true;
|
|
14199
|
+
return result;
|
|
14200
|
+
} finally {
|
|
14201
|
+
read.refresh({
|
|
14202
|
+
preserveCurrent: true,
|
|
14203
|
+
changeId: completed ? requestId : void 0,
|
|
14204
|
+
scope: {
|
|
14205
|
+
kind: "workspace",
|
|
14206
|
+
workspaceId: dashboardRecord.workspaceId
|
|
14207
|
+
}
|
|
14208
|
+
});
|
|
14209
|
+
}
|
|
14210
|
+
} : void 0,
|
|
13875
14211
|
onOpenFile: typeof props.openResource === "function" ? onOpenFile : void 0,
|
|
13876
14212
|
onOpenSession: (sessionId) => session.openWorkspaceSession(dashboardRecord.workspaceId, sessionId),
|
|
13877
14213
|
onCreateSession: dashboardCanCreate && (isMainWorktreeId$1(dashboardRecord.worktreeId) ? props.createMainSession !== void 0 : props.createSessionForWorktree !== void 0) ? () => {
|
|
@@ -14138,6 +14474,224 @@ window.__ModuleLoader__.load({
|
|
|
14138
14474
|
}, "clutch-dsh-worktree: command activity");
|
|
14139
14475
|
}
|
|
14140
14476
|
//#endregion
|
|
14477
|
+
//#region lib/client/steer/steer-state.js
|
|
14478
|
+
const EMPTY_STEER_STATE = {
|
|
14479
|
+
pending: [],
|
|
14480
|
+
rows: []
|
|
14481
|
+
};
|
|
14482
|
+
function object(value) {
|
|
14483
|
+
return typeof value === "object" && value !== null ? value : void 0;
|
|
14484
|
+
}
|
|
14485
|
+
/** Identity and source must both identify a Worktree task relay, never a report or human echo. */
|
|
14486
|
+
function steerRelay(value) {
|
|
14487
|
+
const message = object(value);
|
|
14488
|
+
const source = object(message?.source);
|
|
14489
|
+
if (typeof message?.id !== "string" || !/^clutch-worktree-relay:[a-f0-9]{64}$/.test(message.id) || message.role !== "user" || source?.kind !== "agent-message" || source.form !== "relay" || typeof source.senderSessionId !== "string" || !Array.isArray(message.content)) return void 0;
|
|
14490
|
+
const content = message.content.map(object);
|
|
14491
|
+
const envelope = "Agent " + source.senderSessionId + " sent a message: ";
|
|
14492
|
+
const body = content[0]?.type === "text" && content[0].text === envelope ? content.slice(1) : content;
|
|
14493
|
+
return {
|
|
14494
|
+
id: message.id,
|
|
14495
|
+
sender: source.senderSessionId,
|
|
14496
|
+
text: body.flatMap((part) => part?.type === "text" && typeof part.text === "string" ? [part.text] : []).join("\n"),
|
|
14497
|
+
status: "pending"
|
|
14498
|
+
};
|
|
14499
|
+
}
|
|
14500
|
+
function bounded(rows) {
|
|
14501
|
+
const recent = rows.filter((row) => row.status !== "pending" && row.status !== "preparing").slice(-8);
|
|
14502
|
+
const keep = new Set(recent.map((row) => row.id));
|
|
14503
|
+
return rows.filter((row) => row.status === "pending" || row.status === "preparing" || keep.has(row.id));
|
|
14504
|
+
}
|
|
14505
|
+
/** Replay native evidence; an inbox claim alone never establishes receipt or completion. */
|
|
14506
|
+
function reduceSteerState(state, event) {
|
|
14507
|
+
const data = object(event.data);
|
|
14508
|
+
if (event.type === "turn/start") return {
|
|
14509
|
+
...state,
|
|
14510
|
+
rows: bounded(state.rows.filter((row) => row.status === "pending" || row.status === "preparing").map((row) => row.status === "preparing" ? {
|
|
14511
|
+
...row,
|
|
14512
|
+
status: "unknown"
|
|
14513
|
+
} : row))
|
|
14514
|
+
};
|
|
14515
|
+
if (event.type === "user/message") {
|
|
14516
|
+
if (event.surfaceOp !== "append") return state;
|
|
14517
|
+
const receipt = steerRelay(data);
|
|
14518
|
+
if (receipt === void 0) return state;
|
|
14519
|
+
const rows = state.rows.map((row) => row.id === receipt.id && row.sender === receipt.sender && row.text === receipt.text ? {
|
|
14520
|
+
...row,
|
|
14521
|
+
status: "received"
|
|
14522
|
+
} : row);
|
|
14523
|
+
return {
|
|
14524
|
+
...state,
|
|
14525
|
+
rows: bounded(rows)
|
|
14526
|
+
};
|
|
14527
|
+
}
|
|
14528
|
+
if (event.type !== "agent/inbox/spliced" || !Array.isArray(data?.inserted)) return state;
|
|
14529
|
+
const inserted = data.inserted;
|
|
14530
|
+
if (data.target === "next-turn") {
|
|
14531
|
+
const queued = new Set(inserted.map((item) => object(item)?.id));
|
|
14532
|
+
return {
|
|
14533
|
+
...state,
|
|
14534
|
+
rows: state.rows.filter((row) => !queued.has(row.id))
|
|
14535
|
+
};
|
|
14536
|
+
}
|
|
14537
|
+
if (data.target !== "next-step") return state;
|
|
14538
|
+
const start = data.start;
|
|
14539
|
+
const count = data.removedCount ?? 0;
|
|
14540
|
+
const ids = inserted.map((item) => object(item)?.id);
|
|
14541
|
+
const positionsKnown = typeof start === "number" && Number.isSafeInteger(start) && start >= 0 && typeof count === "number" && Number.isSafeInteger(count) && count >= 0 && ids.every((id) => typeof id === "string") && state.pending !== void 0 && start + count <= state.pending.length;
|
|
14542
|
+
const previous = state.pending ?? [];
|
|
14543
|
+
const removed = new Set(positionsKnown ? previous.slice(start, start + count) : []);
|
|
14544
|
+
const pending = positionsKnown ? [
|
|
14545
|
+
...previous.slice(0, start),
|
|
14546
|
+
...ids,
|
|
14547
|
+
...previous.slice(start + count)
|
|
14548
|
+
] : void 0;
|
|
14549
|
+
let rows = state.rows.map((row) => removed.has(row.id) ? {
|
|
14550
|
+
...row,
|
|
14551
|
+
status: data.outcome === "canceled" ? "canceled" : "preparing"
|
|
14552
|
+
} : !positionsKnown && (row.status === "pending" || row.status === "preparing") ? {
|
|
14553
|
+
...row,
|
|
14554
|
+
status: "unknown"
|
|
14555
|
+
} : row);
|
|
14556
|
+
for (const item of inserted) {
|
|
14557
|
+
const relay = steerRelay(item);
|
|
14558
|
+
if (relay !== void 0) rows = [...rows.filter((row) => row.id !== relay.id), relay];
|
|
14559
|
+
}
|
|
14560
|
+
return {
|
|
14561
|
+
pending,
|
|
14562
|
+
rows: bounded(rows)
|
|
14563
|
+
};
|
|
14564
|
+
}
|
|
14565
|
+
/** Merge the authoritative pending projection with verified, current/recent-turn receipts. */
|
|
14566
|
+
function visibleSteerRows(state, inbox) {
|
|
14567
|
+
const projection = object(inbox);
|
|
14568
|
+
const queued = new Set(Array.isArray(projection?.["next-turn"]) ? projection["next-turn"].map((item) => object(item)?.id) : []);
|
|
14569
|
+
const rows = new Map((state?.rows ?? []).map((row) => [row.id, row]));
|
|
14570
|
+
if (Array.isArray(projection?.["next-step"])) for (const value of projection["next-step"]) {
|
|
14571
|
+
const relay = steerRelay(value);
|
|
14572
|
+
if (relay !== void 0 && !rows.has(relay.id)) rows.set(relay.id, relay);
|
|
14573
|
+
}
|
|
14574
|
+
const waiting = Array.isArray(projection?.["next-step"]) ? new Set(projection["next-step"].map((item) => object(item)?.id)) : void 0;
|
|
14575
|
+
const order = [...waiting ?? []];
|
|
14576
|
+
const rank = new Map(order.map((id, index) => [id, index]));
|
|
14577
|
+
return [...rows.values()].filter((row) => !queued.has(row.id)).map((row) => {
|
|
14578
|
+
if (row.status === "unknown" && waiting?.has(row.id)) return {
|
|
14579
|
+
...row,
|
|
14580
|
+
status: "pending"
|
|
14581
|
+
};
|
|
14582
|
+
if (row.status === "pending" && !waiting?.has(row.id)) return {
|
|
14583
|
+
...row,
|
|
14584
|
+
status: waiting === void 0 ? "unknown" : "preparing"
|
|
14585
|
+
};
|
|
14586
|
+
return row;
|
|
14587
|
+
}).sort((a, b) => (rank.get(a.id) ?? order.length) - (rank.get(b.id) ?? order.length));
|
|
14588
|
+
}
|
|
14589
|
+
//#endregion
|
|
14590
|
+
//#region lib/client/steer/steer-activity.js
|
|
14591
|
+
const WORKTREE_STEER_TARGET = "clutch-dsh-worktree-steer";
|
|
14592
|
+
/** One Session-local fold, rebuilt by native history replacement and pagination. */
|
|
14593
|
+
const worktreeSteerNode = {
|
|
14594
|
+
kind: WORKTREE_STEER_TARGET,
|
|
14595
|
+
target: WORKTREE_STEER_TARGET,
|
|
14596
|
+
match: (event) => event.type === "turn/start" || event.type === "agent/inbox/spliced" || event.type === "user/message" && event.surfaceOp === "append" && steerRelay(event.data) !== void 0 ? {
|
|
14597
|
+
id: "state",
|
|
14598
|
+
role: "start"
|
|
14599
|
+
} : null,
|
|
14600
|
+
start: (_context, match) => reduceSteerState(EMPTY_STEER_STATE, match.event),
|
|
14601
|
+
update: (context, match) => reduceSteerState(context.state, match.event),
|
|
14602
|
+
buildViewNode: (context) => context.state === void 0 ? null : {
|
|
14603
|
+
key: context.key,
|
|
14604
|
+
kind: WORKTREE_STEER_TARGET,
|
|
14605
|
+
id: context.id,
|
|
14606
|
+
target: WORKTREE_STEER_TARGET,
|
|
14607
|
+
data: context.state
|
|
14608
|
+
}
|
|
14609
|
+
};
|
|
14610
|
+
const worktreeSteerView = {
|
|
14611
|
+
target: WORKTREE_STEER_TARGET,
|
|
14612
|
+
create: () => {
|
|
14613
|
+
let state = EMPTY_STEER_STATE;
|
|
14614
|
+
return {
|
|
14615
|
+
empty: EMPTY_STEER_STATE,
|
|
14616
|
+
replace: ({ nodes }) => state = nodes.at(-1)?.data ?? EMPTY_STEER_STATE,
|
|
14617
|
+
apply: ({ upserts }) => state = upserts.at(-1)?.data ?? state
|
|
14618
|
+
};
|
|
14619
|
+
},
|
|
14620
|
+
isActive: () => false
|
|
14621
|
+
};
|
|
14622
|
+
function installWorktreeSteerActivity(ctx) {
|
|
14623
|
+
ctx.effect(() => {
|
|
14624
|
+
const node = ctx.uiConversation.events.register(worktreeSteerNode);
|
|
14625
|
+
const view = ctx.uiConversation.views.register(worktreeSteerView);
|
|
14626
|
+
return () => {
|
|
14627
|
+
view();
|
|
14628
|
+
node();
|
|
14629
|
+
};
|
|
14630
|
+
}, "clutch-dsh-worktree: steer activity");
|
|
14631
|
+
}
|
|
14632
|
+
//#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
|
|
14634
|
+
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
|
+
const styleId = "@cerbur/clutch-dsh-worktree/steer.css";
|
|
14636
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=\"@cerbur/clutch-dsh-worktree/steer.css\"]") === null) {
|
|
14637
|
+
const tag = document.createElement("style");
|
|
14638
|
+
tag.dataset.plugin = "@cerbur/clutch-dsh-worktree";
|
|
14639
|
+
tag.dataset.pluginCss = styleId;
|
|
14640
|
+
tag.textContent = css;
|
|
14641
|
+
document.head.appendChild(tag);
|
|
14642
|
+
}
|
|
14643
|
+
var steer_css_default = {
|
|
14644
|
+
"strip": "-cerbur-clutch-dsh-worktree-strip",
|
|
14645
|
+
"title": "-cerbur-clutch-dsh-worktree-title",
|
|
14646
|
+
"items": "-cerbur-clutch-dsh-worktree-items",
|
|
14647
|
+
"item": "-cerbur-clutch-dsh-worktree-item",
|
|
14648
|
+
"status": "-cerbur-clutch-dsh-worktree-status",
|
|
14649
|
+
"preview": "-cerbur-clutch-dsh-worktree-preview",
|
|
14650
|
+
"body": "-cerbur-clutch-dsh-worktree-body",
|
|
14651
|
+
"sender": "-cerbur-clutch-dsh-worktree-sender"
|
|
14652
|
+
};
|
|
14653
|
+
//#endregion
|
|
14654
|
+
//#region lib/client/steer/SteerDock.js
|
|
14655
|
+
function SteerDock({ useProjection, steer, t }) {
|
|
14656
|
+
const rows = visibleSteerRows((0, react.useSyncExternalStore)(steer.subscribe, steer.getSnapshot, steer.getSnapshot), useProjection("inbox"));
|
|
14657
|
+
if (rows.length === 0) return null;
|
|
14658
|
+
return (0, react_jsx_runtime.jsxs)("section", {
|
|
14659
|
+
className: steer_css_default.strip,
|
|
14660
|
+
"aria-label": t("steer.title"),
|
|
14661
|
+
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
14662
|
+
className: steer_css_default.title,
|
|
14663
|
+
children: [
|
|
14664
|
+
t("steer.title"),
|
|
14665
|
+
" · ",
|
|
14666
|
+
rows.length
|
|
14667
|
+
]
|
|
14668
|
+
}), (0, react_jsx_runtime.jsx)("div", {
|
|
14669
|
+
className: steer_css_default.items,
|
|
14670
|
+
children: rows.map((row) => (0, react_jsx_runtime.jsxs)("details", {
|
|
14671
|
+
className: steer_css_default.item,
|
|
14672
|
+
"data-worktree-steer": row.status,
|
|
14673
|
+
children: [(0, react_jsx_runtime.jsxs)("summary", { children: [(0, react_jsx_runtime.jsx)("span", {
|
|
14674
|
+
className: steer_css_default.status,
|
|
14675
|
+
children: t(`steer.${row.status}`)
|
|
14676
|
+
}), (0, react_jsx_runtime.jsx)("span", {
|
|
14677
|
+
className: steer_css_default.preview,
|
|
14678
|
+
children: row.text
|
|
14679
|
+
})] }), (0, react_jsx_runtime.jsxs)("div", {
|
|
14680
|
+
className: steer_css_default.body,
|
|
14681
|
+
children: [
|
|
14682
|
+
(0, react_jsx_runtime.jsx)("div", {
|
|
14683
|
+
className: steer_css_default.sender,
|
|
14684
|
+
children: t("steer.sender", { sender: row.sender })
|
|
14685
|
+
}),
|
|
14686
|
+
(0, react_jsx_runtime.jsx)("p", { children: row.text }),
|
|
14687
|
+
(0, react_jsx_runtime.jsx)("small", { children: t("steer.receiptHint") })
|
|
14688
|
+
]
|
|
14689
|
+
})]
|
|
14690
|
+
}, row.id))
|
|
14691
|
+
})]
|
|
14692
|
+
});
|
|
14693
|
+
}
|
|
14694
|
+
//#endregion
|
|
14141
14695
|
//#region lib/client/settings/settings-navigation.js
|
|
14142
14696
|
/** The rc.1 native Settings shell shares one viewing store between mouse and command entry. */
|
|
14143
14697
|
function openWorktreeErrorSettings(slots) {
|
|
@@ -14393,12 +14947,12 @@ window.__ModuleLoader__.load({
|
|
|
14393
14947
|
return {
|
|
14394
14948
|
store,
|
|
14395
14949
|
refresh,
|
|
14396
|
-
async invalidate(workspaceId) {
|
|
14950
|
+
async invalidate(workspaceId, options) {
|
|
14397
14951
|
if (disposed) return;
|
|
14398
14952
|
const identity = identityFrom(input.sessions, input.workspaces);
|
|
14399
14953
|
if (workspaceId !== void 0 && workspaceId !== identity.workspaceId) return;
|
|
14400
14954
|
if (identity.workspaceId === void 0) return;
|
|
14401
|
-
input.viewReader.invalidate(identity.workspaceId);
|
|
14955
|
+
if (!options?.alreadyInvalidated) input.viewReader.invalidate(identity.workspaceId);
|
|
14402
14956
|
await refresh();
|
|
14403
14957
|
await waitForLatestRefresh(workspaceId ?? identity.workspaceId);
|
|
14404
14958
|
},
|
|
@@ -14602,13 +15156,19 @@ window.__ModuleLoader__.load({
|
|
|
14602
15156
|
},
|
|
14603
15157
|
request: (input) => {
|
|
14604
15158
|
if (disposed) return Promise.resolve(false);
|
|
14605
|
-
|
|
14606
|
-
|
|
14607
|
-
|
|
14608
|
-
|
|
14609
|
-
|
|
14610
|
-
|
|
15159
|
+
const existing = [active, ...queue].find((pending) => pending !== void 0 && pending.input.workspaceId === input.workspaceId && pending.input.worktreeId === input.worktreeId && pending.input.sessionId === input.sessionId && pending.input.cwd === input.cwd);
|
|
15160
|
+
if (existing !== void 0) return existing.promise;
|
|
15161
|
+
let settle;
|
|
15162
|
+
const promise = new Promise((resolve) => {
|
|
15163
|
+
settle = resolve;
|
|
15164
|
+
});
|
|
15165
|
+
queue.push({
|
|
15166
|
+
input: { ...input },
|
|
15167
|
+
resolve: settle,
|
|
15168
|
+
promise
|
|
14611
15169
|
});
|
|
15170
|
+
showNext();
|
|
15171
|
+
return promise;
|
|
14612
15172
|
},
|
|
14613
15173
|
resolve: (confirmed) => {
|
|
14614
15174
|
if (active === void 0) return;
|
|
@@ -15019,6 +15579,7 @@ window.__ModuleLoader__.load({
|
|
|
15019
15579
|
*/
|
|
15020
15580
|
function apply(ctx) {
|
|
15021
15581
|
installWorktreeCommandActivity(ctx);
|
|
15582
|
+
installWorktreeSteerActivity(ctx);
|
|
15022
15583
|
const locale = ctx.locale;
|
|
15023
15584
|
if (typeof document !== "undefined") ctx.effect(() => installWorktreePermissionIcon(document), "clutch-dsh-worktree: permission icon cleanup");
|
|
15024
15585
|
ctx.effect(() => locale.register(WORKTREE_NS, {
|
|
@@ -15042,6 +15603,17 @@ window.__ModuleLoader__.load({
|
|
|
15042
15603
|
};
|
|
15043
15604
|
const sessions = ctx.sessions;
|
|
15044
15605
|
const slots = ctx.slots;
|
|
15606
|
+
slots.inject("conversation.input.dock", () => slots.register({
|
|
15607
|
+
name: "conversation.input.dock",
|
|
15608
|
+
id: "clutch-dsh-worktree-steer",
|
|
15609
|
+
order: 21,
|
|
15610
|
+
locale: WORKTREE_NS,
|
|
15611
|
+
inject: (sessionId) => {
|
|
15612
|
+
const binding = ctx.sessions.binding(sessionId);
|
|
15613
|
+
if (binding === void 0) throw new Error("Worktree steer: Session is unavailable");
|
|
15614
|
+
return { steer: ctx.uiConversation.binding(binding).target(WORKTREE_STEER_TARGET) };
|
|
15615
|
+
}
|
|
15616
|
+
}, SteerDock));
|
|
15045
15617
|
ctx.effect(() => slots.inject("shell.overlay", () => slots.register({
|
|
15046
15618
|
name: "shell.overlay",
|
|
15047
15619
|
id: "clutch-dsh-worktree-settings-icon",
|
|
@@ -15073,13 +15645,16 @@ window.__ModuleLoader__.load({
|
|
|
15073
15645
|
});
|
|
15074
15646
|
const toolChanges = createWorktreeToolChangeMonitor({
|
|
15075
15647
|
read: (revision, signal) => manager.watchToolChanges(revision, signal),
|
|
15076
|
-
changed: ({ workspaceId }) => {
|
|
15077
|
-
viewReader.invalidate(workspaceId);
|
|
15648
|
+
changed: ({ workspaceId, requestId }) => {
|
|
15649
|
+
viewReader.invalidate(workspaceId, { changeId: requestId });
|
|
15078
15650
|
if (contextProjection.store.getSnapshot().workspaceId === workspaceId) contextProjection.refresh();
|
|
15079
15651
|
}
|
|
15080
15652
|
});
|
|
15081
15653
|
ctx.effect(() => () => toolChanges.dispose(), "clutch-dsh-worktree: tool notification cleanup");
|
|
15082
|
-
ctx.on("connection/reset", () =>
|
|
15654
|
+
ctx.on("connection/reset", () => {
|
|
15655
|
+
viewReader.resetChangeIds();
|
|
15656
|
+
toolChanges.reset();
|
|
15657
|
+
});
|
|
15083
15658
|
if (typeof document !== "undefined") toolChanges.start();
|
|
15084
15659
|
ctx.effect(() => () => manager.dispose(), "clutch-dsh-worktree: connection cleanup");
|
|
15085
15660
|
ctx.effect(() => () => viewReader.dispose(), "clutch-dsh-worktree: view reader cleanup");
|
|
@@ -15304,7 +15879,7 @@ window.__ModuleLoader__.load({
|
|
|
15304
15879
|
if (workspacePath !== null) await ctx.workspaces.create({ path: workspacePath });
|
|
15305
15880
|
},
|
|
15306
15881
|
createSessionForWorktree: (input) => worktreeSessionConnector.create(input),
|
|
15307
|
-
invalidateWorktreeContext: (workspaceId) => contextProjection.invalidate(workspaceId),
|
|
15882
|
+
invalidateWorktreeContext: (workspaceId, options) => contextProjection.invalidate(workspaceId, options),
|
|
15308
15883
|
createMainSession: (workspaceId) => {
|
|
15309
15884
|
ctx.uiWorkspace.startSession(workspaceId);
|
|
15310
15885
|
},
|