dsh-git-worktree 0.1.2 → 0.2.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 (133) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/LICENSE +21 -21
  3. package/README.md +115 -43
  4. package/README.zh.md +115 -41
  5. package/cordis.patch.yml +7 -7
  6. package/lib/adapters/registry.js +40 -0
  7. package/lib/adapters/registry.js.map +1 -1
  8. package/lib/adapters/safe-file.js +34 -4
  9. package/lib/adapters/safe-file.js.map +1 -1
  10. package/lib/client/WorktreeCreateRow.d.ts +7 -0
  11. package/lib/client/WorktreeCreateRow.js +26 -0
  12. package/lib/client/WorktreeCreateRow.js.map +1 -0
  13. package/lib/client/WorktreeReviewRow.d.ts +11 -0
  14. package/lib/client/WorktreeReviewRow.js +67 -0
  15. package/lib/client/WorktreeReviewRow.js.map +1 -0
  16. package/lib/client/actions.d.ts +86 -0
  17. package/lib/client/actions.js +35 -0
  18. package/lib/client/actions.js.map +1 -0
  19. package/lib/client/console-remote/adapter.d.ts +3 -0
  20. package/lib/client/console-remote/adapter.js +59 -0
  21. package/lib/client/console-remote/adapter.js.map +1 -0
  22. package/lib/client/console-remote/index.d.ts +18 -0
  23. package/lib/client/console-remote/index.js +17 -0
  24. package/lib/client/console-remote/index.js.map +1 -0
  25. package/lib/client/index.d.ts +17 -0
  26. package/lib/client/index.js +44 -0
  27. package/lib/client/index.js.map +1 -0
  28. package/lib/client/model.d.ts +68 -0
  29. package/lib/client/model.js +127 -0
  30. package/lib/client/model.js.map +1 -0
  31. package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
  32. package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
  33. package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
  34. package/lib/client/pre-session/controller.d.ts +42 -0
  35. package/lib/client/pre-session/controller.js +149 -0
  36. package/lib/client/pre-session/controller.js.map +1 -0
  37. package/lib/client/pre-session/index.d.ts +15 -0
  38. package/lib/client/pre-session/index.js +16 -0
  39. package/lib/client/pre-session/index.js.map +1 -0
  40. package/lib/client/review-console/ReviewActions.d.ts +15 -0
  41. package/lib/client/review-console/ReviewActions.js +219 -0
  42. package/lib/client/review-console/ReviewActions.js.map +1 -0
  43. package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
  44. package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
  45. package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
  46. package/lib/client/review-console/index.d.ts +8 -0
  47. package/lib/client/review-console/index.js +22 -0
  48. package/lib/client/review-console/index.js.map +1 -0
  49. package/lib/client/review-console/review-console.styles.d.ts +1 -0
  50. package/lib/client/review-console/review-console.styles.js +81 -0
  51. package/lib/client/review-console/review-console.styles.js.map +1 -0
  52. package/lib/client/review-console/status-events.d.ts +3 -0
  53. package/lib/client/review-console/status-events.js +6 -0
  54. package/lib/client/review-console/status-events.js.map +1 -0
  55. package/lib/client/styles.d.ts +1 -0
  56. package/lib/client/styles.js +78 -0
  57. package/lib/client/styles.js.map +1 -0
  58. package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
  59. package/lib/client/target-console/TargetStatusAction.js +46 -0
  60. package/lib/client/target-console/TargetStatusAction.js.map +1 -0
  61. package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
  62. package/lib/client/target-console/WorktreeConsoleView.js +362 -0
  63. package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
  64. package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
  65. package/lib/client/target-console/WorktreeReviewStatus.js +91 -0
  66. package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
  67. package/lib/client/target-console/index.d.ts +14 -0
  68. package/lib/client/target-console/index.js +23 -0
  69. package/lib/client/target-console/index.js.map +1 -0
  70. package/lib/client/target-console/target-console.styles.d.ts +1 -0
  71. package/lib/client/target-console/target-console.styles.js +130 -0
  72. package/lib/client/target-console/target-console.styles.js.map +1 -0
  73. package/lib/client.js +6813 -0
  74. package/lib/commands.d.ts +2 -4
  75. package/lib/commands.js +54 -28
  76. package/lib/commands.js.map +1 -1
  77. package/lib/console-contract.d.ts +236 -0
  78. package/lib/console-contract.js +86 -0
  79. package/lib/console-contract.js.map +1 -0
  80. package/lib/console-host/control-plane.d.ts +29 -0
  81. package/lib/console-host/control-plane.js +443 -0
  82. package/lib/console-host/control-plane.js.map +1 -0
  83. package/lib/console-host/errors.d.ts +6 -0
  84. package/lib/console-host/errors.js +31 -0
  85. package/lib/console-host/errors.js.map +1 -0
  86. package/lib/console-host/projection.d.ts +12 -0
  87. package/lib/console-host/projection.js +131 -0
  88. package/lib/console-host/projection.js.map +1 -0
  89. package/lib/console-host/review-diff.d.ts +18 -0
  90. package/lib/console-host/review-diff.js +176 -0
  91. package/lib/console-host/review-diff.js.map +1 -0
  92. package/lib/console-host/service.d.ts +24 -0
  93. package/lib/console-host/service.js +131 -0
  94. package/lib/console-host/service.js.map +1 -0
  95. package/lib/console-remote/descriptors.d.ts +3 -0
  96. package/lib/console-remote/descriptors.js +96 -0
  97. package/lib/console-remote/descriptors.js.map +1 -0
  98. package/lib/console-remote/remote.d.ts +27 -0
  99. package/lib/console-remote/remote.js +4 -0
  100. package/lib/console-remote/remote.js.map +1 -0
  101. package/lib/console-remote/schemas.d.ts +29 -0
  102. package/lib/console-remote/schemas.js +143 -0
  103. package/lib/console-remote/schemas.js.map +1 -0
  104. package/lib/console-remote/typert.d.ts +3 -0
  105. package/lib/console-remote/typert.js +14 -0
  106. package/lib/console-remote/typert.js.map +1 -0
  107. package/lib/index.d.ts +22 -6
  108. package/lib/index.js +28 -10
  109. package/lib/index.js.map +1 -1
  110. package/lib/managed-worktree-path.d.ts +14 -13
  111. package/lib/managed-worktree-path.js +32 -22
  112. package/lib/managed-worktree-path.js.map +1 -1
  113. package/lib/ports.d.ts +37 -1
  114. package/lib/session-checkout-apply.d.ts +54 -1
  115. package/lib/session-checkout-apply.js +318 -28
  116. package/lib/session-checkout-apply.js.map +1 -1
  117. package/lib/session-checkout-module.js +853 -33
  118. package/lib/session-checkout-module.js.map +1 -1
  119. package/lib/session-target-context.d.ts +6 -0
  120. package/lib/session-target-context.js +16 -0
  121. package/lib/session-target-context.js.map +1 -0
  122. package/lib/tools.d.ts +5 -6
  123. package/lib/tools.js +43 -233
  124. package/lib/tools.js.map +1 -1
  125. package/lib/types.d.ts +57 -11
  126. package/lib/types.js +6 -6
  127. package/lib/types.js.map +1 -1
  128. package/package.json +116 -69
  129. package/scripts/check-publish.mjs +193 -0
  130. package/scripts/clean-lib.mjs +7 -0
  131. package/scripts/dev-dsh-lib.mjs +453 -0
  132. package/scripts/dev-dsh.mjs +89 -0
  133. package/scripts/dsh-source-runner.mjs +14 -0
