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.
- package/CHANGELOG.md +59 -0
- package/LICENSE +21 -21
- package/README.md +115 -43
- package/README.zh.md +115 -41
- package/cordis.patch.yml +7 -7
- package/lib/adapters/registry.js +40 -0
- package/lib/adapters/registry.js.map +1 -1
- package/lib/adapters/safe-file.js +34 -4
- package/lib/adapters/safe-file.js.map +1 -1
- package/lib/client/WorktreeCreateRow.d.ts +7 -0
- package/lib/client/WorktreeCreateRow.js +26 -0
- package/lib/client/WorktreeCreateRow.js.map +1 -0
- package/lib/client/WorktreeReviewRow.d.ts +11 -0
- package/lib/client/WorktreeReviewRow.js +67 -0
- package/lib/client/WorktreeReviewRow.js.map +1 -0
- package/lib/client/actions.d.ts +86 -0
- package/lib/client/actions.js +35 -0
- package/lib/client/actions.js.map +1 -0
- package/lib/client/console-remote/adapter.d.ts +3 -0
- package/lib/client/console-remote/adapter.js +59 -0
- package/lib/client/console-remote/adapter.js.map +1 -0
- package/lib/client/console-remote/index.d.ts +18 -0
- package/lib/client/console-remote/index.js +17 -0
- package/lib/client/console-remote/index.js.map +1 -0
- package/lib/client/index.d.ts +17 -0
- package/lib/client/index.js +44 -0
- package/lib/client/index.js.map +1 -0
- package/lib/client/model.d.ts +68 -0
- package/lib/client/model.js +127 -0
- package/lib/client/model.js.map +1 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.d.ts +16 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.js +128 -0
- package/lib/client/pre-session/PreSessionWorktreeToggle.js.map +1 -0
- package/lib/client/pre-session/controller.d.ts +42 -0
- package/lib/client/pre-session/controller.js +149 -0
- package/lib/client/pre-session/controller.js.map +1 -0
- package/lib/client/pre-session/index.d.ts +15 -0
- package/lib/client/pre-session/index.js +16 -0
- package/lib/client/pre-session/index.js.map +1 -0
- package/lib/client/review-console/ReviewActions.d.ts +15 -0
- package/lib/client/review-console/ReviewActions.js +219 -0
- package/lib/client/review-console/ReviewActions.js.map +1 -0
- package/lib/client/review-console/WorktreeReviewPanel.d.ts +20 -0
- package/lib/client/review-console/WorktreeReviewPanel.js +75 -0
- package/lib/client/review-console/WorktreeReviewPanel.js.map +1 -0
- package/lib/client/review-console/index.d.ts +8 -0
- package/lib/client/review-console/index.js +22 -0
- package/lib/client/review-console/index.js.map +1 -0
- package/lib/client/review-console/review-console.styles.d.ts +1 -0
- package/lib/client/review-console/review-console.styles.js +81 -0
- package/lib/client/review-console/review-console.styles.js.map +1 -0
- package/lib/client/review-console/status-events.d.ts +3 -0
- package/lib/client/review-console/status-events.js +6 -0
- package/lib/client/review-console/status-events.js.map +1 -0
- package/lib/client/styles.d.ts +1 -0
- package/lib/client/styles.js +78 -0
- package/lib/client/styles.js.map +1 -0
- package/lib/client/target-console/TargetStatusAction.d.ts +7 -0
- package/lib/client/target-console/TargetStatusAction.js +46 -0
- package/lib/client/target-console/TargetStatusAction.js.map +1 -0
- package/lib/client/target-console/WorktreeConsoleView.d.ts +9 -0
- package/lib/client/target-console/WorktreeConsoleView.js +362 -0
- package/lib/client/target-console/WorktreeConsoleView.js.map +1 -0
- package/lib/client/target-console/WorktreeReviewStatus.d.ts +9 -0
- package/lib/client/target-console/WorktreeReviewStatus.js +91 -0
- package/lib/client/target-console/WorktreeReviewStatus.js.map +1 -0
- package/lib/client/target-console/index.d.ts +14 -0
- package/lib/client/target-console/index.js +23 -0
- package/lib/client/target-console/index.js.map +1 -0
- package/lib/client/target-console/target-console.styles.d.ts +1 -0
- package/lib/client/target-console/target-console.styles.js +130 -0
- package/lib/client/target-console/target-console.styles.js.map +1 -0
- package/lib/client.js +6813 -0
- package/lib/commands.d.ts +2 -4
- package/lib/commands.js +54 -28
- package/lib/commands.js.map +1 -1
- package/lib/console-contract.d.ts +236 -0
- package/lib/console-contract.js +86 -0
- package/lib/console-contract.js.map +1 -0
- package/lib/console-host/control-plane.d.ts +29 -0
- package/lib/console-host/control-plane.js +443 -0
- package/lib/console-host/control-plane.js.map +1 -0
- package/lib/console-host/errors.d.ts +6 -0
- package/lib/console-host/errors.js +31 -0
- package/lib/console-host/errors.js.map +1 -0
- package/lib/console-host/projection.d.ts +12 -0
- package/lib/console-host/projection.js +131 -0
- package/lib/console-host/projection.js.map +1 -0
- package/lib/console-host/review-diff.d.ts +18 -0
- package/lib/console-host/review-diff.js +176 -0
- package/lib/console-host/review-diff.js.map +1 -0
- package/lib/console-host/service.d.ts +24 -0
- package/lib/console-host/service.js +131 -0
- package/lib/console-host/service.js.map +1 -0
- package/lib/console-remote/descriptors.d.ts +3 -0
- package/lib/console-remote/descriptors.js +96 -0
- package/lib/console-remote/descriptors.js.map +1 -0
- package/lib/console-remote/remote.d.ts +27 -0
- package/lib/console-remote/remote.js +4 -0
- package/lib/console-remote/remote.js.map +1 -0
- package/lib/console-remote/schemas.d.ts +29 -0
- package/lib/console-remote/schemas.js +143 -0
- package/lib/console-remote/schemas.js.map +1 -0
- package/lib/console-remote/typert.d.ts +3 -0
- package/lib/console-remote/typert.js +14 -0
- package/lib/console-remote/typert.js.map +1 -0
- package/lib/index.d.ts +22 -6
- package/lib/index.js +28 -10
- package/lib/index.js.map +1 -1
- package/lib/managed-worktree-path.d.ts +14 -13
- package/lib/managed-worktree-path.js +32 -22
- package/lib/managed-worktree-path.js.map +1 -1
- package/lib/ports.d.ts +37 -1
- package/lib/session-checkout-apply.d.ts +54 -1
- package/lib/session-checkout-apply.js +318 -28
- package/lib/session-checkout-apply.js.map +1 -1
- package/lib/session-checkout-module.js +853 -33
- package/lib/session-checkout-module.js.map +1 -1
- package/lib/session-target-context.d.ts +6 -0
- package/lib/session-target-context.js +16 -0
- package/lib/session-target-context.js.map +1 -0
- package/lib/tools.d.ts +5 -6
- package/lib/tools.js +43 -233
- package/lib/tools.js.map +1 -1
- package/lib/types.d.ts +57 -11
- package/lib/types.js +6 -6
- package/lib/types.js.map +1 -1
- package/package.json +116 -69
- package/scripts/check-publish.mjs +193 -0
- package/scripts/clean-lib.mjs +7 -0
- package/scripts/dev-dsh-lib.mjs +453 -0
- package/scripts/dev-dsh.mjs +89 -0
- 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,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;
|