dsh-git-worktree 0.1.2 → 0.3.0

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 (136) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/LICENSE +21 -21
  3. package/README.md +187 -43
  4. package/README.zh.md +187 -41
  5. package/cordis.patch.yml +7 -7
  6. package/lib/adapters/lookup.d.ts +4 -2
  7. package/lib/adapters/lookup.js +31 -3
  8. package/lib/adapters/lookup.js.map +1 -1
  9. package/lib/adapters/registry.js +41 -0
  10. package/lib/adapters/registry.js.map +1 -1
  11. package/lib/adapters/safe-file.js +34 -4
  12. package/lib/adapters/safe-file.js.map +1 -1
  13. package/lib/client/WorktreeCreateRow.d.ts +7 -0
  14. package/lib/client/WorktreeCreateRow.js +26 -0
  15. package/lib/client/WorktreeCreateRow.js.map +1 -0
  16. package/lib/client/WorktreeReviewRow.d.ts +11 -0
  17. package/lib/client/WorktreeReviewRow.js +67 -0
  18. package/lib/client/WorktreeReviewRow.js.map +1 -0
  19. package/lib/client/actions.d.ts +86 -0
  20. package/lib/client/actions.js +35 -0
  21. package/lib/client/actions.js.map +1 -0
  22. package/lib/client/console-remote/adapter.d.ts +3 -0
  23. package/lib/client/console-remote/adapter.js +61 -0
  24. package/lib/client/console-remote/adapter.js.map +1 -0
  25. package/lib/client/console-remote/index.d.ts +18 -0
  26. package/lib/client/console-remote/index.js +17 -0
  27. package/lib/client/console-remote/index.js.map +1 -0
  28. package/lib/client/index.d.ts +17 -0
  29. package/lib/client/index.js +44 -0
  30. package/lib/client/index.js.map +1 -0
  31. package/lib/client/model.d.ts +68 -0
  32. package/lib/client/model.js +127 -0
  33. package/lib/client/model.js.map +1 -0
  34. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
  35. package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
  36. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
  37. package/lib/client/pre-session/controller.d.ts +42 -0
  38. package/lib/client/pre-session/controller.js +149 -0
  39. package/lib/client/pre-session/controller.js.map +1 -0
  40. package/lib/client/pre-session/index.d.ts +15 -0
  41. package/lib/client/pre-session/index.js +16 -0
  42. package/lib/client/pre-session/index.js.map +1 -0
  43. package/lib/client/review-console/ReviewActions.d.ts +15 -0
  44. package/lib/client/review-console/ReviewActions.js +234 -0
  45. package/lib/client/review-console/ReviewActions.js.map +1 -0
  46. package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
  47. package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
  48. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
  49. package/lib/client/review-console/index.d.ts +8 -0
  50. package/lib/client/review-console/index.js +22 -0
  51. package/lib/client/review-console/index.js.map +1 -0
  52. package/lib/client/review-console/review-console.styles.d.ts +1 -0
  53. package/lib/client/review-console/review-console.styles.js +81 -0
  54. package/lib/client/review-console/review-console.styles.js.map +1 -0
  55. package/lib/client/review-console/status-events.d.ts +3 -0
  56. package/lib/client/review-console/status-events.js +6 -0
  57. package/lib/client/review-console/status-events.js.map +1 -0
  58. package/lib/client/styles.d.ts +1 -0
  59. package/lib/client/styles.js +78 -0
  60. package/lib/client/styles.js.map +1 -0
  61. package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
  62. package/lib/client/target-console/TargetStatusAction.js +46 -0
  63. package/lib/client/target-console/TargetStatusAction.js.map +1 -0
  64. package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
  65. package/lib/client/target-console/WorktreeConsoleView.js +362 -0
  66. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
  67. package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
  68. package/lib/client/target-console/WorktreeReviewStatus.js +125 -0
  69. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
  70. package/lib/client/target-console/index.d.ts +14 -0
  71. package/lib/client/target-console/index.js +23 -0
  72. package/lib/client/target-console/index.js.map +1 -0
  73. package/lib/client/target-console/target-console.styles.d.ts +1 -0
  74. package/lib/client/target-console/target-console.styles.js +130 -0
  75. package/lib/client/target-console/target-console.styles.js.map +1 -0
  76. package/lib/client.js +6902 -0
  77. package/lib/commands.d.ts +2 -4
  78. package/lib/commands.js +69 -28
  79. package/lib/commands.js.map +1 -1
  80. package/lib/console-contract.d.ts +253 -0
  81. package/lib/console-contract.js +86 -0
  82. package/lib/console-contract.js.map +1 -0
  83. package/lib/console-host/control-plane.d.ts +31 -0
  84. package/lib/console-host/control-plane.js +502 -0
  85. package/lib/console-host/control-plane.js.map +1 -0
  86. package/lib/console-host/errors.d.ts +6 -0
  87. package/lib/console-host/errors.js +31 -0
  88. package/lib/console-host/errors.js.map +1 -0
  89. package/lib/console-host/projection.d.ts +12 -0
  90. package/lib/console-host/projection.js +136 -0
  91. package/lib/console-host/projection.js.map +1 -0
  92. package/lib/console-host/review-diff.d.ts +18 -0
  93. package/lib/console-host/review-diff.js +176 -0
  94. package/lib/console-host/review-diff.js.map +1 -0
  95. package/lib/console-host/service.d.ts +26 -0
  96. package/lib/console-host/service.js +143 -0
  97. package/lib/console-host/service.js.map +1 -0
  98. package/lib/console-remote/descriptors.d.ts +3 -0
  99. package/lib/console-remote/descriptors.js +105 -0
  100. package/lib/console-remote/descriptors.js.map +1 -0
  101. package/lib/console-remote/remote.d.ts +29 -0
  102. package/lib/console-remote/remote.js +4 -0
  103. package/lib/console-remote/remote.js.map +1 -0
  104. package/lib/console-remote/schemas.d.ts +29 -0
  105. package/lib/console-remote/schemas.js +145 -0
  106. package/lib/console-remote/schemas.js.map +1 -0
  107. package/lib/console-remote/typert.d.ts +3 -0
  108. package/lib/console-remote/typert.js +14 -0
  109. package/lib/console-remote/typert.js.map +1 -0
  110. package/lib/index.d.ts +26 -8
  111. package/lib/index.js +28 -10
  112. package/lib/index.js.map +1 -1
  113. package/lib/managed-worktree-path.d.ts +14 -13
  114. package/lib/managed-worktree-path.js +32 -22
  115. package/lib/managed-worktree-path.js.map +1 -1
  116. package/lib/ports.d.ts +39 -1
  117. package/lib/session-checkout-apply.d.ts +54 -1
  118. package/lib/session-checkout-apply.js +318 -28
  119. package/lib/session-checkout-apply.js.map +1 -1
  120. package/lib/session-checkout-module.js +1098 -36
  121. package/lib/session-checkout-module.js.map +1 -1
  122. package/lib/session-target-context.d.ts +6 -0
  123. package/lib/session-target-context.js +16 -0
  124. package/lib/session-target-context.js.map +1 -0
  125. package/lib/tools.d.ts +6 -6
  126. package/lib/tools.js +107 -218
  127. package/lib/tools.js.map +1 -1
  128. package/lib/types.d.ts +57 -11
  129. package/lib/types.js +6 -6
  130. package/lib/types.js.map +1 -1
  131. package/package.json +116 -69
  132. package/scripts/check-publish.mjs +193 -0
  133. package/scripts/clean-lib.mjs +7 -0
  134. package/scripts/dev-dsh-lib.mjs +509 -0
  135. package/scripts/dev-dsh.mjs +95 -0
  136. package/scripts/dsh-source-runner.mjs +14 -0
