@cerbur/clutch-dsh-worktree 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +107 -15
  2. package/README.zh.md +86 -10
  3. package/cordis.patch.yml +21 -0
  4. package/lib/client/WorktreeContext.d.ts.map +1 -1
  5. package/lib/client/WorktreeContext.js +2 -2
  6. package/lib/client/WorktreeContext.js.map +1 -1
  7. package/lib/client/WorktreeSurface.d.ts +2 -2
  8. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  9. package/lib/client/WorktreeSurface.js +270 -65
  10. package/lib/client/WorktreeSurface.js.map +1 -1
  11. package/lib/client/entry.d.ts.map +1 -1
  12. package/lib/client/entry.js +84 -2
  13. package/lib/client/entry.js.map +1 -1
  14. package/lib/client/index.d.ts +3 -0
  15. package/lib/client/index.d.ts.map +1 -1
  16. package/lib/client/index.js +2 -0
  17. package/lib/client/index.js.map +1 -1
  18. package/lib/client/locales.d.ts +58 -0
  19. package/lib/client/locales.d.ts.map +1 -1
  20. package/lib/client/locales.js +58 -0
  21. package/lib/client/locales.js.map +1 -1
  22. package/lib/client/session-view.d.ts +34 -0
  23. package/lib/client/session-view.d.ts.map +1 -1
  24. package/lib/client/session-view.js +119 -1
  25. package/lib/client/session-view.js.map +1 -1
  26. package/lib/client/worktree-connection.d.ts +4 -2
  27. package/lib/client/worktree-connection.d.ts.map +1 -1
  28. package/lib/client/worktree-connection.js +4 -0
  29. package/lib/client/worktree-connection.js.map +1 -1
  30. package/lib/client/worktree-error-copy.d.ts +2 -0
  31. package/lib/client/worktree-error-copy.d.ts.map +1 -1
  32. package/lib/client/worktree-error-copy.js +16 -0
  33. package/lib/client/worktree-error-copy.js.map +1 -1
  34. package/lib/client/worktree-permission-icon.d.ts +7 -0
  35. package/lib/client/worktree-permission-icon.d.ts.map +1 -0
  36. package/lib/client/worktree-permission-icon.js +119 -0
  37. package/lib/client/worktree-permission-icon.js.map +1 -0
  38. package/lib/client/worktree-permission.d.ts +21 -0
  39. package/lib/client/worktree-permission.d.ts.map +1 -0
  40. package/lib/client/worktree-permission.js +70 -0
  41. package/lib/client/worktree-permission.js.map +1 -0
  42. package/lib/client/worktree-session-fork.d.ts +65 -0
  43. package/lib/client/worktree-session-fork.d.ts.map +1 -0
  44. package/lib/client/worktree-session-fork.js +174 -0
  45. package/lib/client/worktree-session-fork.js.map +1 -0
  46. package/lib/client/worktree-session-order.d.ts +36 -0
  47. package/lib/client/worktree-session-order.d.ts.map +1 -0
  48. package/lib/client/worktree-session-order.js +215 -0
  49. package/lib/client/worktree-session-order.js.map +1 -0
  50. package/lib/client/worktree-session.d.ts +34 -1
  51. package/lib/client/worktree-session.d.ts.map +1 -1
  52. package/lib/client/worktree-session.js +98 -2
  53. package/lib/client/worktree-session.js.map +1 -1
  54. package/lib/client/worktree-surface-rows.d.ts +4 -4
  55. package/lib/client/worktree-surface-rows.d.ts.map +1 -1
  56. package/lib/client/worktree-surface-rows.js +132 -47
  57. package/lib/client/worktree-surface-rows.js.map +1 -1
  58. package/lib/client/worktree-surface-selectors.d.ts +2 -0
  59. package/lib/client/worktree-surface-selectors.d.ts.map +1 -1
  60. package/lib/client/worktree-surface-selectors.js +8 -0
  61. package/lib/client/worktree-surface-selectors.js.map +1 -1
  62. package/lib/client/worktree-surface-types.d.ts +46 -3
  63. package/lib/client/worktree-surface-types.d.ts.map +1 -1
  64. package/lib/client/worktree-view-actions.d.ts +8 -3
  65. package/lib/client/worktree-view-actions.d.ts.map +1 -1
  66. package/lib/client/worktree-view-actions.js +28 -2
  67. package/lib/client/worktree-view-actions.js.map +1 -1
  68. package/lib/client/worktree-view-errors.d.ts +10 -0
  69. package/lib/client/worktree-view-errors.d.ts.map +1 -1
  70. package/lib/client/worktree-view-errors.js +22 -1
  71. package/lib/client/worktree-view-errors.js.map +1 -1
  72. package/lib/client.js +1473 -201
  73. package/lib/client.js.map +1 -1
  74. package/lib/contract/index.contract.js +2 -0
  75. package/lib/contract/index.contract.js.map +1 -1
  76. package/lib/contract/index.d.ts +6 -2
  77. package/lib/contract/index.d.ts.map +1 -1
  78. package/lib/contract/index.js +4 -0
  79. package/lib/contract/index.js.map +1 -1
  80. package/lib/contract/worktree-permission.d.ts +73 -0
  81. package/lib/contract/worktree-permission.d.ts.map +1 -0
  82. package/lib/contract/worktree-permission.js +32 -0
  83. package/lib/contract/worktree-permission.js.map +1 -0
  84. package/lib/host/index.d.ts +4 -0
  85. package/lib/host/index.d.ts.map +1 -1
  86. package/lib/host/index.js +2 -0
  87. package/lib/host/index.js.map +1 -1
  88. package/lib/host/remote.d.ts +2 -2
  89. package/lib/host/remote.d.ts.map +1 -1
  90. package/lib/host/remote.js +7 -1
  91. package/lib/host/remote.js.map +1 -1
  92. package/lib/host/service.d.ts +3 -1
  93. package/lib/host/service.d.ts.map +1 -1
  94. package/lib/host/service.js +36 -2
  95. package/lib/host/service.js.map +1 -1
  96. package/lib/host/worktree-permission-manager.d.ts +14 -0
  97. package/lib/host/worktree-permission-manager.d.ts.map +1 -0
  98. package/lib/host/worktree-permission-manager.js +111 -0
  99. package/lib/host/worktree-permission-manager.js.map +1 -0
  100. package/lib/host/worktree-permission.d.ts +38 -0
  101. package/lib/host/worktree-permission.d.ts.map +1 -0
  102. package/lib/host/worktree-permission.js +156 -0
  103. package/lib/host/worktree-permission.js.map +1 -0
  104. package/lib/index.d.ts +4 -3
  105. package/lib/index.d.ts.map +1 -1
  106. package/lib/index.js +2 -1
  107. package/lib/index.js.map +1 -1
  108. package/lib/manage/worktree-permission.d.ts +3 -0
  109. package/lib/manage/worktree-permission.d.ts.map +1 -0
  110. package/lib/manage/worktree-permission.js +3 -0
  111. package/lib/manage/worktree-permission.js.map +1 -0
  112. package/lib/typert.host.js +126 -27
  113. package/lib/typert.remote-client.d.ts +5 -1
  114. package/lib/typert.remote-client.d.ts.map +1 -1
  115. package/lib/typert.remote-client.js +126 -27
  116. package/package.json +1 -1