@@ -0,0 +1,219 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useId, useRef, useState } from 'react';
3
+ import { Modal } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ import { worktreeConsoleErrorMeta } from '../../console-contract.js';
5
+ import { requestWorktreeReviewRefresh } from './status-events.js';
6
+ function isStale(error) {
7
+ return error.code === 'stale_target' || error.code === 'stale_isolated' || error.code === 'stale_local';
8
+ }
9
+ function preflightMessage(preflight) {
10
+ if (preflight.status === 'ready')
11
+ return '同步预检通过,正在创建可撤回的 Local Preview。';
12
+ if (preflight.status === 'local_advanced')
13
+ return 'Local 已前进,但预检确认可以安全合并。';
14
+ if (preflight.status === 'already_in_local')
15
+ return '本轮内容已在 Local 中;同步将是安全空操作。';
16
+ if (preflight.status === 'conflict')
17
+ return `同步预检发现 ${preflight.conflictingFiles.length} 个冲突文件;Local 未修改。`;
18
+ if (preflight.status === 'blocked')
19
+ return `同步暂时阻塞:${preflight.message}`;
20
+ return '同步预检完成;Local 未修改。';
21
+ }
22
+ export function ReviewActions({ review, adapter, identity, target, disabled, unavailableMessage, focusReview, onStale, onTargetChange, }) {
23
+ const formId = useId();
24
+ const [submitting, setSubmitting] = useState(null);
25
+ const [commitMode, setCommitMode] = useState(null);
26
+ const [discardOpen, setDiscardOpen] = useState(false);
27
+ const [commitMessage, setCommitMessage] = useState(review.suggestedCommitMessage);
28
+ const [retainEnvironment, setRetainEnvironment] = useState(false);
29
+ const [retention, setRetention] = useState('retain_24h');
30
+ const [message, setMessage] = useState(null);
31
+ const [error, setError] = useState(null);
32
+ const [preflight, setPreflight] = useState(null);
33
+ const mutationLock = useRef(false);
34
+ const observedTargetRevision = useRef(target?.revision);
35
+ useEffect(() => {
36
+ setCommitMessage(review.suggestedCommitMessage);
37
+ setRetainEnvironment(false);
38
+ setRetention('retain_24h');
39
+ setPreflight(null);
40
+ }, [review.reviewId, review.suggestedCommitMessage]);
41
+ useEffect(() => {
42
+ const revision = target?.revision;
43
+ if (revision === undefined || revision === observedTargetRevision.current)
44
+ return;
45
+ observedTargetRevision.current = revision;
46
+ if (submitting !== null)
47
+ return;
48
+ setMessage(null);
49
+ setError(null);
50
+ setPreflight(null);
51
+ }, [submitting, target?.revision]);
52
+ const begin = (mutation) => {
53
+ if (disabled || !adapter || !identity || !target || mutationLock.current)
54
+ return false;
55
+ mutationLock.current = true;
56
+ setSubmitting(mutation);
57
+ setMessage(null);
58
+ setError(null);
59
+ return true;
60
+ };
61
+ const finish = () => {
62
+ mutationLock.current = false;
63
+ setSubmitting(null);
64
+ };
65
+ const finishError = (nextError) => {
66
+ setError(nextError);
67
+ if (isStale(nextError))
68
+ onStale(nextError);
69
+ finish();
70
+ };
71
+ const applyTarget = (nextTarget) => {
72
+ observedTargetRevision.current = nextTarget.revision;
73
+ onTargetChange(nextTarget);
74
+ if (identity)
75
+ requestWorktreeReviewRefresh(identity.sessionId);
76
+ };
77
+ const previewLocal = async () => {
78
+ if (!begin('preview') || !adapter || !identity)
79
+ return;
80
+ const inspected = await adapter.preflight(identity);
81
+ if (!inspected.ok) {
82
+ finishError(inspected.error);
83
+ return;
84
+ }
85
+ setPreflight(inspected.value.preflight);
86
+ setMessage(preflightMessage(inspected.value.preflight));
87
+ if (inspected.value.preflight.status === 'conflict' || inspected.value.preflight.status === 'blocked') {
88
+ finish();
89
+ return;
90
+ }
91
+ const outcome = await adapter.preview(identity);
92
+ if (!outcome.ok) {
93
+ finishError(outcome.error);
94
+ return;
95
+ }
96
+ applyTarget(outcome.value.target);
97
+ setMessage('已同步为可撤回的 Local Preview;请在 Local 中验收。');
98
+ finish();
99
+ };
100
+ const rollbackPreview = async (resumeRevision = false) => {
101
+ if (!begin('rollback') || !adapter || !identity)
102
+ return;
103
+ const outcome = await adapter.rollbackPreview({ ...identity, resumeRevision });
104
+ if (!outcome.ok) {
105
+ finishError(outcome.error);
106
+ return;
107
+ }
108
+ applyTarget(outcome.value.target);
109
+ setMessage(outcome.value.target.state === 'preview_detached'
110
+ ? outcome.value.target.previewRecovery?.reason === 'stale_local'
111
+ ? 'Local branch/HEAD 已变化;同分支安全快进可重试撤回,其他历史变化不会被覆盖。'
112
+ : 'Preview 与 Local 存在冲突;恢复证据和 Worktree 已保留。'
113
+ : resumeRevision ? '已撤回 Local Preview,可以继续修改 Worktree。' : '已撤回 Local Preview,验收卡仍可再次同步。');
114
+ finish();
115
+ };
116
+ const submitCommit = async () => {
117
+ const value = commitMessage.trim();
118
+ const mode = commitMode;
119
+ if (!mode || !value || value.length > 500 || !begin(mode) || !adapter || !identity)
120
+ return;
121
+ const selectedRetention = retainEnvironment ? retention : 'cleanup';
122
+ const request = { ...identity, commitMessage: value, retention: selectedRetention };
123
+ const outcome = mode === 'finalize_preview'
124
+ ? await adapter.finalizePreview(request)
125
+ : await adapter.finalize(request);
126
+ if (!outcome.ok) {
127
+ finishError(outcome.error);
128
+ return;
129
+ }
130
+ applyTarget(outcome.value.target);
131
+ if (outcome.value.target.state === 'preview_detached') {
132
+ setMessage('Local 已变化,无法可靠提交;Preview 恢复证据和 Worktree 已保留。');
133
+ }
134
+ else {
135
+ setMessage(selectedRetention === 'cleanup' ? '已提交到 Local,并开始清理 Worktree。' : '已提交到 Local,并保留当前运行环境。');
136
+ }
137
+ setCommitMode(null);
138
+ finish();
139
+ };
140
+ const discard = async () => {
141
+ if (!begin('discard') || !adapter || !identity || !target)
142
+ return;
143
+ const outcome = await adapter.discard({
144
+ sessionId: identity.sessionId,
145
+ checkoutId: identity.checkoutId,
146
+ expectedRevision: identity.expectedRevision,
147
+ confirmDirty: true,
148
+ ...(target.state === 'preview_active' || target.capabilities.rollbackPreview ? { rollbackPreview: true } : {}),
149
+ });
150
+ if (!outcome.ok) {
151
+ finishError(outcome.error);
152
+ return;
153
+ }
154
+ applyTarget(outcome.value.target);
155
+ setMessage(outcome.value.target.state === 'preview_detached'
156
+ ? 'Local 已变化,无法无损撤回;未删除 Worktree。'
157
+ : '已放弃本轮 Worktree 修改,Local 未受影响。');
158
+ setDiscardOpen(false);
159
+ finish();
160
+ };
161
+ const retryCleanup = async () => {
162
+ if (!begin('retry_cleanup') || !adapter || !identity)
163
+ return;
164
+ const outcome = await adapter.retryCleanup({
165
+ sessionId: identity.sessionId,
166
+ checkoutId: identity.checkoutId,
167
+ expectedRevision: identity.expectedRevision,
168
+ });
169
+ if (!outcome.ok) {
170
+ finishError(outcome.error);
171
+ return;
172
+ }
173
+ applyTarget(outcome.value.target);
174
+ setMessage(outcome.value.target.state === 'delivered' ? 'Worktree 环境已清理。' : '清理仍未完成,已保留恢复信息。');
175
+ finish();
176
+ };
177
+ const live = Boolean(adapter && identity && target);
178
+ const allDisabled = disabled || submitting !== null || !live;
179
+ const ready = target?.state === 'ready_for_review';
180
+ const previewActive = target?.state === 'preview_active';
181
+ const previewRecovery = target?.state === 'preview_detached'
182
+ || target?.state === 'recovery_required' && target.capabilities.rollbackPreview;
183
+ const safeFastForwardRecovery = target?.state === 'preview_detached'
184
+ && target.previewRecovery?.reason === 'stale_local';
185
+ const cleanupPending = target?.state === 'cleanup_pending';
186
+ const terminal = target?.state === 'retained' || target?.state === 'delivered';
187
+ const canDiscard = Boolean(target?.capabilities.discard);
188
+ const closeCommit = () => {
189
+ if (submitting === null)
190
+ setCommitMode(null);
191
+ };
192
+ const closeDiscard = () => {
193
+ if (submitting === null)
194
+ setDiscardOpen(false);
195
+ };
196
+ const primary = ready ? (_jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: allDisabled || !target.capabilities.preview, onClick: () => { void previewLocal(); }, children: submitting === 'preview' ? '同步中…' : '同步到 Local 验收' })) : previewActive ? (_jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: allDisabled || !target.capabilities.finalizePreview, onClick: () => setCommitMode('finalize_preview'), children: "\u9A8C\u6536\u901A\u8FC7\u5E76\u63D0\u4EA4" })) : previewRecovery ? (_jsx("button", { type: "button", className: "dsh-wt-button", disabled: allDisabled || !target?.capabilities.rollbackPreview, onClick: () => { void rollbackPreview(true); }, children: submitting === 'rollback' ? '处理中…' : safeFastForwardRecovery ? '安全重试撤回' : target?.state === 'preview_detached' ? '重新检查撤回' : '重新尝试撤回' })) : cleanupPending ? (_jsx("button", { type: "button", className: "dsh-wt-button", disabled: allDisabled || !target?.capabilities.retryCleanup, onClick: () => { void retryCleanup(); }, children: submitting === 'retry_cleanup' ? '清理中…' : '重试清理环境' })) : null;
197
+ return (_jsxs("section", { className: "dsh-wt-review-actions", "aria-label": "\u9A8C\u6536\u64CD\u4F5C", children: [!live ? _jsx("p", { className: "dsh-wt-status", children: unavailableMessage }) : null, terminal ? (_jsx("p", { className: "dsh-wt-status", children: target.state === 'retained'
198
+ ? `本轮已提交,运行环境暂时保留${target.commitOid ? ` · ${target.commitOid.slice(0, 8)}` : ''}`
199
+ : `本轮已交付${target.commitOid ? ` · ${target.commitOid.slice(0, 8)}` : ''}` })) : (_jsxs("div", { className: "dsh-wt-actions", children: [primary, _jsxs("details", { className: "dsh-wt-more-menu", children: [_jsx("summary", { className: "dsh-wt-more-trigger", "aria-label": "\u66F4\u591A\u4EA4\u4ED8\u64CD\u4F5C", children: "\u2022\u2022\u2022" }), _jsxs("div", { className: "dsh-wt-more-content", role: "menu", children: [focusReview ? (_jsx("button", { type: "button", role: "menuitem", className: "dsh-wt-more-item", onClick: (event) => {
200
+ focusReview();
201
+ event.currentTarget.closest('details')?.removeAttribute('open');
202
+ }, children: "\u67E5\u770B\u9A8C\u6536\u5361" })) : null, ready ? (_jsx("button", { type: "button", role: "menuitem", className: "dsh-wt-more-item", disabled: allDisabled || !target.capabilities.finalize, onClick: (event) => {
203
+ setCommitMode('finish');
204
+ event.currentTarget.closest('details')?.removeAttribute('open');
205
+ }, children: "\u8DF3\u8FC7\u9A8C\u6536\uFF0C\u76F4\u63A5\u63D0\u4EA4" })) : null, previewActive || previewRecovery ? (_jsx("button", { type: "button", role: "menuitem", className: "dsh-wt-more-item", disabled: allDisabled || !target.capabilities.rollbackPreview, onClick: (event) => {
206
+ void rollbackPreview(true);
207
+ event.currentTarget.closest('details')?.removeAttribute('open');
208
+ }, children: "\u64A4\u56DE\u672C\u6B21\u9884\u89C8" })) : null, canDiscard ? (_jsx("button", { type: "button", role: "menuitem", className: "dsh-wt-more-item dsh-wt-danger-text", disabled: allDisabled, onClick: (event) => {
209
+ setDiscardOpen(true);
210
+ event.currentTarget.closest('details')?.removeAttribute('open');
211
+ }, children: "\u653E\u5F03\u4EFB\u52A1" })) : null] })] })] })), _jsx(Modal, { open: commitMode !== null, onClose: closeCommit, title: commitMode === 'finalize_preview' ? '验收通过并提交?' : '跳过 Local 验收,直接提交?', closeLabel: "\u5173\u95ED\u63D0\u4EA4\u786E\u8BA4", description: commitMode === 'finalize_preview'
212
+ ? '只会提交当前可撤回 Preview 对应的任务增量;Local 中无关修改不会进入该 Commit。'
213
+ : '将跳过 Local Preview 验收并直接提交本轮 Worktree 增量。', footer: (_jsxs("div", { className: "dsh-wt-modal-footer", children: [_jsx("button", { type: "button", className: "dsh-wt-button", disabled: submitting !== null, onClick: closeCommit, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-primary", disabled: submitting !== null || !commitMessage.trim() || commitMessage.trim().length > 500, onClick: () => { void submitCommit(); }, children: submitting === 'finish' || submitting === 'finalize_preview'
214
+ ? '正在提交…'
215
+ : retainEnvironment ? '确认提交并保留环境' : '确认提交并清理' })] })), children: _jsxs("div", { className: "dsh-wt-commit-dialog", children: [_jsx("label", { htmlFor: `${formId}-message`, children: "Commit Message" }), _jsx("textarea", { id: `${formId}-message`, "aria-label": "Commit Message", rows: 6, maxLength: 500, value: commitMessage, onChange: event => setCommitMessage(event.target.value) }), _jsxs("div", { className: "dsh-wt-character-count", children: [commitMessage.length, "/500"] }), _jsxs("label", { className: "dsh-wt-retention-check", children: [_jsx("input", { type: "checkbox", checked: retainEnvironment, onChange: event => setRetainEnvironment(event.target.checked) }), _jsx("span", { children: "\u63D0\u4EA4\u540E\u6682\u65F6\u4FDD\u7559\u5F53\u524D\u8FD0\u884C\u73AF\u5883" })] }), retainEnvironment ? (_jsxs("label", { className: "dsh-wt-retention-select", children: [_jsx("span", { children: "\u4FDD\u7559\u65F6\u957F" }), _jsxs("select", { "aria-label": "\u4FDD\u7559\u65F6\u957F", value: retention, onChange: event => setRetention(event.target.value), children: [_jsx("option", { value: "retain_24h", children: "\u4FDD\u7559 24 \u5C0F\u65F6" }), _jsx("option", { value: "retain_3d", children: "\u4FDD\u7559 3 \u5929" }), _jsx("option", { value: "retain_manual", children: "\u624B\u52A8\u6E05\u7406" })] })] })) : null] }) }), _jsx(Modal, { open: discardOpen, onClose: closeDiscard, title: "\u653E\u5F03\u672C\u8F6E\u4EFB\u52A1\uFF1F", closeLabel: "\u5173\u95ED\u653E\u5F03\u786E\u8BA4", description: previewActive
216
+ ? '会先安全撤回本次 Local Preview,再清理 Worktree;无法无损撤回时会停止,不会覆盖 Local 修改。'
217
+ : 'Worktree 中尚未交付的修改将被永久丢弃,Local 不受影响。', footer: (_jsxs("div", { className: "dsh-wt-modal-footer", children: [_jsx("button", { type: "button", className: "dsh-wt-button", disabled: submitting !== null, onClick: closeDiscard, children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "dsh-wt-button dsh-wt-danger", disabled: submitting !== null, onClick: () => { void discard(); }, children: submitting === 'discard' ? '正在放弃…' : '确认放弃任务' })] })) }), preflight ? _jsx("div", { className: "dsh-wt-preflight", "data-preflight": preflight.status, children: preflightMessage(preflight) }) : null, _jsx("div", { className: "dsh-wt-action-status", "aria-live": "polite", children: submitting ? '正在处理 Worktree,请稍候…' : message }), error && !isStale(error) ? (_jsxs("div", { className: "dsh-wt-error", role: "alert", children: [error.message, "\uFF08", worktreeConsoleErrorMeta(error.code).category, "\uFF1B\u6062\u590D\u65B9\u5F0F\uFF1A", worktreeConsoleErrorMeta(error.code).recovery, "\uFF09"] })) : null] }));
218
+ }
219
+ //# sourceMappingURL=ReviewActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewActions.js","sourceRoot":"","sources":["../../../src/client/review-console/ReviewActions.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { WorktreeConsoleAdapter, WorktreeConsoleReviewSummary, WorktreeConsoleTargetSummary } from '../../console-contract.js';
2
+ export interface WorktreeReviewEvidence extends WorktreeConsoleReviewSummary {
3
+ detailsMarkdown?: string;
4
+ }
5
+ export interface WorktreeReviewIdentity {
6
+ sessionId: string;
7
+ checkoutId: string;
8
+ expectedRevision: number;
9
+ expectedReviewId: string;
10
+ }
11
+ export interface WorktreeReviewPanelProps {
12
+ review: WorktreeReviewEvidence;
13
+ identity?: WorktreeReviewIdentity;
14
+ adapter?: WorktreeConsoleAdapter | null;
15
+ target?: WorktreeConsoleTargetSummary;
16
+ onRefresh?: () => void | Promise<void>;
17
+ onTargetChange?: (target: WorktreeConsoleTargetSummary) => void;
18
+ unavailableMessage?: string;
19
+ }
20
+ export declare function WorktreeReviewPanel({ review, adapter, identity, target, onRefresh, onTargetChange, unavailableMessage, }: WorktreeReviewPanelProps): import("react").JSX.Element;
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useId, useLayoutEffect, useRef, useState } from 'react';
3
+ import { ReviewActions } from './ReviewActions.js';
4
+ function validationLabel(status) {
5
+ if (status === 'passed')
6
+ return '自动验证通过';
7
+ if (status === 'failed')
8
+ return '自动验证失败,仍可继续验收';
9
+ if (status === 'partial')
10
+ return '部分验证通过';
11
+ return '未运行自动验证';
12
+ }
13
+ function testStatusLabel(status) {
14
+ if (status === 'passed')
15
+ return '通过';
16
+ if (status === 'failed')
17
+ return '失败';
18
+ return '未运行';
19
+ }
20
+ function reviewIsStale(target, identity, review) {
21
+ if (!target)
22
+ return false;
23
+ if (target.state === 'working')
24
+ return true;
25
+ if (!['ready_for_review', 'preview_active', 'preview_detached', 'cleanup_pending', 'recovery_required', 'retained'].includes(target.state))
26
+ return false;
27
+ const expectedRevision = identity?.expectedRevision ?? review.revision;
28
+ return !target.review
29
+ || target.revision !== expectedRevision
30
+ || target.review.reviewId !== review.reviewId;
31
+ }
32
+ export function WorktreeReviewPanel({ review, adapter, identity, target, onRefresh, onTargetChange, unavailableMessage = '实时 Worktree Console 未连接;连接后即可执行验收操作。', }) {
33
+ const panelId = useId();
34
+ const targetKey = target ? [
35
+ target.checkoutId,
36
+ target.revision,
37
+ target.state,
38
+ target.review?.reviewId,
39
+ target.commitOid,
40
+ target.retention,
41
+ target.cleanupMessage,
42
+ target.capabilities.finalize,
43
+ target.capabilities.discard,
44
+ ].join('\u0000') : '';
45
+ const [currentTarget, setCurrentTarget] = useState(target);
46
+ const [detailsExpanded, setDetailsExpanded] = useState(false);
47
+ const [invalidReason, setInvalidReason] = useState(reviewIsStale(target, identity, review) ? '验收结果已过期,请刷新。' : null);
48
+ const refreshRequested = useRef(false);
49
+ useLayoutEffect(() => {
50
+ setCurrentTarget(target);
51
+ refreshRequested.current = false;
52
+ setInvalidReason(reviewIsStale(target, identity, review) ? '验收结果已过期,请刷新。' : null);
53
+ }, [identity?.expectedReviewId, identity?.expectedRevision, review.reviewId, review.revision, targetKey]);
54
+ const handleStale = useCallback((_error) => {
55
+ setInvalidReason('验收结果已过期,请刷新。');
56
+ if (!refreshRequested.current) {
57
+ refreshRequested.current = true;
58
+ void onRefresh?.();
59
+ }
60
+ }, [onRefresh]);
61
+ const handleTargetChange = useCallback((nextTarget) => {
62
+ setCurrentTarget(nextTarget);
63
+ onTargetChange?.(nextTarget);
64
+ }, [onTargetChange]);
65
+ const liveReady = Boolean(adapter
66
+ && identity
67
+ && currentTarget
68
+ && ['ready_for_review', 'preview_active', 'preview_detached', 'cleanup_pending', 'recovery_required', 'retained'].includes(currentTarget.state)
69
+ && !invalidReason);
70
+ const hasValidationDetails = Boolean(review.validationSummary || review.tests.length > 0);
71
+ return (_jsxs("section", { className: "dsh-wt-review-panel", "aria-label": "Worktree \u9A8C\u6536", "data-worktree-review-id": review.reviewId, children: [_jsxs("header", { className: "dsh-wt-review-compact-head", children: [_jsx("span", { className: "dsh-wt-review-status-icon", "data-validation": review.validationStatus, "aria-hidden": true, children: "\u2713" }), _jsxs("div", { className: "dsh-wt-review-compact-copy", children: [_jsxs("h2", { className: "dsh-wt-review-title", children: ["\u7B2C ", review.iteration, " \u8F6E\u4FEE\u6539\u5DF2\u51C6\u5907\u9A8C\u6536"] }), _jsx("p", { className: "dsh-wt-review-summary", children: review.summary })] }), _jsxs("span", { className: "dsh-wt-review-identity dsh-wt-code", title: `Review ${review.reviewId} · r${review.revision}`, children: [review.reviewId.slice(0, 8), " \u00B7 r", review.revision] })] }), _jsxs("div", { className: "dsh-wt-review-meta", children: [_jsx("span", { "data-validation": review.validationStatus, children: validationLabel(review.validationStatus) }), _jsxs("span", { children: [review.changedFiles.length, " \u4E2A\u6587\u4EF6"] }), hasValidationDetails ? (_jsx("button", { type: "button", className: "dsh-wt-review-details-toggle", "aria-expanded": detailsExpanded, "aria-controls": `${panelId}-validation`, onClick: () => setDetailsExpanded(value => !value), children: detailsExpanded
72
+ ? '收起验证详情'
73
+ : `查看验证详情${review.tests.length > 0 ? `(${review.tests.length} 项测试)` : ''}` })) : null] }), detailsExpanded ? (_jsxs("div", { id: `${panelId}-validation`, className: "dsh-wt-review-validation-details", children: [review.validationSummary ? _jsx("p", { children: review.validationSummary }) : null, review.tests.length > 0 ? (_jsx("ul", { className: "dsh-wt-test-list", "aria-label": "\u9A8C\u8BC1\u547D\u4EE4", children: review.tests.map((item, index) => (_jsxs("li", { className: "dsh-wt-test", children: [_jsx("span", { className: "dsh-wt-test-state", "data-test-status": item.status, children: testStatusLabel(item.status) }), _jsxs("span", { className: "dsh-wt-test-command", children: [_jsx("code", { className: "dsh-wt-code", children: item.command }), item.summary ? _jsx("span", { className: "dsh-wt-test-summary", children: item.summary }) : null] })] }, `${item.command}-${index}`))) })) : null] })) : null, invalidReason ? _jsx("div", { className: "dsh-wt-error", role: "alert", children: invalidReason }) : null, _jsx(ReviewActions, { review: review, adapter: adapter, identity: identity, target: currentTarget, disabled: !liveReady, unavailableMessage: unavailableMessage, onStale: handleStale, onTargetChange: handleTargetChange })] }));
74
+ }
75
+ //# sourceMappingURL=WorktreeReviewPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeReviewPanel.js","sourceRoot":"","sources":["../../../src/client/review-console/WorktreeReviewPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { WorktreeConsoleTargetSummary } from '../../console-contract.js';
2
+ import type { WorktreeReviewEvidence, WorktreeReviewIdentity } from './WorktreeReviewPanel.js';
3
+ export { WorktreeReviewPanel } from './WorktreeReviewPanel.js';
4
+ export type { WorktreeReviewEvidence, WorktreeReviewIdentity, WorktreeReviewPanelProps, } from './WorktreeReviewPanel.js';
5
+ /** Project one persisted review into the shared compact card/dock evidence shape. */
6
+ export declare function reviewEvidenceFromTarget(target: WorktreeConsoleTargetSummary, detailsMarkdown?: string): WorktreeReviewEvidence | null;
7
+ /** Build the exact CAS identity required by Finalize and advanced review reads. */
8
+ export declare function reviewIdentityFromTarget(sessionId: string, target: WorktreeConsoleTargetSummary): WorktreeReviewIdentity | null;
@@ -0,0 +1,22 @@
1
+ export { WorktreeReviewPanel } from './WorktreeReviewPanel.js';
2
+ /** Project one persisted review into the shared compact card/dock evidence shape. */
3
+ export function reviewEvidenceFromTarget(target, detailsMarkdown) {
4
+ if (!target.review)
5
+ return null;
6
+ return {
7
+ ...target.review,
8
+ ...(detailsMarkdown ? { detailsMarkdown } : {}),
9
+ };
10
+ }
11
+ /** Build the exact CAS identity required by Finalize and advanced review reads. */
12
+ export function reviewIdentityFromTarget(sessionId, target) {
13
+ if (!target.checkoutId || !target.review)
14
+ return null;
15
+ return {
16
+ sessionId,
17
+ checkoutId: target.checkoutId,
18
+ expectedRevision: target.revision,
19
+ expectedReviewId: target.review.reviewId,
20
+ };
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/review-console/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAO9D,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CACtC,MAAoC,EACpC,eAAwB;IAExB,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAC/B,OAAO;QACL,GAAG,MAAM,CAAC,MAAM;QAChB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,MAAoC;IAEpC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACrD,OAAO;QACL,SAAS;QACT,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,gBAAgB,EAAE,MAAM,CAAC,QAAQ;QACjC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;KACzC,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const REVIEW_CONSOLE_STYLES: string;
@@ -0,0 +1,81 @@
1
+ export const REVIEW_CONSOLE_STYLES = String.raw `
2
+ .dsh-wt-review-panel,
3
+ .dsh-wt-review-dock {
4
+ --wt-ink: color-mix(in srgb, currentColor 92%, transparent);
5
+ --wt-muted: color-mix(in srgb, currentColor 58%, transparent);
6
+ --wt-line: color-mix(in srgb, currentColor 14%, transparent);
7
+ --wt-panel: color-mix(in srgb, currentColor 4%, transparent);
8
+ --wt-green: #2f8f64;
9
+ --wt-amber: #b46a13;
10
+ --wt-red: #bd3b3b;
11
+ }
12
+ .dsh-wt-review-panel { display:grid; min-width:0; }
13
+ .dsh-wt-review-compact-head { display:flex; align-items:flex-start; gap:10px; min-width:0; padding:12px 14px 8px; }
14
+ .dsh-wt-review-status-icon,
15
+ .dsh-wt-review-dock-icon { display:inline-grid; place-items:center; width:18px; height:18px; flex:0 0 auto; border-radius:999px; background:color-mix(in srgb, var(--wt-green) 14%, transparent); color:var(--wt-green); font-size:12px; font-weight:800; }
16
+ .dsh-wt-review-status-icon[data-validation="failed"],
17
+ .dsh-wt-review-status-icon[data-validation="partial"] { background:color-mix(in srgb, var(--wt-amber) 14%, transparent); color:var(--wt-amber); }
18
+ .dsh-wt-review-compact-copy { min-width:0; flex:1; }
19
+ .dsh-wt-review-title { margin:0; min-width:0; font-size:14px; line-height:1.35; overflow-wrap:anywhere; }
20
+ .dsh-wt-review-summary { margin:3px 0 0; color:var(--wt-muted); line-height:1.45; overflow-wrap:anywhere; }
21
+ .dsh-wt-review-identity { flex:0 1 auto; max-width:34%; color:var(--wt-muted); font-size:10px; text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
22
+ .dsh-wt-review-meta { display:flex; align-items:center; flex-wrap:wrap; gap:6px 12px; padding:0 14px 10px 42px; color:var(--wt-muted); font-size:11px; }
23
+ .dsh-wt-review-meta [data-validation="passed"] { color:var(--wt-green); }
24
+ .dsh-wt-review-meta [data-validation="failed"],
25
+ .dsh-wt-review-meta [data-validation="partial"] { color:var(--wt-amber); }
26
+ .dsh-wt-review-details-toggle { border:0; padding:0; background:transparent; color:inherit; font:inherit; cursor:pointer; }
27
+ .dsh-wt-review-details-toggle:hover { color:var(--wt-ink); }
28
+ .dsh-wt-review-details-toggle:focus-visible,
29
+ .dsh-wt-more-trigger:focus-visible { outline:2px solid #5a8dee; outline-offset:2px; }
30
+ .dsh-wt-review-validation-details { margin:0 14px 10px 42px; padding:9px 10px; border-radius:8px; background:var(--wt-panel); font-size:11px; }
31
+ .dsh-wt-review-validation-details > p { margin:0 0 7px; }
32
+ .dsh-wt-test-list { list-style:none; padding:0; margin:0; display:grid; gap:6px; }
33
+ .dsh-wt-test { display:grid; grid-template-columns:auto minmax(0, 1fr); gap:7px; align-items:start; }
34
+ .dsh-wt-test-state { color:var(--wt-muted); font-size:10px; padding-top:2px; }
35
+ .dsh-wt-test-state[data-test-status="passed"] { color:var(--wt-green); }
36
+ .dsh-wt-test-state[data-test-status="failed"] { color:var(--wt-amber); }
37
+ .dsh-wt-test-command { display:grid; gap:2px; min-width:0; overflow-wrap:anywhere; }
38
+ .dsh-wt-test-summary { color:var(--wt-muted); overflow-wrap:anywhere; }
39
+ .dsh-wt-review-actions { padding:0 14px 12px 42px; }
40
+ .dsh-wt-more-menu { position:relative; }
41
+ .dsh-wt-more-trigger { display:grid; place-items:center; width:32px; height:30px; border:1px solid var(--wt-line); border-radius:8px; cursor:pointer; list-style:none; font-weight:800; letter-spacing:1px; }
42
+ .dsh-wt-more-trigger::-webkit-details-marker { display:none; }
43
+ .dsh-wt-more-content { position:absolute; right:0; bottom:calc(100% + 6px); z-index:40; min-width:150px; padding:4px; border:1px solid var(--wt-line); border-radius:9px; background:Canvas; box-shadow:0 10px 30px color-mix(in srgb, black 18%, transparent); }
44
+ .dsh-wt-more-item { width:100%; border:0; border-radius:6px; padding:7px 9px; background:transparent; color:inherit; text-align:left; font:inherit; cursor:pointer; }
45
+ .dsh-wt-more-item:hover:not(:disabled) { background:color-mix(in srgb, currentColor 7%, transparent); }
46
+ .dsh-wt-more-item:disabled { opacity:.5; cursor:not-allowed; }
47
+ .dsh-wt-danger { color:var(--wt-red); border-color:color-mix(in srgb, var(--wt-red) 45%, transparent); }
48
+ .dsh-wt-danger-text { color:var(--wt-red); }
49
+ .dsh-wt-modal-footer { display:flex; justify-content:flex-end; gap:8px; }
50
+ .dsh-wt-commit-dialog { display:grid; gap:8px; }
51
+ .dsh-wt-commit-dialog > label:first-child { font-size:12px; font-weight:700; }
52
+ .dsh-wt-commit-dialog textarea { min-height:132px; max-height:240px; resize:vertical; border:1px solid var(--wt-line); border-radius:8px; padding:9px 10px; background:transparent; color:inherit; font:12px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
53
+ .dsh-wt-character-count { color:var(--wt-muted); font-size:10px; text-align:right; }
54
+ .dsh-wt-retention-check { display:flex; align-items:center; gap:8px; border:1px solid var(--wt-line); border-radius:8px; padding:8px 9px; font-size:12px; }
55
+ .dsh-wt-retention-select { display:grid; gap:5px; padding:9px; border-radius:8px; background:var(--wt-panel); font-size:11px; }
56
+ .dsh-wt-retention-select select { min-height:32px; border:1px solid var(--wt-line); border-radius:7px; padding:0 8px; background:Canvas; color:inherit; }
57
+ .dsh-wt-preflight { margin-top:7px; padding:7px 9px; border-radius:8px; background:var(--wt-panel); color:var(--wt-muted); font-size:11px; }
58
+ .dsh-wt-preflight[data-preflight="conflict"],
59
+ .dsh-wt-preflight[data-preflight="blocked"] { color:var(--wt-amber); }
60
+ .dsh-wt-action-status { min-height:1.35em; margin-top:7px; color:var(--wt-muted); font-size:11px; }
61
+ .dsh-wt-review-dock { box-sizing:border-box; display:flex; flex:none; align-items:center; gap:9px; width:calc(100% - 2 * var(--dsh-composer-side-clearance, 16px) - 2 * var(--dsh-composer-dock-inset, 0px)); max-width:calc(var(--dsh-composer-card-max-width, 780px) - 2 * var(--dsh-composer-dock-inset, 0px)); margin:0 auto 8px; padding:7px 9px; border:1px solid color-mix(in srgb, #3275db 22%, transparent); border-radius:9px; background:color-mix(in srgb, #3275db 6%, transparent); color:var(--wt-ink); font-size:12px; }
62
+ .dsh-wt-review-dock-copy { display:grid; min-width:0; flex:1; gap:1px; }
63
+ .dsh-wt-review-dock-copy strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
64
+ .dsh-wt-review-dock-copy span { color:var(--wt-muted); font-size:10px; }
65
+ .dsh-wt-review-dock .dsh-wt-review-actions { padding:0; }
66
+ .dsh-wt-review-dock .dsh-wt-action-status { display:none; }
67
+ .dsh-wt-review-dock .dsh-wt-button { padding:5px 9px; font-size:11px; }
68
+ .dsh-wt-review-dock .dsh-wt-more-trigger { width:29px; height:27px; }
69
+ @media (max-width: 620px) {
70
+ .dsh-wt-review-compact-head { flex-wrap:wrap; }
71
+ .dsh-wt-review-identity { max-width:100%; margin-left:28px; }
72
+ .dsh-wt-review-meta,
73
+ .dsh-wt-review-validation-details,
74
+ .dsh-wt-review-actions { margin-left:0; padding-left:14px; }
75
+ .dsh-wt-review-dock { flex-wrap:wrap; width:calc(100% - 2 * var(--dsh-composer-side-clearance, 12px) - 2 * var(--dsh-composer-dock-inset, 0px)); }
76
+ .dsh-wt-review-dock-copy { flex-basis:calc(100% - 28px); }
77
+ .dsh-wt-review-dock-copy span { display:none; }
78
+ .dsh-wt-review-dock .dsh-wt-review-actions { margin-left:auto; }
79
+ }
80
+ `;
81
+ //# sourceMappingURL=review-console.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-console.styles.js","sourceRoot":"","sources":["../../../src/client/review-console/review-console.styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+E9C,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const WORKTREE_REVIEW_REFRESH_EVENT = "dsh-git-worktree:review-refresh";
2
+ /** Notify all mounted review surfaces to re-read the Host-authoritative target. */
3
+ export declare function requestWorktreeReviewRefresh(sessionId: string): void;
@@ -0,0 +1,6 @@
1
+ export const WORKTREE_REVIEW_REFRESH_EVENT = 'dsh-git-worktree:review-refresh';
2
+ /** Notify all mounted review surfaces to re-read the Host-authoritative target. */
3
+ export function requestWorktreeReviewRefresh(sessionId) {
4
+ window.dispatchEvent(new CustomEvent(WORKTREE_REVIEW_REFRESH_EVENT, { detail: { sessionId } }));
5
+ }
6
+ //# sourceMappingURL=status-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-events.js","sourceRoot":"","sources":["../../../src/client/review-console/status-events.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG,iCAAiC,CAAA;AAE9E,mFAAmF;AACnF,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAC5D,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;AACjG,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const WORKTREE_STYLES: string;
@@ -0,0 +1,78 @@
1
+ import { REVIEW_CONSOLE_STYLES } from './review-console/review-console.styles.js';
2
+ export const WORKTREE_STYLES = String.raw `
3
+ .dsh-wt-card {
4
+ --wt-ink: color-mix(in srgb, currentColor 92%, transparent);
5
+ --wt-muted: color-mix(in srgb, currentColor 58%, transparent);
6
+ --wt-line: color-mix(in srgb, currentColor 14%, transparent);
7
+ --wt-panel: color-mix(in srgb, currentColor 4%, transparent);
8
+ --wt-green: #2f8f64;
9
+ --wt-amber: #b46a13;
10
+ --wt-red: #bd3b3b;
11
+ margin: 6px 0;
12
+ border: 1px solid var(--wt-line);
13
+ border-radius: 12px;
14
+ background: linear-gradient(145deg, color-mix(in srgb, currentColor 2%, transparent), transparent 45%);
15
+ color: var(--wt-ink);
16
+ overflow: hidden;
17
+ font-size: 13px;
18
+ }
19
+ .dsh-wt-head { display:flex; align-items:center; gap:10px; padding:10px 12px; min-width:0; }
20
+ .dsh-wt-mark { width:9px; height:9px; flex:0 0 auto; border-radius:999px; background:var(--wt-green); box-shadow:0 0 0 4px color-mix(in srgb, var(--wt-green) 14%, transparent); }
21
+ .dsh-wt-card[data-state="running"] .dsh-wt-mark { background:var(--wt-amber); animation:dsh-wt-pulse 1.4s ease-in-out infinite; }
22
+ .dsh-wt-card[data-state="error"] .dsh-wt-mark { background:var(--wt-red); box-shadow:0 0 0 4px color-mix(in srgb, var(--wt-red) 14%, transparent); }
23
+ @keyframes dsh-wt-pulse { 50% { opacity:.35; transform:scale(.82); } }
24
+ @media (prefers-reduced-motion: reduce) { .dsh-wt-card[data-state="running"] .dsh-wt-mark { animation:none; } }
25
+ .dsh-wt-title { font-weight:650; letter-spacing:-.01em; white-space:nowrap; }
26
+ .dsh-wt-subtitle { color:var(--wt-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
27
+ .dsh-wt-spacer { flex:1; }
28
+ .dsh-wt-body { border-top:1px solid var(--wt-line); padding:12px; display:grid; gap:11px; background:var(--wt-panel); }
29
+ .dsh-wt-grid { display:grid; grid-template-columns:minmax(90px, .35fr) minmax(0, 1fr); gap:7px 12px; }
30
+ .dsh-wt-label { color:var(--wt-muted); }
31
+ .dsh-wt-value { min-width:0; overflow-wrap:anywhere; }
32
+ .dsh-wt-code { font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:12px; }
33
+ .dsh-wt-path { border:0; padding:0; color:inherit; text-align:left; background:none; cursor:pointer; text-decoration:underline; text-decoration-color:color-mix(in srgb, currentColor 28%, transparent); text-underline-offset:3px; }
34
+ .dsh-wt-path:hover { text-decoration-color:currentColor; }
35
+ .dsh-wt-actions { display:flex; align-items:center; flex-wrap:wrap; gap:8px; }
36
+ .dsh-wt-button { border:1px solid var(--wt-line); border-radius:8px; padding:7px 11px; background:transparent; color:inherit; font:inherit; font-weight:600; cursor:pointer; transition:background .15s ease, border-color .15s ease, transform .15s ease; }
37
+ .dsh-wt-button:hover:not(:disabled) { background:color-mix(in srgb, currentColor 7%, transparent); border-color:color-mix(in srgb, currentColor 28%, transparent); }
38
+ .dsh-wt-button:active:not(:disabled) { transform:translateY(1px); }
39
+ .dsh-wt-button:focus-visible, .dsh-wt-path:focus-visible, .dsh-wt-summary:focus-visible { outline:2px solid #5a8dee; outline-offset:2px; }
40
+ .dsh-wt-button:disabled { opacity:.52; cursor:wait; }
41
+ .dsh-wt-primary { background:#2257d7; color:white; border-color:#2257d7; }
42
+ .dsh-wt-primary:hover:not(:disabled) { background:#1848bd; border-color:#1848bd; }
43
+ .dsh-wt-error { color:var(--wt-red); line-height:1.45; overflow-wrap:anywhere; }
44
+ .dsh-wt-status { color:var(--wt-muted); }
45
+ .dsh-wt-badge { display:inline-flex; align-items:center; border:1px solid var(--wt-line); border-radius:999px; padding:2px 7px; font-size:11px; font-weight:650; text-transform:uppercase; letter-spacing:.04em; }
46
+ .dsh-wt-badge[data-validation="passed"] { color:var(--wt-green); }
47
+ .dsh-wt-badge[data-validation="failed"] { color:var(--wt-red); }
48
+ .dsh-wt-badge[data-validation="partial"] { color:var(--wt-amber); }
49
+ .dsh-wt-files { display:flex; flex-wrap:wrap; gap:5px; }
50
+ .dsh-wt-file { border:1px solid var(--wt-line); border-radius:6px; padding:3px 6px; font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:11px; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
51
+ .dsh-wt-commit { margin:0; padding:9px 10px; max-height:150px; overflow:auto; border:1px solid var(--wt-line); border-radius:8px; background:color-mix(in srgb, currentColor 3%, transparent); white-space:pre-wrap; overflow-wrap:anywhere; }
52
+ .dsh-wt-details { border-top:1px solid var(--wt-line); padding-top:9px; }
53
+ .dsh-wt-summary { cursor:pointer; color:var(--wt-muted); font-weight:600; }
54
+ .dsh-wt-test-list { list-style:none; padding:7px 0 0; margin:0; display:grid; gap:6px; }
55
+ .dsh-wt-test { display:grid; grid-template-columns:auto minmax(0, 1fr); gap:7px; align-items:start; }
56
+ .dsh-wt-test-state { color:var(--wt-muted); font-size:11px; text-transform:uppercase; padding-top:2px; }
57
+ .dsh-wt-test-command { overflow-wrap:anywhere; }
58
+ .dsh-wt-retain { position:relative; }
59
+ .dsh-wt-retain[open] > .dsh-wt-summary { margin-bottom:7px; }
60
+ .dsh-wt-retain-actions { display:flex; gap:6px; flex-wrap:wrap; }
61
+ .dsh-wt-visually-hidden { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
62
+ .dsh-wt-pre-session { position:relative; display:inline-flex; align-items:center; min-width:0; }
63
+ .dsh-wt-pre-session-switch { display:inline-flex; align-items:center; gap:6px; min-height:28px; padding:3px 7px; border:0; border-radius:7px; background:transparent; color:inherit; font:inherit; font-size:12px; font-weight:600; cursor:pointer; white-space:nowrap; transition:background .15s ease, opacity .15s ease; }
64
+ .dsh-wt-pre-session-switch:hover:not(:disabled) { background:color-mix(in srgb, currentColor 7%, transparent); }
65
+ .dsh-wt-pre-session-switch:focus-visible { outline:2px solid #5a8dee; outline-offset:1px; }
66
+ .dsh-wt-pre-session-switch:disabled { cursor:default; opacity:.72; }
67
+ .dsh-wt-pre-session-check { display:inline-grid; place-items:center; width:14px; height:14px; border:1px solid color-mix(in srgb, currentColor 42%, transparent); border-radius:3px; background:color-mix(in srgb, currentColor 3%, transparent); font-size:10px; line-height:1; }
68
+ .dsh-wt-pre-session-switch[aria-checked="true"] .dsh-wt-pre-session-check { border-color:#2f8f64; background:#2f8f64; color:white; }
69
+ .dsh-wt-pre-session-state { padding:2px 6px; border-radius:999px; background:color-mix(in srgb, currentColor 7%, transparent); color:color-mix(in srgb, currentColor 60%, transparent); font-size:10px; font-weight:650; }
70
+ .dsh-wt-pre-session[data-state="preparing"] .dsh-wt-pre-session-state { color:#b46a13; }
71
+ .dsh-wt-pre-session[data-state="error"] .dsh-wt-pre-session-state { color:#bd3b3b; }
72
+ .dsh-wt-pre-session-error { position:absolute; left:0; bottom:calc(100% + 7px); z-index:20; width:max-content; max-width:min(360px, 75vw); padding:7px 9px; border:1px solid color-mix(in srgb, #bd3b3b 35%, transparent); border-radius:8px; background:color-mix(in srgb, Canvas 96%, #bd3b3b 4%); color:#bd3b3b; font-size:11px; font-weight:500; line-height:1.4; white-space:normal; box-shadow:0 8px 24px color-mix(in srgb, black 14%, transparent); }
73
+
74
+ .dsh-wt-pre-session-note { margin:0; color:color-mix(in srgb, currentColor 62%, transparent); font-size:12px; line-height:1.5; }
75
+ @media (max-width: 560px) { .dsh-wt-grid { grid-template-columns:1fr; gap:3px; } .dsh-wt-label { margin-top:4px; } .dsh-wt-pre-session-state { display:none; } }
76
+ ${REVIEW_CONSOLE_STYLES}
77
+ `;
78
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0EvC,qBAAqB;CACtB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { WorktreeConsoleAdapter } from '../../console-contract.js';
2
+ export interface TargetStatusActionProps {
3
+ sessionId: string;
4
+ adapter: WorktreeConsoleAdapter;
5
+ }
6
+ /** Read-only Session Target capsule. The Harness header slot exposes no public view-switch action. */
7
+ export declare function TargetStatusAction({ sessionId, adapter }: TargetStatusActionProps): import("react").JSX.Element;