@@ -0,0 +1,362 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ import { worktreeConsoleErrorMeta, } from '../../console-contract.js';
4
+ import { openIsolatedTarget } from '../actions.js';
5
+ import { reviewEvidenceFromTarget, reviewIdentityFromTarget, WorktreeReviewPanel, } from '../review-console/index.js';
6
+ const STATE_LABELS = {
7
+ local: 'Local',
8
+ creating: '创建中…',
9
+ working: '修改中',
10
+ ready_for_review: '待验收',
11
+ preview_active: 'Local 验收中',
12
+ preview_detached: '预览待恢复',
13
+ retained: '已保留',
14
+ cleanup_pending: '清理中',
15
+ recovery_required: '需要恢复',
16
+ delivered: '已交付',
17
+ };
18
+ function errorText(error) {
19
+ const meta = worktreeConsoleErrorMeta(error.code);
20
+ const next = {
21
+ refresh: '请刷新以读取最新 Host 状态。',
22
+ confirm_dirty: '请明确确认脏 Worktree 后重试。',
23
+ open_recovery: '再次操作前请先查看恢复信息。',
24
+ retry: '临时故障消失后可以重试。',
25
+ none: '当前 Session 无权完成此操作。',
26
+ }[meta.recovery];
27
+ return `${error.code}: ${error.message} ${next}`;
28
+ }
29
+ function retentionLabel(retention) {
30
+ if (retention === 'retain_24h')
31
+ return '保留 24 小时';
32
+ if (retention === 'retain_3d')
33
+ return '保留 3 天';
34
+ return '手动清理';
35
+ }
36
+ function TargetState({ target }) {
37
+ return (_jsxs("span", { className: "dsh-wtc-state", "data-target-state": target.state, children: [_jsx("span", { className: "dsh-wtc-state-dot", "aria-hidden": true }), STATE_LABELS[target.state]] }));
38
+ }
39
+ /** Project-scoped Worktree management surface backed only by WorktreeConsoleAdapter. */
40
+ export function WorktreeConsoleView({ sessionId, adapter, services }) {
41
+ const mounted = useRef(true);
42
+ const request = useRef(0);
43
+ const sessionGeneration = useRef(0);
44
+ const [snapshot, setSnapshot] = useState(null);
45
+ const [loading, setLoading] = useState(true);
46
+ const [error, setError] = useState(null);
47
+ const [pendingAction, setPendingAction] = useState(null);
48
+ const [confirmTarget, setConfirmTarget] = useState(null);
49
+ const [inspected, setInspected] = useState({});
50
+ const [selectedReviewCheckoutId, setSelectedReviewCheckoutId] = useState(null);
51
+ const confirmButton = useRef(null);
52
+ const visibleSnapshot = snapshot?.sessionId === sessionId ? snapshot : null;
53
+ useLayoutEffect(() => {
54
+ mounted.current = true;
55
+ return () => { mounted.current = false; };
56
+ }, []);
57
+ useLayoutEffect(() => {
58
+ sessionGeneration.current += 1;
59
+ request.current += 1;
60
+ setSnapshot(null);
61
+ setInspected({});
62
+ setConfirmTarget(null);
63
+ setSelectedReviewCheckoutId(null);
64
+ setPendingAction(null);
65
+ setError(null);
66
+ setLoading(true);
67
+ }, [sessionId]);
68
+ const isActive = (generation) => mounted.current && sessionGeneration.current === generation;
69
+ const refresh = useCallback(async (clearError = true) => {
70
+ const generation = sessionGeneration.current;
71
+ const token = ++request.current;
72
+ setLoading(true);
73
+ if (clearError)
74
+ setError(null);
75
+ try {
76
+ const [current, list] = await Promise.all([
77
+ adapter.current({ sessionId }),
78
+ adapter.list({ sessionId }),
79
+ ]);
80
+ if (!isActive(generation) || token !== request.current)
81
+ return;
82
+ if (!current.ok) {
83
+ setError(errorText(current.error));
84
+ return;
85
+ }
86
+ if (!list.ok) {
87
+ setError(errorText(list.error));
88
+ return;
89
+ }
90
+ setSnapshot({ sessionId, current: current.value.target, list: list.value });
91
+ }
92
+ catch (reason) {
93
+ if (isActive(generation) && token === request.current) {
94
+ setError(reason instanceof Error ? reason.message : String(reason));
95
+ }
96
+ }
97
+ finally {
98
+ if (isActive(generation) && token === request.current)
99
+ setLoading(false);
100
+ }
101
+ }, [adapter, sessionId]);
102
+ useEffect(() => { void refresh(); }, [refresh]);
103
+ useEffect(() => {
104
+ if (confirmTarget !== null)
105
+ confirmButton.current?.focus();
106
+ }, [confirmTarget]);
107
+ const applyMutation = (response, generation) => {
108
+ if (!isActive(generation))
109
+ return;
110
+ setSnapshot(current => {
111
+ if (current === null || current.sessionId !== sessionId)
112
+ return current;
113
+ const target = response.target;
114
+ const nextCurrent = current.current.checkoutId === target.checkoutId
115
+ ? { ...current.current, ...target }
116
+ : current.current;
117
+ return {
118
+ sessionId,
119
+ current: nextCurrent,
120
+ list: {
121
+ ...current.list,
122
+ worktrees: current.list.worktrees.map(row => row.checkoutId === target.checkoutId ? target : row),
123
+ },
124
+ };
125
+ });
126
+ };
127
+ const mutationError = (code, message, generation) => {
128
+ if (!isActive(generation))
129
+ return;
130
+ setError(errorText({ code, message }));
131
+ if (code === 'stale_target' || code === 'stale_local' || code === 'stale_isolated') {
132
+ void refresh(false);
133
+ }
134
+ };
135
+ const createTarget = async () => {
136
+ if (pendingAction !== null || visibleSnapshot?.current.capabilities.create !== true)
137
+ return;
138
+ const generation = sessionGeneration.current;
139
+ const sourceProjectId = visibleSnapshot.current.project.id;
140
+ setPendingAction('create');
141
+ setError(null);
142
+ try {
143
+ const outcome = await adapter.create({ sourceSessionId: sessionId });
144
+ if (!isActive(generation))
145
+ return;
146
+ if (!outcome.ok) {
147
+ setError(errorText(outcome.error));
148
+ return;
149
+ }
150
+ const { target, targetSessionId, managedRoot } = outcome.value;
151
+ if (target.sourceSessionId !== sessionId) {
152
+ throw new Error('Host 返回了属于其他 source Session 的目标。');
153
+ }
154
+ if (targetSessionId === sessionId) {
155
+ throw new Error('Host 错误地把 source Session 作为 isolated target Session 返回。');
156
+ }
157
+ if (target.checkoutId === null
158
+ || target.targetSessionId !== targetSessionId
159
+ || target.ownerSessionId !== targetSessionId
160
+ || target.managedRoot !== managedRoot
161
+ || target.project.id !== sourceProjectId
162
+ || !target.capabilities.open) {
163
+ throw new Error('Host 返回的 target Session 身份不一致。');
164
+ }
165
+ await openIsolatedTarget(services, { targetSessionId, managedRoot }, () => isActive(generation));
166
+ if (!isActive(generation))
167
+ return;
168
+ setSnapshot(current => current === null || current.sessionId !== sessionId ? current : {
169
+ sessionId,
170
+ current: target,
171
+ list: {
172
+ ...current.list,
173
+ worktrees: [
174
+ ...current.list.worktrees.filter(row => row.checkoutId !== target.checkoutId),
175
+ (() => {
176
+ const { managedRoot: _root, sourceOid: _source, currentBranch: _branch, ...summary } = target;
177
+ return summary;
178
+ })(),
179
+ ],
180
+ },
181
+ });
182
+ void refresh();
183
+ }
184
+ catch (reason) {
185
+ if (isActive(generation)) {
186
+ setError(reason instanceof Error ? reason.message : String(reason));
187
+ void refresh(false);
188
+ }
189
+ }
190
+ finally {
191
+ if (isActive(generation))
192
+ setPendingAction(null);
193
+ }
194
+ };
195
+ const discardTarget = async (target, confirmDirty) => {
196
+ if (pendingAction !== null || target.checkoutId === null || !target.capabilities.discard)
197
+ return;
198
+ const generation = sessionGeneration.current;
199
+ setConfirmTarget(null);
200
+ setPendingAction(`discard:${target.checkoutId}`);
201
+ setError(null);
202
+ try {
203
+ const outcome = await adapter.discard({
204
+ sessionId,
205
+ checkoutId: target.checkoutId,
206
+ expectedRevision: target.revision,
207
+ confirmDirty,
208
+ ...(target.state === 'preview_active' || target.capabilities.rollbackPreview ? { rollbackPreview: true } : {}),
209
+ });
210
+ if (!isActive(generation))
211
+ return;
212
+ if (!outcome.ok) {
213
+ mutationError(outcome.error.code, outcome.error.message, generation);
214
+ return;
215
+ }
216
+ applyMutation(outcome.value, generation);
217
+ void refresh();
218
+ }
219
+ catch (reason) {
220
+ if (isActive(generation))
221
+ setError(reason instanceof Error ? reason.message : String(reason));
222
+ }
223
+ finally {
224
+ if (isActive(generation))
225
+ setPendingAction(null);
226
+ }
227
+ };
228
+ const retryCleanup = async (target) => {
229
+ if (pendingAction !== null || target.checkoutId === null || !target.capabilities.retryCleanup)
230
+ return;
231
+ const generation = sessionGeneration.current;
232
+ setPendingAction(`cleanup:${target.checkoutId}`);
233
+ setError(null);
234
+ try {
235
+ const outcome = await adapter.retryCleanup({
236
+ sessionId,
237
+ checkoutId: target.checkoutId,
238
+ expectedRevision: target.revision,
239
+ });
240
+ if (!isActive(generation))
241
+ return;
242
+ if (!outcome.ok) {
243
+ mutationError(outcome.error.code, outcome.error.message, generation);
244
+ return;
245
+ }
246
+ applyMutation(outcome.value, generation);
247
+ void refresh();
248
+ }
249
+ catch (reason) {
250
+ if (isActive(generation))
251
+ setError(reason instanceof Error ? reason.message : String(reason));
252
+ }
253
+ finally {
254
+ if (isActive(generation))
255
+ setPendingAction(null);
256
+ }
257
+ };
258
+ const inspectTarget = async (target) => {
259
+ if (pendingAction !== null || target.checkoutId === null || !target.capabilities.inspect)
260
+ return;
261
+ const generation = sessionGeneration.current;
262
+ setPendingAction(`inspect:${target.checkoutId}`);
263
+ setError(null);
264
+ try {
265
+ const outcome = await adapter.inspect({ sessionId, checkoutId: target.checkoutId });
266
+ if (!isActive(generation))
267
+ return;
268
+ if (!outcome.ok) {
269
+ mutationError(outcome.error.code, outcome.error.message, generation);
270
+ return;
271
+ }
272
+ if (outcome.value.target.checkoutId !== target.checkoutId) {
273
+ throw new Error('检查结果返回了不同的 Checkout 身份。');
274
+ }
275
+ setInspected(current => ({ ...current, [target.checkoutId]: outcome.value.target }));
276
+ }
277
+ catch (reason) {
278
+ if (isActive(generation))
279
+ setError(reason instanceof Error ? reason.message : String(reason));
280
+ }
281
+ finally {
282
+ if (isActive(generation))
283
+ setPendingAction(null);
284
+ }
285
+ };
286
+ const openListedTarget = async (target) => {
287
+ if (pendingAction !== null
288
+ || target.checkoutId === null
289
+ || !target.capabilities.open
290
+ || !target.capabilities.inspect)
291
+ return;
292
+ const generation = sessionGeneration.current;
293
+ setPendingAction(`open:${target.checkoutId}`);
294
+ setError(null);
295
+ try {
296
+ const outcome = await adapter.inspect({ sessionId, checkoutId: target.checkoutId });
297
+ if (!isActive(generation))
298
+ return;
299
+ if (!outcome.ok) {
300
+ mutationError(outcome.error.code, outcome.error.message, generation);
301
+ return;
302
+ }
303
+ const detail = outcome.value.target;
304
+ if (!detail.capabilities.open) {
305
+ throw new Error('最新 Host 状态已不允许打开该 Worktree。');
306
+ }
307
+ if (detail.checkoutId !== target.checkoutId
308
+ || detail.project.id !== target.project.id
309
+ || detail.sourceSessionId !== target.sourceSessionId
310
+ || detail.ownerSessionId !== target.ownerSessionId
311
+ || detail.targetSessionId !== target.targetSessionId
312
+ || detail.targetSessionId !== detail.ownerSessionId) {
313
+ throw new Error('检查结果中的 target 身份不一致。');
314
+ }
315
+ if (detail.managedRoot === null || detail.targetSessionId === null) {
316
+ throw new Error('已授权的 target 路径或 Session 身份不可用。');
317
+ }
318
+ await openIsolatedTarget(services, {
319
+ managedRoot: detail.managedRoot,
320
+ targetSessionId: detail.targetSessionId,
321
+ }, () => isActive(generation));
322
+ }
323
+ catch (reason) {
324
+ if (isActive(generation)) {
325
+ setError(reason instanceof Error ? reason.message : String(reason));
326
+ void refresh(false);
327
+ }
328
+ }
329
+ finally {
330
+ if (isActive(generation))
331
+ setPendingAction(null);
332
+ }
333
+ };
334
+ const selectedReviewTarget = selectedReviewCheckoutId === null
335
+ ? null
336
+ : visibleSnapshot?.list.worktrees.find(target => target.checkoutId === selectedReviewCheckoutId) ?? null;
337
+ const selectedReviewEvidence = selectedReviewTarget === null
338
+ ? null
339
+ : reviewEvidenceFromTarget(selectedReviewTarget);
340
+ const selectedReviewIdentity = selectedReviewTarget === null
341
+ ? null
342
+ : reviewIdentityFromTarget(sessionId, selectedReviewTarget);
343
+ if (loading && visibleSnapshot === null) {
344
+ return _jsx("div", { className: "dsh-wtc-loading", role: "status", "aria-live": "polite", children: "\u6B63\u5728\u52A0\u8F7D Worktree \u63A7\u5236\u53F0\u2026" });
345
+ }
346
+ return (_jsxs("section", { className: "dsh-wtc-console", "aria-label": "Worktree \u63A7\u5236\u53F0", children: [_jsxs("header", { className: "dsh-wtc-console-head", children: [_jsxs("div", { children: [_jsx("span", { className: "dsh-wtc-kicker", children: "SESSION TARGET" }), _jsx("h2", { children: "Worktree \u63A7\u5236\u53F0" })] }), _jsx("button", { type: "button", className: "dsh-wtc-button", disabled: loading, onClick: () => { void refresh(); }, children: loading ? '刷新中…' : '刷新' })] }), error ? _jsx("div", { className: "dsh-wtc-error", role: "alert", children: error }) : null, visibleSnapshot ? (_jsxs(_Fragment, { children: [_jsxs("section", { className: "dsh-wtc-current", "aria-label": "\u5F53\u524D\u76EE\u6807", children: [_jsxs("div", { children: [_jsx("span", { className: "dsh-wtc-label", children: "\u5F53\u524D\u76EE\u6807" }), _jsx("strong", { children: visibleSnapshot.current.project.name })] }), _jsxs("div", { className: "dsh-wtc-current-actions", children: [_jsx(TargetState, { target: visibleSnapshot.current }), visibleSnapshot.current.state !== 'recovery_required' && visibleSnapshot.current.capabilities.create ? (_jsx("button", { type: "button", className: "dsh-wtc-button dsh-wtc-primary", disabled: pendingAction !== null, onClick: () => { void createTarget(); }, children: pendingAction === 'create' ? '创建中…' : '创建 Worktree' })) : null] })] }), _jsxs("section", { className: "dsh-wtc-list-section", "aria-label": "\u9879\u76EE Worktree", children: [_jsxs("div", { className: "dsh-wtc-section-head", children: [_jsxs("div", { children: [_jsx("span", { className: "dsh-wtc-label", children: "\u9879\u76EE" }), _jsx("h3", { children: visibleSnapshot.list.project.name })] }), _jsx("span", { className: "dsh-wtc-count", children: visibleSnapshot.list.worktrees.length })] }), visibleSnapshot.list.worktrees.length === 0 ? (_jsx("div", { className: "dsh-wtc-empty", children: "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u53D7\u7BA1 Worktree\u3002" })) : (_jsx("ul", { className: "dsh-wtc-list", children: visibleSnapshot.list.worktrees.map(target => (_jsxs("li", { className: "dsh-wtc-row", children: [_jsxs("div", { className: "dsh-wtc-row-main", children: [_jsxs("div", { className: "dsh-wtc-row-title", children: [_jsx(TargetState, { target: target }), _jsx("span", { className: "dsh-wtc-row-id", children: target.checkoutId ?? 'Local source' })] }), _jsxs("div", { className: "dsh-wtc-facts", children: [_jsxs("span", { children: ["\u7B2C ", target.iteration, " \u8F6E"] }), target.dirty ? _jsx("span", { children: "\u6709\u672A\u63D0\u4EA4\u4FEE\u6539" }) : _jsx("span", { children: "\u5E72\u51C0" }), target.retention ? _jsxs("span", { children: ["\u4FDD\u7559\u65B9\u5F0F\uFF1A", retentionLabel(target.retention)] }) : null, target.expiresAt ? _jsxs("span", { children: ["\u5230\u671F\u65F6\u95F4\uFF1A", new Date(target.expiresAt).toLocaleString()] }) : null, target.cleanupMessage ? _jsx("span", { className: "dsh-wtc-recovery-message", children: target.cleanupMessage }) : null] })] }), _jsxs("div", { className: "dsh-wtc-row-actions", children: [_jsxs("span", { className: "dsh-wtc-revision", children: ["r", target.revision] }), target.review && target.checkoutId !== null ? (_jsx("button", { type: "button", className: "dsh-wtc-button", "aria-label": `验收 ${target.checkoutId}`, "aria-pressed": selectedReviewCheckoutId === target.checkoutId, disabled: pendingAction !== null, onClick: () => setSelectedReviewCheckoutId(current => current === target.checkoutId ? null : target.checkoutId), children: "\u9A8C\u6536" })) : null, target.capabilities.inspect && target.checkoutId !== null ? (_jsx("button", { type: "button", className: "dsh-wtc-button", "aria-label": `检查 ${target.checkoutId}`, disabled: pendingAction !== null, onClick: () => { void inspectTarget(target); }, children: pendingAction === `inspect:${target.checkoutId}` ? '检查中…' : '检查' })) : null, target.capabilities.open && target.capabilities.inspect && target.checkoutId !== null ? (_jsx("button", { type: "button", className: "dsh-wtc-button", "aria-label": `打开 ${target.checkoutId}`, disabled: pendingAction !== null, onClick: () => { void openListedTarget(target); }, children: pendingAction === `open:${target.checkoutId}` ? '打开中…' : '打开' })) : null, target.capabilities.discard && target.checkoutId !== null ? (_jsx("button", { type: "button", className: "dsh-wtc-button dsh-wtc-danger", "aria-label": `放弃 ${target.checkoutId}`, disabled: pendingAction !== null, onClick: () => {
347
+ if (target.dirty)
348
+ setConfirmTarget(target);
349
+ else
350
+ void discardTarget(target, false);
351
+ }, children: pendingAction === `discard:${target.checkoutId}` ? '放弃中…' : '放弃' })) : null, target.capabilities.retryCleanup && target.checkoutId !== null ? (_jsx("button", { type: "button", className: "dsh-wtc-button", "aria-label": `重试清理 ${target.checkoutId}`, disabled: pendingAction !== null, onClick: () => { void retryCleanup(target); }, children: pendingAction === `cleanup:${target.checkoutId}` ? '重试中…' : '重试清理' })) : null] }), target.checkoutId !== null && inspected[target.checkoutId] ? (_jsxs("div", { className: "dsh-wtc-inspect", "aria-label": `检查结果 ${target.checkoutId}`, children: [_jsx("span", { className: "dsh-wtc-label", children: "\u5DF2\u6388\u6743\u5DE5\u4F5C\u76EE\u5F55" }), _jsx("code", { children: inspected[target.checkoutId].managedRoot ?? 'Unavailable' }), _jsx("span", { className: "dsh-wtc-label", children: "\u5206\u652F" }), _jsx("code", { children: inspected[target.checkoutId].currentBranch ?? 'detached' })] })) : null] }, target.checkoutId ?? `local:${target.sourceSessionId}`))) }))] }), selectedReviewTarget && selectedReviewEvidence && selectedReviewIdentity ? (_jsx("div", { className: "dsh-wt-card", children: _jsx(WorktreeReviewPanel, { review: selectedReviewEvidence, identity: selectedReviewIdentity, adapter: adapter, target: selectedReviewTarget, onRefresh: () => refresh(false), onTargetChange: target => applyMutation({ target }, sessionGeneration.current) }) })) : null] })) : null, confirmTarget !== null ? (_jsxs("div", { className: "dsh-wtc-confirm", role: "alertdialog", "aria-modal": "true", "aria-label": "\u653E\u5F03\u6709\u4FEE\u6539\u7684 Worktree\uFF1F", onKeyDown: (event) => {
352
+ if (event.key !== 'Escape')
353
+ return;
354
+ event.preventDefault();
355
+ setConfirmTarget(null);
356
+ }, children: [_jsx("strong", { children: "\u653E\u5F03\u6709\u4FEE\u6539\u7684 Worktree\uFF1F" }), _jsx("p", { children: sessionId === confirmTarget.sourceSessionId && sessionId !== confirmTarget.ownerSessionId
357
+ ? `Local source 将放弃预留目标 ${confirmTarget.checkoutId} 及其全部未提交修改。`
358
+ : confirmTarget.state === 'preview_active' || confirmTarget.capabilities.rollbackPreview
359
+ ? `将先安全撤回 ${confirmTarget.checkoutId} 的 Local Preview;只有撤回成功后才会删除 Worktree。`
360
+ : `当前 Session 将放弃 Worktree ${confirmTarget.checkoutId} 及其全部未提交修改。` }), _jsxs("div", { className: "dsh-wtc-confirm-actions", children: [_jsx("button", { type: "button", className: "dsh-wtc-button", onClick: () => { setConfirmTarget(null); }, children: "\u53D6\u6D88" }), _jsx("button", { ref: confirmButton, type: "button", className: "dsh-wtc-button dsh-wtc-danger", onClick: () => { void discardTarget(confirmTarget, true); }, children: "\u786E\u8BA4\u653E\u5F03\u4FEE\u6539" })] })] })) : null] }));
361
+ }
362
+ //# sourceMappingURL=WorktreeConsoleView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeConsoleView.js","sourceRoot":"","sources":["../../../src/client/target-console/WorktreeConsoleView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { WorktreeConsoleAdapter } from '../../console-contract.js';
2
+ export interface WorktreeReviewStatusProps {
3
+ session: {
4
+ sessionId: string;
5
+ };
6
+ adapter: WorktreeConsoleAdapter;
7
+ }
8
+ /** Domi-style compact delivery status above the native Harness composer. */
9
+ export declare function WorktreeReviewStatus({ session, adapter }: WorktreeReviewStatusProps): import("react").JSX.Element | null;
@@ -0,0 +1,125 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { ReviewActions } from '../review-console/ReviewActions.js';
4
+ import { reviewEvidenceFromTarget, reviewIdentityFromTarget } from '../review-console/index.js';
5
+ import { WORKTREE_REVIEW_REFRESH_EVENT } from '../review-console/status-events.js';
6
+ /** Domi-style compact delivery status above the native Harness composer. */
7
+ export function WorktreeReviewStatus({ session, adapter }) {
8
+ const sessionId = session.sessionId;
9
+ const [target, setTarget] = useState(null);
10
+ const [error, setError] = useState(null);
11
+ const [startingIteration, setStartingIteration] = useState(false);
12
+ const mounted = useRef(true);
13
+ const refreshing = useRef(false);
14
+ useEffect(() => {
15
+ mounted.current = true;
16
+ return () => { mounted.current = false; };
17
+ }, []);
18
+ const refresh = useCallback(async () => {
19
+ if (refreshing.current)
20
+ return;
21
+ refreshing.current = true;
22
+ try {
23
+ const outcome = await adapter.current({ sessionId });
24
+ if (!mounted.current)
25
+ return;
26
+ if (outcome.ok) {
27
+ setTarget(outcome.value.target);
28
+ setError(null);
29
+ }
30
+ else {
31
+ setError(outcome.error.message);
32
+ }
33
+ }
34
+ catch (reason) {
35
+ if (mounted.current)
36
+ setError(reason instanceof Error ? reason.message : String(reason));
37
+ }
38
+ finally {
39
+ refreshing.current = false;
40
+ }
41
+ }, [adapter, sessionId]);
42
+ useEffect(() => {
43
+ void refresh();
44
+ const listener = (event) => {
45
+ const detail = event.detail;
46
+ if (detail?.sessionId === sessionId)
47
+ void refresh();
48
+ };
49
+ const timer = window.setInterval(() => { void refresh(); }, 5_000);
50
+ window.addEventListener(WORKTREE_REVIEW_REFRESH_EVENT, listener);
51
+ return () => {
52
+ window.clearInterval(timer);
53
+ window.removeEventListener(WORKTREE_REVIEW_REFRESH_EVENT, listener);
54
+ };
55
+ }, [refresh, sessionId]);
56
+ if (target?.state === 'delivered' && target.checkoutId !== null && target.capabilities.beginNextIteration) {
57
+ const beginNextIteration = async () => {
58
+ if (startingIteration)
59
+ return;
60
+ setStartingIteration(true);
61
+ setError(null);
62
+ try {
63
+ const outcome = await adapter.beginNextIteration({
64
+ sessionId,
65
+ checkoutId: target.checkoutId,
66
+ expectedRevision: target.revision,
67
+ });
68
+ if (!mounted.current)
69
+ return;
70
+ if (!outcome.ok) {
71
+ setError(outcome.error.message);
72
+ if (outcome.error.code === 'stale_target')
73
+ void refresh();
74
+ return;
75
+ }
76
+ setTarget(current => current ? { ...current, ...outcome.value.target } : current);
77
+ }
78
+ catch (reason) {
79
+ if (mounted.current)
80
+ setError(reason instanceof Error ? reason.message : String(reason));
81
+ }
82
+ finally {
83
+ if (mounted.current)
84
+ setStartingIteration(false);
85
+ }
86
+ };
87
+ return (_jsxs("section", { className: "dsh-wt-review-dock", "aria-label": "Worktree \u4E0B\u4E00\u8F6E", "data-review-state": "delivered", children: [_jsx("span", { className: "dsh-wt-review-dock-icon", "aria-hidden": true, children: "\u2713" }), _jsxs("span", { className: "dsh-wt-review-dock-copy", children: [_jsx("strong", { children: "\u672C\u8F6E\u5DF2\u4EA4\u4ED8\uFF0C\u53EF\u5728\u539F\u4F1A\u8BDD\u7EE7\u7EED\u4E0B\u4E00\u8F6E\u4FEE\u6539" }), _jsx("span", { children: "\u5C06\u5B89\u5168\u91CD\u5EFA\u5DF2\u6E05\u7406\u7684 Worktree \u8DEF\u5F84\uFF0C\u5E76\u4FDD\u7559\u5F53\u524D\u5BF9\u8BDD\u3002" })] }), error ? _jsx("span", { className: "dsh-wt-error", children: error }) : null, _jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: startingIteration, onClick: () => { void beginNextIteration(); }, children: startingIteration ? '正在创建…' : '开始下一轮修改' })] }));
88
+ }
89
+ if (!target
90
+ || !target.review
91
+ || target.checkoutId === null
92
+ || !['ready_for_review', 'preview_active', 'preview_detached', 'cleanup_pending', 'recovery_required', 'retained'].includes(target.state))
93
+ return null;
94
+ const review = reviewEvidenceFromTarget(target);
95
+ const identity = reviewIdentityFromTarget(sessionId, target);
96
+ if (!review || !identity)
97
+ return null;
98
+ const focusReview = () => {
99
+ document.querySelector(`[data-worktree-review-id="${CSS.escape(review.reviewId)}"]`)
100
+ ?.scrollIntoView({ behavior: 'smooth', block: 'center' });
101
+ };
102
+ const applyTarget = (nextTarget) => {
103
+ setTarget(current => current ? { ...current, ...nextTarget } : current);
104
+ };
105
+ const detachedFromHeadDrift = target.state === 'preview_detached'
106
+ && target.previewRecovery?.reason === 'stale_local';
107
+ const label = target.state === 'ready_for_review'
108
+ ? target.reviewSlot === 'waiting' ? '另一个任务正在占用 Local 验收槽位' : 'Worktree 已准备好同步到 Local 验收'
109
+ : target.state === 'preview_active'
110
+ ? '本轮修改正在 Local 等待验收'
111
+ : target.state === 'preview_detached'
112
+ ? detachedFromHeadDrift ? 'Local branch/HEAD 已变化,Preview 等待安全撤回' : 'Preview 与 Local 发生冲突,已保留恢复现场'
113
+ : target.state === 'recovery_required'
114
+ ? '验收操作中断,需要恢复 Preview'
115
+ : target.state === 'cleanup_pending'
116
+ ? 'Commit 已创建,Worktree 清理待重试'
117
+ : '本轮已提交,运行环境暂时保留';
118
+ const detail = target.state === 'preview_detached'
119
+ ? detachedFromHeadDrift
120
+ ? '同分支快进可安全重试;切分支或改写历史时不会写入。'
121
+ : '自动撤回会重新检查冲突;无法证明安全时不会写入。'
122
+ : `${review.changedFiles.length} 个文件 · ${review.validationStatus === 'passed' ? '自动验证通过' : '请检查验证结果'}`;
123
+ return (_jsxs("section", { className: "dsh-wt-review-dock", "aria-label": "Worktree \u5F85\u9A8C\u6536", "data-review-state": target.state, children: [_jsx("span", { className: "dsh-wt-review-dock-icon", "aria-hidden": true, children: target.state === 'preview_detached' || target.state === 'recovery_required' ? '!' : '✓' }), _jsxs("span", { className: "dsh-wt-review-dock-copy", children: [_jsx("strong", { children: label }), _jsx("span", { children: detail })] }), error ? _jsx("span", { className: "dsh-wt-error", children: error }) : null, _jsx(ReviewActions, { review: review, adapter: adapter, identity: identity, target: target, disabled: false, unavailableMessage: "\u5B9E\u65F6 Worktree Console \u672A\u8FDE\u63A5\u3002", focusReview: focusReview, onStale: () => { void refresh(); }, onTargetChange: applyTarget })] }));
124
+ }
125
+ //# sourceMappingURL=WorktreeReviewStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeReviewStatus.js","sourceRoot":"","sources":["../../../src/client/target-console/WorktreeReviewStatus.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type ComponentType } from 'react';
2
+ import type { WorktreeConsoleAdapter } from '../../console-contract.js';
3
+ import type { WorktreeClientServices } from '../actions.js';
4
+ export interface TargetConsoleContextLike {
5
+ slots: {
6
+ inject(name: 'conversation.session.header.actions' | 'conversation.input.dock', callback: () => unknown): void;
7
+ register(descriptor: Record<string, unknown>, component: ComponentType<any>): unknown;
8
+ };
9
+ }
10
+ /** Register the Harness-native Session Target contributions against an injected adapter seam. */
11
+ export declare function registerTargetConsole(ctx: TargetConsoleContextLike, adapter: WorktreeConsoleAdapter, _services: WorktreeClientServices): void;
12
+ export { TargetStatusAction } from './TargetStatusAction.js';
13
+ export { WorktreeConsoleView } from './WorktreeConsoleView.js';
14
+ export { WorktreeReviewStatus } from './WorktreeReviewStatus.js';
@@ -0,0 +1,23 @@
1
+ import { createElement } from 'react';
2
+ import { TargetStatusAction } from './TargetStatusAction.js';
3
+ import { WorktreeReviewStatus } from './WorktreeReviewStatus.js';
4
+ /** Register the Harness-native Session Target contributions against an injected adapter seam. */
5
+ export function registerTargetConsole(ctx, adapter, _services) {
6
+ const HeaderAction = ({ sessionId }) => createElement(TargetStatusAction, { sessionId, adapter });
7
+ const ReviewStatus = ({ session }) => createElement(WorktreeReviewStatus, { session, adapter });
8
+ ctx.slots.inject('conversation.session.header.actions', () => ctx.slots.register({
9
+ name: 'conversation.session.header.actions',
10
+ id: 'worktree-target',
11
+ order: 30,
12
+ label: 'Worktree Target',
13
+ }, HeaderAction));
14
+ ctx.slots.inject('conversation.input.dock', () => ctx.slots.register({
15
+ name: 'conversation.input.dock',
16
+ id: 'worktree-review-status',
17
+ order: 10,
18
+ }, ReviewStatus));
19
+ }
20
+ export { TargetStatusAction } from './TargetStatusAction.js';
21
+ export { WorktreeConsoleView } from './WorktreeConsoleView.js';
22
+ export { WorktreeReviewStatus } from './WorktreeReviewStatus.js';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/target-console/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAA;AAGzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAYhE,iGAAiG;AACjG,MAAM,UAAU,qBAAqB,CACnC,GAA6B,EAC7B,OAA+B,EAC/B,SAAiC;IAEjC,MAAM,YAAY,GAAG,CAAC,EAAE,SAAS,EAAyB,EAAE,EAAE,CAC5D,aAAa,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;IAC3D,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,EAAsC,EAAE,EAAE,CACvE,aAAa,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC/E,IAAI,EAAE,qCAAqC;QAC3C,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,iBAAiB;KACzB,EAAE,YAAY,CAAC,CAAC,CAAA;IACjB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnE,IAAI,EAAE,yBAAyB;QAC/B,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,EAAE;KACV,EAAE,YAAY,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const TARGET_CONSOLE_STYLES: string;