@@ -29,6 +29,8 @@ export const zh = {
29
29
  'worktree.expand': '展开 {name}',
30
30
  'worktree.collapse': '收起 {name}',
31
31
  'worktree.options': 'Worktree 选项:{name}',
32
+ 'worktree.copyPath': '复制路径',
33
+ 'worktree.createNew': '创建新的 Worktree',
32
34
  'worktree.remove': '移除 Worktree',
33
35
  'worktree.removeDescription': '移除“{name}”?Session 会保留在 DSH 中,并作为已分离关系继续可用。',
34
36
  'worktree.removeExternalDescription': '移除“{name}”?这会删除关联的外部 Worktree 目录。Session 会保留在 DSH 中,并作为已分离关系继续可用。',
@@ -62,6 +64,23 @@ export const zh = {
62
64
  'session.expandMore': '展开其余 {count} 个会话',
63
65
  'session.collapse': '收起',
64
66
  'session.name': '会话名称',
67
+ 'session.status.running': '进行中',
68
+ 'session.status.subagentsRunning.one': '{n} 个子代理运行中',
69
+ 'session.status.subagentsRunning.other': '{n} 个子代理运行中',
70
+ 'session.status.idle': '空闲',
71
+ 'session.status.waitingApproval': '等待审批',
72
+ 'session.status.planReview': '计划待审',
73
+ 'session.status.waitingAnswer': '等待回答',
74
+ 'session.status.completed': '已完成',
75
+ copy: '复制',
76
+ 'hover.copied': '已复制',
77
+ 'session.time.now': '刚刚',
78
+ 'session.time.minutes': '{n}分钟',
79
+ 'session.time.hours': '{n}小时',
80
+ 'session.time.days': '{n}天',
81
+ 'session.time.months': '{n}个月',
82
+ 'session.time.years': '{n}年',
83
+ 'session.time.ago': '{t}前',
65
84
  'dialog.close': '关闭',
66
85
  'dialog.closeWorkspaceRename': '关闭重命名工作区对话框',
67
86
  'dialog.closeWorkspaceDelete': '关闭删除工作区对话框',
@@ -73,6 +92,14 @@ export const zh = {
73
92
  'action.retry': '重试',
74
93
  'action.retryBinding': '重试绑定',
75
94
  'action.openCreatedSession': '打开已创建的 Session',
95
+ 'permission.fallbackWorkspaceWrite': '无法使用 Worktree 完全访问预设,已降级为 workspace-write;保留审批提示。',
96
+ 'permission.userRestricted': '已保留你在 DSH 原生权限界面选择的限制,未自动提升此 Worktree Session。',
97
+ 'permission.unverified': '无法验证 Worktree Session 的权限服务;Session 已保留,但完全访问未得到确认。',
98
+ 'permission.unavailable': 'Worktree Session 权限状态暂时不可用,请重试。',
99
+ 'permission.fullAccessTitle': '确认启用 Worktree Full access?',
100
+ 'permission.fullAccessDescription': '启用 Worktree Full access 后,此 Session 可能访问 Session 目录之外的关联 Git 元数据和 Worktree 文件。完全访问会关闭此 Session 的文件系统沙箱,但会保留审批提示;网络和进程策略不变。目标 Worktree:{cwd}',
101
+ 'permission.fullAccessAcknowledge': '我已了解风险,并愿意继续',
102
+ 'permission.fullAccessEnable': '启用 Worktree Full access',
76
103
  'status.loading': '正在加载工作区…',
77
104
  'error.worktreeDataUnavailable': 'Worktree 数据不可用,请重试。',
78
105
  'error.gitNotInstalled': 'Git 未安装或不可用,请安装 Git 后重试。',
@@ -93,6 +120,8 @@ export const zh = {
93
120
  'error.sessionRenameUnavailable': '会话重命名不可用,请重新连接后重试。',
94
121
  'error.sessionBindingFailed': 'Session {sessionId} 已创建,但 Worktree 绑定失败:{reason}',
95
122
  'error.sessionAlreadyBound': 'Session 已绑定到其他 Worktree,未创建新的 Session。',
123
+ 'error.worktreePermissionConfirmationRequired': 'Session 和绑定已保留;确认完全访问后重试,未打开 Session。',
124
+ 'error.worktreePermissionFailed': 'Worktree Session 权限设置失败,可重试:{reason}',
96
125
  'error.sessionListNotReady': 'Session 列表尚未就绪,请重试。',
97
126
  'error.sessionFactsIncomplete': 'Session 信息尚未完整,请重试。',
98
127
  'error.worktreeSessionRepairRequired': '当前 Worktree 的 Session 绑定需要修复,请重试。',
@@ -131,6 +160,8 @@ export const en = {
131
160
  'worktree.expand': 'Expand {name}',
132
161
  'worktree.collapse': 'Collapse {name}',
133
162
  'worktree.options': 'Worktree options for {name}',
163
+ 'worktree.copyPath': 'Copy path',
164
+ 'worktree.createNew': 'Create new Worktree',
134
165
  'worktree.remove': 'Remove Worktree',
135
166
  'worktree.removeDescription': 'Remove {name}? Sessions stay in DSH and remain available as detached bindings.',
136
167
  'worktree.removeExternalDescription': 'Remove {name}? This deletes the linked external Worktree directory. Sessions stay in DSH and remain available as detached bindings.',
@@ -164,6 +195,23 @@ export const en = {
164
195
  'session.expandMore': 'Expand {count} more',
165
196
  'session.collapse': 'Collapse',
166
197
  'session.name': 'Session name',
198
+ 'session.status.running': 'Running',
199
+ 'session.status.subagentsRunning.one': '{n} subagent running',
200
+ 'session.status.subagentsRunning.other': '{n} subagents running',
201
+ 'session.status.idle': 'Idle',
202
+ 'session.status.waitingApproval': 'Waiting for approval',
203
+ 'session.status.planReview': 'Plan awaiting review',
204
+ 'session.status.waitingAnswer': 'Waiting for answer',
205
+ 'session.status.completed': 'Completed',
206
+ copy: 'Copy',
207
+ 'hover.copied': 'Copied',
208
+ 'session.time.now': 'now',
209
+ 'session.time.minutes': '{n}min',
210
+ 'session.time.hours': '{n}h',
211
+ 'session.time.days': '{n}d',
212
+ 'session.time.months': '{n}mo',
213
+ 'session.time.years': '{n}y',
214
+ 'session.time.ago': '{t} ago',
167
215
  'dialog.close': 'Close',
168
216
  'dialog.closeWorkspaceRename': 'Close Rename Workspace dialog',
169
217
  'dialog.closeWorkspaceDelete': 'Close Delete Workspace dialog',
@@ -175,6 +223,14 @@ export const en = {
175
223
  'action.retry': 'Retry',
176
224
  'action.retryBinding': 'Retry Binding',
177
225
  'action.openCreatedSession': 'Open Created Session',
226
+ 'permission.fallbackWorkspaceWrite': 'The Worktree Full Access preset is unavailable; fell back to workspace-write with approval prompts enabled.',
227
+ 'permission.userRestricted': 'The restriction selected in DSH’s native permission UI was preserved; this Worktree Session was not elevated.',
228
+ 'permission.unverified': 'The Worktree Session permission service could not be verified; the Session was retained, but Full Access is not confirmed.',
229
+ 'permission.unavailable': 'The Worktree Session permission state is temporarily unavailable; retry the request.',
230
+ 'permission.fullAccessTitle': 'Enable Worktree Full access?',
231
+ '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}',
232
+ 'permission.fullAccessAcknowledge': 'I understand the risks and want to continue',
233
+ 'permission.fullAccessEnable': 'Enable Worktree Full access',
178
234
  'status.loading': 'Loading Workspaces…',
179
235
  'error.worktreeDataUnavailable': 'Worktree data is unavailable. Retry the request.',
180
236
  'error.gitNotInstalled': 'Git is not installed or unavailable. Install Git and retry.',
@@ -195,6 +251,8 @@ export const en = {
195
251
  'error.sessionRenameUnavailable': 'Session rename is unavailable; retry after reconnecting.',
196
252
  'error.sessionBindingFailed': 'Session {sessionId} was created, but Worktree binding failed: {reason}',
197
253
  'error.sessionAlreadyBound': 'The Session is already bound to another Worktree; no new Session was created.',
254
+ 'error.worktreePermissionConfirmationRequired': 'The Session and binding were retained; confirm Full Access and retry. The Session was not opened.',
255
+ 'error.worktreePermissionFailed': 'Worktree Session permission setup failed; retryable error: {reason}',
198
256
  'error.sessionListNotReady': 'The Session list is not ready yet; retry the request.',
199
257
  'error.sessionFactsIncomplete': 'Session facts are incomplete; retry the request.',
200
258
  'error.worktreeSessionRepairRequired': 'The current Worktree Session binding needs repair; retry the request.',
@@ -1 +1 @@
1
- {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,32 @@ export interface SessionSummaryLike {
3
3
  /** Native DSH's empty-log bit. Missing is treated as non-blank. */
4
4
  readonly blank?: boolean;
5
5
  readonly displayTitle?: string;
6
+ readonly running?: boolean;
7
+ readonly pendingInteraction?: PendingInteractionStatus;
8
+ readonly completed?: boolean;
9
+ readonly parentId?: string;
10
+ readonly origin?: 'subagent' | string;
11
+ readonly updatedAt?: number;
12
+ }
13
+ export type PendingInteractionStatus = 'approval' | 'plan-review' | 'question';
14
+ export type SessionStatusState = 'warning' | 'ongoing' | 'done';
15
+ export type SessionStatusLabelKey = 'running' | 'subagentsRunning' | 'idle' | 'waitingApproval' | 'planReview' | 'waitingAnswer' | 'completed';
16
+ export interface SessionStatusPresentation {
17
+ readonly state: SessionStatusState;
18
+ readonly labelKey: SessionStatusLabelKey;
19
+ readonly runningSubagentCount: number;
20
+ }
21
+ export interface RelativeTime {
22
+ readonly unit: 'now' | 'minutes' | 'hours' | 'days' | 'months' | 'years';
23
+ readonly n: number;
24
+ }
25
+ export interface SessionPresentation {
26
+ readonly status: SessionStatusPresentation;
27
+ readonly running: boolean;
28
+ readonly ongoing: boolean;
29
+ readonly runningSubagentCount: number;
30
+ readonly completed: boolean;
31
+ readonly updatedAt?: number;
6
32
  }
7
33
  /** The subset of the DSH Session list consumed by this browser Consumer. */
8
34
  export interface SessionListLike {
@@ -10,6 +36,14 @@ export interface SessionListLike {
10
36
  readonly current?: string;
11
37
  readonly byId: Record<string, SessionSummaryLike>;
12
38
  }
39
+ /** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */
40
+ export declare function relativeTime(updatedAt: number | undefined, now: number): RelativeTime | undefined;
41
+ /** Match native Workspace status priority while retaining the aggregate subagent count. */
42
+ export declare function sessionStatus(session: Pick<SessionSummaryLike, 'pendingInteraction' | 'running' | 'completed'>, runningSubagentCount: number): SessionStatusPresentation;
43
+ /** Derive row and group activity facts from one retained DSH Session snapshot. */
44
+ export declare function deriveSessionPresentationIndex(sessions: Pick<SessionListLike, 'byId'>): Readonly<Record<string, SessionPresentation>>;
45
+ /** Aggregate only live ongoing activity; callers decide which IDs are in the group. */
46
+ export declare function hasOngoingSession(sessionIds: readonly string[], presentations: Readonly<Record<string, Pick<SessionPresentation, 'ongoing'> | undefined>>): boolean;
13
47
  /** Read the native blank flag without inferring blankness from title or id. */
14
48
  export declare function isBlankSession(sessionId: string, sessions: Pick<SessionListLike, 'byId'>): boolean;
15
49
  /** Filter a group without mutating its source order. */
@@ -1 +1 @@
1
- {"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/client/session-view.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACnD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACtC,OAAO,CAET;AAUD,wDAAwD;AACxD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC,GAClD,SAAS,MAAM,EAAE,CAEnB;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EACvC,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EACvC,eAAe,EAAE,MAAM,GACtB,OAAO,CAKT"}
1
+ {"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/client/session-view.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,121 @@
1
+ function isPendingInteractionStatus(value) {
2
+ return value === 'approval' || value === 'plan-review' || value === 'question';
3
+ }
4
+ function validUpdatedAt(value) {
5
+ return value !== undefined && Number.isFinite(value);
6
+ }
7
+ /**
8
+ * Native-compatible subagent lineage index. The upstream runtime's public client
9
+ * entry is a browser module-loader bundle, so keeping this pure mirror local lets
10
+ * the browser Consumer and its Node tests share the same status semantics.
11
+ */
12
+ function indexSubagentDescendants(summaries) {
13
+ const indexed = new Map();
14
+ for (const descendant of Object.values(summaries)) {
15
+ if (descendant.origin !== 'subagent')
16
+ continue;
17
+ const seen = new Set();
18
+ let current = descendant;
19
+ while (current?.origin === 'subagent' &&
20
+ current.parentId !== undefined &&
21
+ !seen.has(current.id)) {
22
+ seen.add(current.id);
23
+ const aggregate = indexed.get(current.parentId);
24
+ if (aggregate === undefined) {
25
+ indexed.set(current.parentId, {
26
+ count: 1,
27
+ runningCount: descendant.running ? 1 : 0,
28
+ });
29
+ }
30
+ else {
31
+ aggregate.count += 1;
32
+ if (descendant.running)
33
+ aggregate.runningCount += 1;
34
+ }
35
+ current = summaries[current.parentId];
36
+ }
37
+ }
38
+ return indexed;
39
+ }
40
+ /** Native Workspace relative-time buckets, kept pure for deterministic rendering/tests. */
41
+ export function relativeTime(updatedAt, now) {
42
+ if (!validUpdatedAt(updatedAt) || !Number.isFinite(now))
43
+ return undefined;
44
+ const MIN = 60_000;
45
+ const HOUR = 3_600_000;
46
+ const DAY = 86_400_000;
47
+ const diff = Math.max(0, now - updatedAt);
48
+ if (diff < MIN)
49
+ return { unit: 'now', n: 0 };
50
+ if (diff < HOUR)
51
+ return { unit: 'minutes', n: Math.floor(diff / MIN) };
52
+ if (diff < DAY)
53
+ return { unit: 'hours', n: Math.floor(diff / HOUR) };
54
+ if (diff < 30 * DAY)
55
+ return { unit: 'days', n: Math.floor(diff / DAY) };
56
+ if (diff < 365 * DAY)
57
+ return { unit: 'months', n: Math.floor(diff / (30 * DAY)) };
58
+ return { unit: 'years', n: Math.floor(diff / (365 * DAY)) };
59
+ }
60
+ /** Match native Workspace status priority while retaining the aggregate subagent count. */
61
+ export function sessionStatus(session, runningSubagentCount) {
62
+ const count = Number.isFinite(runningSubagentCount) && runningSubagentCount > 0
63
+ ? Math.floor(runningSubagentCount)
64
+ : 0;
65
+ if (isPendingInteractionStatus(session.pendingInteraction)) {
66
+ const labelKey = session.pendingInteraction === 'approval'
67
+ ? 'waitingApproval'
68
+ : session.pendingInteraction === 'plan-review'
69
+ ? 'planReview'
70
+ : 'waitingAnswer';
71
+ return { state: 'warning', labelKey, runningSubagentCount: count };
72
+ }
73
+ if (session.running === true) {
74
+ return { state: 'ongoing', labelKey: 'running', runningSubagentCount: count };
75
+ }
76
+ if (count > 0) {
77
+ return { state: 'ongoing', labelKey: 'subagentsRunning', runningSubagentCount: count };
78
+ }
79
+ if (session.completed === true) {
80
+ return { state: 'done', labelKey: 'completed', runningSubagentCount: 0 };
81
+ }
82
+ return { state: 'done', labelKey: 'idle', runningSubagentCount: 0 };
83
+ }
84
+ function toLineageSummary(sessionId, summary) {
85
+ return {
86
+ id: sessionId,
87
+ running: summary.running === true,
88
+ ...(summary.parentId === undefined ? {} : { parentId: summary.parentId }),
89
+ ...(summary.origin === 'subagent' ? { origin: 'subagent' } : {}),
90
+ };
91
+ }
92
+ /** Derive row and group activity facts from one retained DSH Session snapshot. */
93
+ export function deriveSessionPresentationIndex(sessions) {
94
+ const lineageSummaries = Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => [
95
+ sessionId,
96
+ toLineageSummary(sessionId, summary),
97
+ ]));
98
+ const descendants = indexSubagentDescendants(lineageSummaries);
99
+ return Object.fromEntries(Object.entries(sessions.byId).map(([sessionId, summary]) => {
100
+ const runningSubagentCount = descendants.get(sessionId)?.runningCount ?? 0;
101
+ const status = sessionStatus(summary, runningSubagentCount);
102
+ return [
103
+ sessionId,
104
+ {
105
+ status,
106
+ running: summary.running === true,
107
+ ongoing: summary.running === true || runningSubagentCount > 0,
108
+ runningSubagentCount,
109
+ completed: summary.completed === true,
110
+ ...(validUpdatedAt(summary.updatedAt) ? { updatedAt: summary.updatedAt } : {}),
111
+ },
112
+ ];
113
+ }));
114
+ }
115
+ /** Aggregate only live ongoing activity; callers decide which IDs are in the group. */
116
+ export function hasOngoingSession(sessionIds, presentations) {
117
+ return sessionIds.some((sessionId) => presentations[sessionId]?.ongoing === true);
118
+ }
1
119
  /** Read the native blank flag without inferring blankness from title or id. */
2
120
  export function isBlankSession(sessionId, sessions) {
3
121
  return sessions.byId[sessionId]?.blank === true;
@@ -13,7 +131,7 @@ export function filterVisibleSessionIds(sessionIds, sessions) {
13
131
  /** Resolve a row title while keeping the blank label outside the DSH summary. */
14
132
  export function sessionDisplayLabel(sessionId, sessions, blankLabel) {
15
133
  const summary = sessions.byId[sessionId];
16
- return summary?.blank === true ? blankLabel : summary?.displayTitle ?? sessionId;
134
+ return summary?.blank === true ? blankLabel : (summary?.displayTitle ?? sessionId);
17
135
  }
18
136
  /** Match only durable Session titles or the final diagnostic id fallback. */
19
137
  export function sessionMatchesQuery(sessionId, sessions, normalizedQuery) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/client/session-view.ts"],"names":[],"mappings":"AAcA,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,QAAuC;IAEvC,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAClD,CAAC;AAED,mFAAmF;AACnF,SAAS,gBAAgB,CACvB,SAAiB,EACjB,QAAmD;IAEnD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;AAChF,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,uBAAuB,CACrC,UAA6B,EAC7B,QAAmD;IAEnD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,QAAuC,EACvC,UAAkB;IAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,IAAI,SAAS,CAAC;AACnF,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,QAAuC,EACvC,eAAuB;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,OAAO,EAAE,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,EAAE,YAAY,IAAI,SAAS,CAAC;IACjD,OAAO,KAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/client/session-view.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ClientConnectionRpc } from '@deepseek-ai/dsh-client-connection/client';
2
- import type { WorktreeManager } from '../contract/index.js';
2
+ import type { WorktreeManager, WorktreePermissionManager } from '../contract/index.js';
3
3
  /** The one logical channel shared by the DSH Connection and Typert Gateway. */
4
4
  export declare const WORKTREE_CONNECTION_CHANNEL: "/api";
5
5
  /**
@@ -16,6 +16,8 @@ export declare const WORKTREE_CONNECTION_ENDPOINTS: Readonly<{
16
16
  insertWorktreeBefore: "worktreeManager/insertWorktreeBefore";
17
17
  listBindings: "worktreeManager/listBindings";
18
18
  bindSession: "worktreeManager/bindSession";
19
+ ensureWorktreePermission: "worktreeManager/ensureWorktreePermission";
20
+ normalizeDetachedWorktreePermissions: "worktreeManager/normalizeDetachedWorktreePermissions";
19
21
  }>;
20
22
  /** Deliberately narrow transport seam: the adapter only needs `call`. */
21
23
  export type WorktreeConnectionRpc = Pick<ClientConnectionRpc, 'call'>;
@@ -33,7 +35,7 @@ export declare class WorktreeConnectionError extends Error {
33
35
  readonly retryable: boolean;
34
36
  constructor(options: WorktreeConnectionErrorOptions);
35
37
  }
36
- export interface WorktreeConnectionAdapter extends WorktreeManager {
38
+ export interface WorktreeConnectionAdapter extends WorktreeManager, WorktreePermissionManager {
37
39
  /** Abort all requests owned by this Client plugin instance. */
38
40
  dispose(): void;
39
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-connection.d.ts","sourceRoot":"","sources":["../../src/client/worktree-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAErF,OAAO,KAAK,EAEV,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,EAAG,MAAe,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;EAUiB,CAAC;AAE5D,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qFAAqF;AACrF,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,8BAA8B;CAOpD;AAED,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAChE,+DAA+D;IAC/D,OAAO,IAAI,IAAI,CAAC;CACjB;AA+ED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,qBAAqB,GACzB,yBAAyB,CAiD3B"}
1
+ {"version":3,"file":"worktree-connection.d.ts","sourceRoot":"","sources":["../../src/client/worktree-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAErF,OAAO,KAAK,EAEV,eAAe,EACf,yBAAyB,EAI1B,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,EAAG,MAAe,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EAYiB,CAAC;AAE5D,yEAAyE;AACzE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qFAAqF;AACrF,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,8BAA8B;CAOpD;AAED,MAAM,WAAW,yBAA0B,SAAQ,eAAe,EAAE,yBAAyB;IAC3F,+DAA+D;IAC/D,OAAO,IAAI,IAAI,CAAC;CACjB;AA+ED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,qBAAqB,GACzB,yBAAyB,CAoD3B"}
@@ -14,6 +14,8 @@ export const WORKTREE_CONNECTION_ENDPOINTS = Object.freeze({
14
14
  insertWorktreeBefore: 'worktreeManager/insertWorktreeBefore',
15
15
  listBindings: 'worktreeManager/listBindings',
16
16
  bindSession: 'worktreeManager/bindSession',
17
+ ensureWorktreePermission: 'worktreeManager/ensureWorktreePermission',
18
+ normalizeDetachedWorktreePermissions: 'worktreeManager/normalizeDetachedWorktreePermissions',
17
19
  });
18
20
  /** Browser-safe error shared by transport, Gateway, endpoint and domain failures. */
19
21
  export class WorktreeConnectionError extends Error {
@@ -135,6 +137,8 @@ export function createWorktreeConnectionAdapter(rpc) {
135
137
  },
136
138
  listBindings: (input) => invoke('listBindings', input),
137
139
  bindSession: (input) => invoke('bindSession', input),
140
+ ensureWorktreePermission: (input) => invoke('ensureWorktreePermission', input),
141
+ normalizeDetachedWorktreePermissions: (input) => invoke('normalizeDetachedWorktreePermissions', input),
138
142
  dispose() {
139
143
  if (disposed)
140
144
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-connection.js","sourceRoot":"","sources":["../../src/client/worktree-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree-connection.js","sourceRoot":"","sources":["../../src/client/worktree-connection.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import type { WorktreePermissionResult } from '../contract/index.js';
2
3
  import type { WorktreeViewError } from './worktree-view.js';
3
4
  import { WORKTREE_NS } from './locales.js';
4
5
  type WorktreeTranslate = TranslateNS<typeof WORKTREE_NS>;
6
+ export declare function formatWorktreePermissionNotice(result: WorktreePermissionResult, t: WorktreeTranslate): string;
5
7
  export declare function formatWorktreeViewError(error: WorktreeViewError, t: WorktreeTranslate): string;
6
8
  export {};
7
9
  //# sourceMappingURL=worktree-error-copy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-error-copy.d.ts","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,iBAAiB,GAAG,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;AAWzD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,CAAC,EAAE,iBAAiB,GACnB,MAAM,CAyDR"}
1
+ {"version":3,"file":"worktree-error-copy.d.ts","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,KAAK,iBAAiB,GAAG,WAAW,CAAC,OAAO,WAAW,CAAC,CAAC;AAWzD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,wBAAwB,EAChC,CAAC,EAAE,iBAAiB,GACnB,MAAM,CAWR;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,CAAC,EAAE,iBAAiB,GACnB,MAAM,CA6DR"}
@@ -5,6 +5,18 @@ function detail(error, name) {
5
5
  function reason(error, t) {
6
6
  return error.message.length > 0 ? error.message : t('error.worktreeDataUnavailable');
7
7
  }
8
+ export function formatWorktreePermissionNotice(result, t) {
9
+ switch (result.status) {
10
+ case 'fallback-workspace-write':
11
+ return t('permission.fallbackWorkspaceWrite');
12
+ case 'user-restricted':
13
+ return t('permission.userRestricted');
14
+ case 'unverified':
15
+ return t('permission.unverified');
16
+ default:
17
+ return t('permission.unavailable');
18
+ }
19
+ }
8
20
  export function formatWorktreeViewError(error, t) {
9
21
  switch (error.code) {
10
22
  case 'CLIENT_DISPOSED':
@@ -47,6 +59,10 @@ export function formatWorktreeViewError(error, t) {
47
59
  });
48
60
  case 'SESSION_ALREADY_BOUND':
49
61
  return t('error.sessionAlreadyBound');
62
+ case 'WORKTREE_PERMISSION_CONFIRMATION_REQUIRED':
63
+ return t('error.worktreePermissionConfirmationRequired');
64
+ case 'WORKTREE_PERMISSION_FAILED':
65
+ return t('error.worktreePermissionFailed', { reason: reason(error, t) });
50
66
  case 'SESSION_LIST_NOT_READY':
51
67
  return t('error.sessionListNotReady');
52
68
  case 'SESSION_FACTS_INCOMPLETE':
@@ -1 +1 @@
1
- {"version":3,"file":"worktree-error-copy.js","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree-error-copy.js","sourceRoot":"","sources":["../../src/client/worktree-error-copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** DOM marker owned only by this plugin's permission icon decorator. */
2
+ export declare const WORKTREE_PERMISSION_ICON_ATTRIBUTE = "data-clutch-dsh-worktree-permission-icon";
3
+ /** Mark the native custom permission row and trigger for CSS decoration. */
4
+ export declare function decorateWorktreePermissionIcons(document: Document): void;
5
+ /** Install the Worktree permission icon and return a plugin-local disposer. */
6
+ export declare function installWorktreePermissionIcon(document: Document): () => void;
7
+ //# sourceMappingURL=worktree-permission-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-permission-icon.d.ts","sourceRoot":"","sources":["../../src/client/worktree-permission-icon.ts"],"names":[],"mappings":"AAIA,wEAAwE;AACxE,eAAO,MAAM,kCAAkC,6CACH,CAAC;AAsD7C,4EAA4E;AAC5E,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAoBxE;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CA4C5E"}
@@ -0,0 +1,119 @@
1
+ const PLUGIN_ID = '@cerbur/clutch-dsh-worktree';
2
+ const STYLE_ID = `${PLUGIN_ID}/permission-icon`;
3
+ const WORKTREE_PERMISSION_LABEL = 'Worktree Full Access';
4
+ /** DOM marker owned only by this plugin's permission icon decorator. */
5
+ export const WORKTREE_PERMISSION_ICON_ATTRIBUTE = 'data-clutch-dsh-worktree-permission-icon';
6
+ // The native DSH menu has no icon extension point for host-configured values.
7
+ // A branch glyph keeps the custom option visually distinct while preserving
8
+ // the same 16px geometry as the built-in permission glyphs.
9
+ const ICON_SVG = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M13.0762 1.37207C14.0846 1.37228 14.9021 2.19077 14.9023 3.19922C14.9022 4.20772 14.0847 5.02518 13.0762 5.02539C12.2967 5.02539 11.6325 4.53691 11.3701 3.84961H4.35547C4.79397 4.26458 5.15861 4.7644 5.41699 5.33496L7.10645 9.06738C7.88526 10.7875 9.55104 11.9228 11.4189 12.0371C11.7085 11.4109 12.3411 10.9756 13.0762 10.9756C14.0843 10.9759 14.9023 11.7936 14.9023 12.8018C14.9023 13.81 14.0843 14.6277 13.0762 14.6279C12.2534 14.6279 11.5574 14.0832 11.3291 13.335C8.9868 13.1879 6.89981 11.7612 5.92285 9.60352L4.23242 5.87109C3.67503 4.64033 2.44878 3.84961 1.09766 3.84961V2.54883C1.10665 2.54883 1.11601 2.54975 1.125 2.5498L11.3701 2.54883C11.6326 1.86151 12.2969 1.37207 13.0762 1.37207ZM13.0762 12.2764C12.7858 12.2764 12.5508 12.5114 12.5508 12.8018C12.5508 13.0921 12.7858 13.3281 13.0762 13.3281C13.3664 13.3279 13.6025 13.092 13.6025 12.8018C13.6025 12.5115 13.3664 12.2766 13.0762 12.2764ZM13.0762 2.67285C12.7855 2.67285 12.55 2.90861 12.5498 3.19922C12.5499 3.48987 12.7855 3.72559 13.0762 3.72559C13.3667 3.72538 13.6024 3.48975 13.6025 3.19922C13.6023 2.90874 13.3666 2.67306 13.0762 2.67285Z" fill="black"/></svg>';
10
+ function iconStyles() {
11
+ const mask = `url("data:image/svg+xml,${encodeURIComponent(ICON_SVG)}")`;
12
+ return `
13
+ [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]::before {
14
+ content: "";
15
+ display: inline-block;
16
+ flex: 0 0 auto;
17
+ width: 16px;
18
+ height: 16px;
19
+ background-color: var(--dsw-alias-label-tertiary, currentColor);
20
+ -webkit-mask-image: ${mask};
21
+ mask-image: ${mask};
22
+ -webkit-mask-position: center;
23
+ mask-position: center;
24
+ -webkit-mask-repeat: no-repeat;
25
+ mask-repeat: no-repeat;
26
+ -webkit-mask-size: contain;
27
+ mask-size: contain;
28
+ }
29
+ [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}="trigger"]::before {
30
+ width: 14px;
31
+ height: 14px;
32
+ }
33
+ @container (max-width: 460px) {
34
+ [${WORKTREE_PERMISSION_ICON_ATTRIBUTE}="trigger"] > span:first-of-type {
35
+ display: none;
36
+ }
37
+ }
38
+ `;
39
+ }
40
+ function normalizedText(element) {
41
+ return (element.textContent ?? '').replace(/\s+/g, ' ').trim();
42
+ }
43
+ function isWorktreeMenuItem(element) {
44
+ return element.matches('button[role="menuitem"]') &&
45
+ normalizedText(element) === WORKTREE_PERMISSION_LABEL &&
46
+ element.closest('[role="menu"]') !== null;
47
+ }
48
+ function isWorktreeTrigger(element) {
49
+ if (!element.matches('button[aria-label]'))
50
+ return false;
51
+ const label = element.getAttribute('aria-label') ?? '';
52
+ return /^(?:access mode,\s*current:\s*|访问模式,当前:\s*)worktree full access$/iu.test(label.trim());
53
+ }
54
+ /** Mark the native custom permission row and trigger for CSS decoration. */
55
+ export function decorateWorktreePermissionIcons(document) {
56
+ for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {
57
+ const kind = marked.getAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);
58
+ if ((kind === 'menu' && !isWorktreeMenuItem(marked)) ||
59
+ (kind === 'trigger' && !isWorktreeTrigger(marked))) {
60
+ marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);
61
+ }
62
+ }
63
+ for (const item of document.querySelectorAll('button[role="menuitem"]')) {
64
+ if (isWorktreeMenuItem(item)) {
65
+ item.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'menu');
66
+ }
67
+ }
68
+ for (const button of document.querySelectorAll('button[aria-label]')) {
69
+ if (isWorktreeTrigger(button)) {
70
+ button.setAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE, 'trigger');
71
+ }
72
+ }
73
+ }
74
+ /** Install the Worktree permission icon and return a plugin-local disposer. */
75
+ export function installWorktreePermissionIcon(document) {
76
+ for (const existing of document.querySelectorAll('style[data-plugin-css]')) {
77
+ if (existing.getAttribute('data-plugin-css') === STYLE_ID)
78
+ existing.remove();
79
+ }
80
+ const style = document.createElement('style');
81
+ style.setAttribute('data-plugin', PLUGIN_ID);
82
+ style.setAttribute('data-plugin-css', STYLE_ID);
83
+ style.textContent = iconStyles();
84
+ document.head.appendChild(style);
85
+ let active = true;
86
+ let queued = false;
87
+ const scan = () => {
88
+ if (!active || queued)
89
+ return;
90
+ queued = true;
91
+ queueMicrotask(() => {
92
+ queued = false;
93
+ if (active)
94
+ decorateWorktreePermissionIcons(document);
95
+ });
96
+ };
97
+ decorateWorktreePermissionIcons(document);
98
+ const observer = typeof MutationObserver === 'function'
99
+ ? new MutationObserver(scan)
100
+ : undefined;
101
+ observer?.observe(document.documentElement, {
102
+ attributes: true,
103
+ attributeFilter: ['aria-label'],
104
+ characterData: true,
105
+ childList: true,
106
+ subtree: true,
107
+ });
108
+ return () => {
109
+ if (!active)
110
+ return;
111
+ active = false;
112
+ observer?.disconnect();
113
+ style.remove();
114
+ for (const marked of document.querySelectorAll(`[${WORKTREE_PERMISSION_ICON_ATTRIBUTE}]`)) {
115
+ marked.removeAttribute(WORKTREE_PERMISSION_ICON_ATTRIBUTE);
116
+ }
117
+ };
118
+ }
119
+ //# sourceMappingURL=worktree-permission-icon.js.map