dsh-edge 0.9.0 → 0.10.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/THIRD_PARTY_NOTICES.md +1318 -1075
- package/dist/assets/index-Df-65__b.js +110 -0
- package/dist/assets/index-b24khbeK.css +1 -0
- package/dist/assets/langs/{php-DDkx9sim.js → php-DJl5gRdb.js} +2 -2
- package/dist/assets/langs/{ruby-DCxyoPen.js → ruby-5eNB0pDK.js} +2 -2
- package/dist/assets/vendor-BNsW4eBh.css +1 -0
- package/dist/assets/vendor-CCJJTK99.js +411 -0
- package/dist/index.html +8 -8
- package/dist/plugins/@deepseek-ai/dsh-api-gateway/client.js +1513 -77
- package/dist/plugins/@deepseek-ai/dsh-api-remotes/client.js +3608 -757
- package/dist/plugins/@deepseek-ai/dsh-api-session-controller/client.js +2777 -0
- package/dist/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js +415 -0
- package/dist/plugins/@deepseek-ai/dsh-client-connection/client.js +1975 -7466
- package/dist/plugins/@deepseek-ai/dsh-client-locale/client.js +225 -76
- package/dist/plugins/@deepseek-ai/dsh-client-modules/client.js +67 -15
- package/dist/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js +270 -460
- package/dist/plugins/@deepseek-ai/dsh-client-ui-approval/client.js +292 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js +42 -17
- package/dist/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js +7 -9
- package/dist/plugins/@deepseek-ai/dsh-client-ui-chat/client.js +8177 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-commands/client.js +22 -10
- package/dist/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js +14950 -8910
- package/dist/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js +161 -137
- package/dist/plugins/@deepseek-ai/dsh-client-ui-goal/client.js +6 -7
- package/dist/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js +268 -40
- package/dist/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js +1 -1
- package/dist/plugins/@deepseek-ai/dsh-client-ui-layout/client.js +45 -11
- package/dist/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js +30 -58
- package/dist/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js +188 -89
- package/dist/plugins/@deepseek-ai/dsh-client-ui-permission-presets/client.js +105 -75
- package/dist/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js +650 -188
- package/dist/plugins/@deepseek-ai/dsh-client-ui-schedule/client.js +307 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-session/client.js +340 -0
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings/client.js +57 -50
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js +134 -69
- package/dist/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js +575 -442
- package/dist/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js +24 -11
- package/dist/plugins/@deepseek-ai/dsh-client-ui-skill/client.js +13 -9
- package/dist/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js +44 -20
- package/dist/plugins/@deepseek-ai/dsh-client-ui-theme/client.js +265 -94
- package/dist/plugins/@deepseek-ai/dsh-client-ui-tool/client.js +899 -433
- package/dist/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js +1472 -613
- package/dist/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js +249 -95
- package/dist/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js +5 -5
- package/dist/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js +425 -146
- package/dist/plugins/@deepseek-ai/dsh-typert-registry/client.js +29 -14
- package/dist/plugins/dsh-edge-client-ui/client.js +28 -26
- package/package.json +62 -58
- package/scripts/verify-packed.mjs +1 -1
- package/worker/direct/index.js +2866 -1466
- package/worker/isolated/index.js +2438 -1038
- package/dist/assets/index-C6eRlFa6.css +0 -1
- package/dist/assets/index-ClqxG24t.js +0 -96
- package/dist/assets/vendor-CjyC-hUb.css +0 -1
- package/dist/assets/vendor-D22_Mp1f.js +0 -411
- package/dist/plugins/@deepseek-ai/dsh-client-runtime/client.js +0 -10574
|
@@ -4,25 +4,19 @@ window.__ModuleLoader__.load({
|
|
|
4
4
|
var module = { exports: {} };
|
|
5
5
|
var exports = module.exports;
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
7
|
+
let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
|
|
7
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
9
|
let react = require("react");
|
|
9
10
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
10
|
-
//#region ../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
|
|
11
|
-
function r(e) {
|
|
12
|
-
var t, f, n = "";
|
|
13
|
-
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
14
|
-
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
15
|
-
var o = e.length;
|
|
16
|
-
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
17
|
-
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
18
|
-
return n;
|
|
19
|
-
}
|
|
20
|
-
function clsx() {
|
|
21
|
-
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
22
|
-
return n;
|
|
23
|
-
}
|
|
24
|
-
//#endregion
|
|
25
11
|
//#region lib/types/client/contract/slots.js
|
|
12
|
+
function settlePendingComposer(settle, failureMessage) {
|
|
13
|
+
try {
|
|
14
|
+
settle();
|
|
15
|
+
return Promise.resolve();
|
|
16
|
+
} catch (error) {
|
|
17
|
+
return Promise.reject(error instanceof Error ? error : new Error(failureMessage, { cause: error }));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
26
20
|
/**
|
|
27
21
|
* Narrow a request to a renderable plan review, or return undefined to leave it
|
|
28
22
|
* to the generic question flow.
|
|
@@ -60,59 +54,158 @@ window.__ModuleLoader__.load({
|
|
|
60
54
|
...decline === void 0 ? {} : { decline }
|
|
61
55
|
};
|
|
62
56
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
57
|
+
let nextQuestionKey = 0;
|
|
58
|
+
/** Create a wire-preserved user-question rejection. */
|
|
59
|
+
function questionError(message, code) {
|
|
60
|
+
const error = new Error(message);
|
|
61
|
+
error.name = "UserQuestionError";
|
|
62
|
+
error.code = code;
|
|
63
|
+
return error;
|
|
64
|
+
}
|
|
65
|
+
/** One answerable Client presentation of a pending Host waterfall. */
|
|
70
66
|
var PendingQuestion = class {
|
|
71
|
-
|
|
67
|
+
sessionId;
|
|
68
|
+
/** Presentation discriminator used by Session pending-interaction consumers. */
|
|
69
|
+
kind;
|
|
70
|
+
/** Opaque render identity and request key for the Session-scoped draft store. */
|
|
71
|
+
key;
|
|
72
|
+
/** The request's question list. */
|
|
73
|
+
questions;
|
|
74
|
+
/** Result returned by the Remote Event listener to the Host waterfall. */
|
|
75
|
+
result;
|
|
76
|
+
#resolve;
|
|
77
|
+
#reject;
|
|
78
|
+
#signal;
|
|
79
|
+
#onAbort;
|
|
80
|
+
#delegated = Symbol("pending question delegated");
|
|
81
|
+
#settled = false;
|
|
72
82
|
/**
|
|
73
|
-
* @param
|
|
83
|
+
* @param sessionId - Agent/Session identity owning the scoped request.
|
|
84
|
+
* @param questions - complete question batch.
|
|
85
|
+
* @param signal - Host request and delivery lifetime.
|
|
74
86
|
*/
|
|
75
|
-
constructor(
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
constructor(sessionId, questions, signal) {
|
|
88
|
+
this.sessionId = sessionId;
|
|
89
|
+
nextQuestionKey += 1;
|
|
90
|
+
this.key = `question:${String(nextQuestionKey)}`;
|
|
91
|
+
this.questions = questions;
|
|
92
|
+
this.kind = planReviewOf(questions) === void 0 ? "question" : "plan-review";
|
|
93
|
+
const completion = Promise.withResolvers();
|
|
94
|
+
this.result = completion.promise;
|
|
95
|
+
this.#resolve = completion.resolve;
|
|
96
|
+
this.#reject = completion.reject;
|
|
97
|
+
this.#signal = signal;
|
|
98
|
+
if (signal === void 0) {
|
|
99
|
+
this.#onAbort = void 0;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const onAbort = () => {
|
|
103
|
+
this.abort(questionError("ask_user_question was aborted before the user answered", "ASK_ABORTED"));
|
|
104
|
+
};
|
|
105
|
+
this.#onAbort = onAbort;
|
|
106
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
107
|
+
if (signal.aborted) onAbort();
|
|
85
108
|
}
|
|
86
109
|
/**
|
|
87
|
-
*
|
|
110
|
+
* Resolve the Host waterfall with the whole answer batch.
|
|
88
111
|
* @param answer - complete structured answer batch.
|
|
89
112
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
113
|
+
answer(answer) {
|
|
114
|
+
return settlePendingComposer(() => {
|
|
115
|
+
this.finish(() => {
|
|
116
|
+
this.#resolve(answer);
|
|
117
|
+
});
|
|
118
|
+
}, "pending question settlement failed");
|
|
119
|
+
}
|
|
120
|
+
/** Delegate an unanswered request to the next waterfall listener. */
|
|
121
|
+
delegate() {
|
|
122
|
+
if (this.#settled) return;
|
|
123
|
+
this.finish(() => {
|
|
124
|
+
this.#reject(this.#delegated);
|
|
97
125
|
});
|
|
98
|
-
if (!receipt.accepted) throw new Error(`question response rejected: ${receipt.reason}`);
|
|
99
126
|
}
|
|
100
|
-
/**
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
127
|
+
/**
|
|
128
|
+
* Test whether a rejection requests waterfall delegation.
|
|
129
|
+
* @param reason - rejection received from {@link PendingQuestion.result}.
|
|
130
|
+
* @returns whether {@link PendingQuestion.delegate} produced it.
|
|
131
|
+
*/
|
|
132
|
+
isDelegation(reason) {
|
|
133
|
+
return reason === this.#delegated;
|
|
134
|
+
}
|
|
135
|
+
/** Reject the Host waterfall because the user closed the question. */
|
|
136
|
+
cancel() {
|
|
137
|
+
return settlePendingComposer(() => {
|
|
138
|
+
this.finish(() => {
|
|
139
|
+
this.#reject(questionError("the user cancelled ask_user_question", "ASK_CANCELLED"));
|
|
140
|
+
});
|
|
141
|
+
}, "pending question cancellation failed");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* End an unanswered presentation when its transport, scope, or plugin lifetime ends.
|
|
145
|
+
* @param reason - rejection exposed to the waiting Remote Event listener.
|
|
146
|
+
*/
|
|
147
|
+
abort(reason) {
|
|
148
|
+
if (this.#settled) return;
|
|
149
|
+
this.finish(() => {
|
|
150
|
+
this.#reject(reason);
|
|
109
151
|
});
|
|
110
|
-
|
|
152
|
+
}
|
|
153
|
+
finish(settle) {
|
|
154
|
+
if (this.#settled) throw new Error(`pending question ${this.key} is already settled`);
|
|
155
|
+
this.#settled = true;
|
|
156
|
+
if (this.#signal !== void 0 && this.#onAbort !== void 0) this.#signal.removeEventListener("abort", this.#onAbort);
|
|
157
|
+
settle();
|
|
111
158
|
}
|
|
112
159
|
};
|
|
113
160
|
//#endregion
|
|
161
|
+
//#region lib/types/client/draft-store.js
|
|
162
|
+
/**
|
|
163
|
+
* Session-scoped draft state for the generic question composer. The Slot
|
|
164
|
+
* registry owns store instances; this module exports only the factory so a
|
|
165
|
+
* plugin reload cannot reuse a module-global handle.
|
|
166
|
+
*/
|
|
167
|
+
const emptyProgress = () => ({
|
|
168
|
+
index: 0,
|
|
169
|
+
drafts: []
|
|
170
|
+
});
|
|
171
|
+
/**
|
|
172
|
+
* Declare the question composer's transient Session store.
|
|
173
|
+
* @returns a non-persisted store handle whose instance is owned by the Slot registry.
|
|
174
|
+
*/
|
|
175
|
+
function createQuestionDraftStore() {
|
|
176
|
+
return (0, _deepseek_ai_dsh_client_store.defineStore)({
|
|
177
|
+
init: () => ({ progress: emptyProgress() }),
|
|
178
|
+
actions: {
|
|
179
|
+
replace: (draft, requestKey, progress) => {
|
|
180
|
+
draft.requestKey = requestKey;
|
|
181
|
+
draft.progress = progress;
|
|
182
|
+
},
|
|
183
|
+
clear: (draft, requestKey) => {
|
|
184
|
+
if (draft.requestKey !== requestKey) return;
|
|
185
|
+
delete draft.requestKey;
|
|
186
|
+
draft.progress = emptyProgress();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
//#region ../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
|
|
193
|
+
function r(e) {
|
|
194
|
+
var t, f, n = "";
|
|
195
|
+
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
196
|
+
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
197
|
+
var o = e.length;
|
|
198
|
+
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
199
|
+
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
200
|
+
return n;
|
|
201
|
+
}
|
|
202
|
+
function clsx() {
|
|
203
|
+
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
204
|
+
return n;
|
|
205
|
+
}
|
|
206
|
+
//#endregion
|
|
114
207
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-user-questions/src/client/PlanReviewPanel.module.css.mjs
|
|
115
|
-
const css$1 = ".LVzXQa_frame{padding:6px calc(var(--dsh-composer-side-clearance) + 16px) 10px;justify-content:center;display:flex}.LVzXQa_card{width:100%;max-width:var(--dsh-chat-content-width);border:1px solid var(--dsw-alias-state-warn-secondary);background:var(--dsw-specific-input-major);max-height:min(60vh,520px);box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:20px;flex-direction:column;display:flex;overflow:hidden}.LVzXQa_card,.LVzXQa_card *{box-sizing:border-box}.LVzXQa_strip{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-primary);flex-shrink:0;align-items:center;gap:8px;padding:10px 16px;font-size:13px;line-height:18px;display:flex}.LVzXQa_dot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;width:8px;height:8px}.LVzXQa_body{overscroll-behavior:contain;flex:auto;min-height:0;padding:12px 16px 4px;font-size:14px;line-height:22px;overflow-y:auto}.LVzXQa_footer{flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px 12px;display:flex}.LVzXQa_feedback{min-height:16px;color:var(--dsw-alias-state-error-primary);font-size:11px;line-height:16px}.LVzXQa_actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.LVzXQa_discuss{color:var(--dsw-alias-label-secondary);gap:6px}.LVzXQa_discuss:hover:not(:disabled){color:var(--dsw-alias-label-primary)}@media (width<=720px){.LVzXQa_card{border-radius:16px}.LVzXQa_body{padding:10px 12px 4px}.LVzXQa_footer{align-items:flex-end;padding:8px 12px 10px}}";
|
|
208
|
+
const css$1 = ".LVzXQa_frame{padding:6px calc(var(--dsh-composer-side-clearance) + 16px) 10px;justify-content:center;display:flex}.LVzXQa_card{width:100%;max-width:var(--dsh-chat-content-width);border:1px solid var(--dsw-alias-state-warn-secondary);background:var(--dsw-specific-input-major);max-height:min(60vh,520px);box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:20px;flex-direction:column;display:flex;overflow:hidden}.LVzXQa_card,.LVzXQa_card *{box-sizing:border-box}.LVzXQa_strip{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-primary);flex-shrink:0;align-items:center;gap:8px;padding:10px 16px;font-size:13px;line-height:18px;display:flex}.LVzXQa_dot{corner-shape:round;background:var(--dsw-alias-state-warn-primary);border-radius:50%;width:8px;height:8px}.LVzXQa_body{overscroll-behavior:contain;flex:auto;min-height:0;padding:12px 16px 4px;font-size:14px;line-height:22px;overflow-y:auto}.LVzXQa_footer{flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 16px 12px;display:flex}.LVzXQa_feedback{min-height:16px;color:var(--dsw-alias-state-error-primary);font-size:11px;line-height:16px}.LVzXQa_actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.LVzXQa_discuss{color:var(--dsw-alias-label-secondary);gap:6px}.LVzXQa_discuss:hover:not(:disabled){color:var(--dsw-alias-label-primary)}@media (width<=720px){.LVzXQa_card{border-radius:16px}.LVzXQa_body{padding:10px 12px 4px}.LVzXQa_footer{align-items:flex-end;padding:8px 12px 10px}}";
|
|
116
209
|
const tagId$1 = "@deepseek-ai/dsh-client-ui-user-questions/PlanReviewPanel.module.css";
|
|
117
210
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
118
211
|
const tag = document.createElement("style");
|
|
@@ -151,6 +244,13 @@ window.__ModuleLoader__.load({
|
|
|
151
244
|
* @returns The plan-review takeover for this request.
|
|
152
245
|
*/
|
|
153
246
|
function PlanReviewPanel({ pending, review, t }) {
|
|
247
|
+
const markdownLabels = (0, react.useMemo)(() => ({
|
|
248
|
+
code: {
|
|
249
|
+
copyLabel: t("copy"),
|
|
250
|
+
copiedLabel: t("copied")
|
|
251
|
+
},
|
|
252
|
+
footnotes: t("markdown.footnotes")
|
|
253
|
+
}), [t]);
|
|
154
254
|
const [busy, setBusy] = (0, react.useState)(false);
|
|
155
255
|
const [error, setError] = (0, react.useState)(null);
|
|
156
256
|
const settle = (send) => {
|
|
@@ -182,7 +282,10 @@ window.__ModuleLoader__.load({
|
|
|
182
282
|
(0, react_jsx_runtime.jsx)("div", {
|
|
183
283
|
className: PlanReviewPanel_module_css_default.body,
|
|
184
284
|
"data-plan-review-scroll": true,
|
|
185
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
|
|
285
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
|
|
286
|
+
text: review.plan,
|
|
287
|
+
labels: markdownLabels
|
|
288
|
+
})
|
|
186
289
|
}),
|
|
187
290
|
(0, react_jsx_runtime.jsxs)("div", {
|
|
188
291
|
className: PlanReviewPanel_module_css_default.footer,
|
|
@@ -230,7 +333,7 @@ window.__ModuleLoader__.load({
|
|
|
230
333
|
}
|
|
231
334
|
//#endregion
|
|
232
335
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-user-questions/src/client/QuestionComposer.module.css.mjs
|
|
233
|
-
const css = ".Mbwy4a_frame{padding:6px calc(var(--dsh-composer-side-clearance) + 16px) 10px;justify-content:center;display:flex}.Mbwy4a_card{width:100%;max-width:var(--dsh-chat-content-width)
|
|
336
|
+
const css = ".Mbwy4a_frame{padding:6px calc(var(--dsh-composer-side-clearance) + 16px) 10px;justify-content:center;display:flex}.Mbwy4a_card{width:100%;max-width:var(--dsh-chat-content-width);--dsw-elevation-stroke-color:var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);max-height:min(60vh,520px);box-shadow:var(--dsw-elevation-panel);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;border-radius:20px;flex-direction:column;padding:0 0 10px;display:flex;overflow:hidden}.Mbwy4a_card,.Mbwy4a_card *{box-sizing:border-box}.Mbwy4a_cardMinimized{max-height:none}.Mbwy4a_cardMinimized .Mbwy4a_header{padding-bottom:14px}.Mbwy4a_headerActions{flex-shrink:0;align-items:center;gap:4px;display:flex}.Mbwy4a_header{flex-shrink:0;justify-content:space-between;align-items:flex-start;gap:16px;padding:20px 16px 0 24px;display:flex}.Mbwy4a_headingBlock{min-width:0}.Mbwy4a_eyebrow{color:var(--dsw-alias-label-tertiary);margin-bottom:5px;font-size:11px;line-height:16px}.Mbwy4a_title{margin:0;font-size:16px;font-weight:500;line-height:22px}.Mbwy4a_detail{margin:0 2px 8px}.Mbwy4a_footerActions{flex-shrink:0;align-items:center;gap:12px;display:flex}.Mbwy4a_pager{flex-shrink:0;align-items:center;gap:6px;display:flex}.Mbwy4a_progress{color:var(--dsw-alias-label-secondary);white-space:nowrap;word-spacing:-2px;padding:0 4px;font-size:14px;font-weight:500;line-height:24px}.Mbwy4a_iconButton{corner-shape:round;width:24px;height:24px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;place-items:center;padding:0;display:grid}.Mbwy4a_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.Mbwy4a_iconButton:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}.Mbwy4a_body{overscroll-behavior:contain;flex-direction:column;flex:auto;min-height:0;display:flex;overflow-y:auto}.Mbwy4a_options{flex-direction:column;gap:1px;margin:8px 0 0;padding:4px 12px;display:flex}.Mbwy4a_option{width:100%;min-height:40px;color:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:12px;flex-shrink:0;align-items:flex-start;gap:8px;padding:8px 12px 8px 8px;transition:background-color .12s,border-color .12s;display:flex}.Mbwy4a_option:hover:not(:disabled),.Mbwy4a_optionSelected{background:var(--dsw-alias-interactive-bg-hover)}.Mbwy4a_optionSelected{border-color:var(--dsw-alias-border-l2)}.Mbwy4a_option:disabled{cursor:default}.Mbwy4a_number{background:var(--dsw-alias-bg-overlay);width:20px;height:20px;color:var(--dsw-alias-label-secondary);border-radius:6px;flex:0 0 20px;place-items:center;margin-top:2px;font-size:12px;font-weight:500;line-height:18px;display:grid}.Mbwy4a_checkbox{flex:0 0 20px;place-items:center;width:20px;height:20px;margin-top:2px;display:grid}.Mbwy4a_checkbox:before{content:\"\";border:.5px solid var(--dsw-alias-border-l4);border-radius:4px;grid-area:1/1;width:14px;height:14px;transition:background-color .12s,border-color .12s}.Mbwy4a_checkbox>svg{grid-area:1/1}.Mbwy4a_checkboxChecked{color:var(--dsw-alias-label-primary-foreground)}.Mbwy4a_checkboxChecked:before{border-color:var(--dsw-alias-label-primary);background:var(--dsw-alias-label-primary)}.Mbwy4a_optionCopy{flex:1;min-width:0}.Mbwy4a_optionLine{flex-wrap:wrap;align-items:baseline;gap:2px 6px;display:flex}.Mbwy4a_optionLabel{font-size:14px;font-weight:500;line-height:24px}.Mbwy4a_badge{background:var(--dsw-specific-sidebar-nav-item-active-accent);color:var(--dsw-alias-button-info-fill);border-radius:6px;padding:0 4px;font-size:11px;font-weight:600;line-height:18px}.Mbwy4a_description{color:var(--dsw-alias-label-tertiary);font-size:14px;font-weight:400;line-height:24px}.Mbwy4a_customRow{border:1px solid #0000;border-radius:12px;flex-shrink:0;align-items:flex-start;gap:8px;width:100%;min-height:40px;padding:8px 12px 8px 8px;transition:background-color .12s,border-color .12s;display:flex}.Mbwy4a_customRow:hover,.Mbwy4a_customRow:focus-within,.Mbwy4a_customRowActive{background:var(--dsw-alias-interactive-bg-hover)}.Mbwy4a_customRow:focus-within,.Mbwy4a_customRowActive{border-color:var(--dsw-alias-border-l2)}.Mbwy4a_field{--dsh-answer-field-padding:0;min-width:0;display:grid}.Mbwy4a_field>*{min-width:0;padding:var(--dsh-answer-field-padding);font:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;grid-area:1/1;font-size:14px;line-height:24px}.Mbwy4a_fieldMirror{box-sizing:content-box;visibility:hidden;max-height:144px;overflow:hidden}.Mbwy4a_fieldInput{resize:none;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;overflow-y:auto}.Mbwy4a_fieldInput::placeholder{color:var(--dsw-alias-label-caption)}.Mbwy4a_customInline{flex:1}.Mbwy4a_customBlock{border:.5px solid var(--dsw-alias-border-l4);background:var(--dsw-alias-bg-module-platform);--dsh-answer-field-padding:8px 12px;border-radius:10px;flex-shrink:0;min-height:64px;margin:0 12px}.Mbwy4a_customBlock:focus-within{border-color:var(--dsw-alias-state-business-primary)}.Mbwy4a_footer{flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;margin-top:12px;padding:0 10px 0 18px;display:flex}.Mbwy4a_feedback{min-height:16px;color:var(--dsw-alias-state-error-primary);text-align:right;flex:1;font-size:11px;line-height:16px}@media (width<=720px){.Mbwy4a_card{border-radius:16px}.Mbwy4a_header{padding:10px 12px 0 18px}.Mbwy4a_options{padding:4px 8px}.Mbwy4a_title{font-size:15px;line-height:21px}.Mbwy4a_option,.Mbwy4a_customRow{padding:8px 6px}.Mbwy4a_footer{align-items:flex-end;padding:0 10px}.Mbwy4a_footerActions{flex-shrink:0}}@media (prefers-reduced-motion:reduce){.Mbwy4a_option,.Mbwy4a_customRow{transition:none}}";
|
|
234
337
|
const tagId = "@deepseek-ai/dsh-client-ui-user-questions/QuestionComposer.module.css";
|
|
235
338
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
236
339
|
const tag = document.createElement("style");
|
|
@@ -309,7 +412,7 @@ window.__ModuleLoader__.load({
|
|
|
309
412
|
* Mirror and textarea MUST share font, line-height, padding and wrapping rules
|
|
310
413
|
* or the two heights diverge.
|
|
311
414
|
*
|
|
312
|
-
* @param props -
|
|
415
|
+
* @param props - visual variant, draft text, and the field's event handlers.
|
|
313
416
|
* @returns The mirrored auto-growing field.
|
|
314
417
|
*/
|
|
315
418
|
function AnswerField(props) {
|
|
@@ -333,38 +436,51 @@ window.__ModuleLoader__.load({
|
|
|
333
436
|
});
|
|
334
437
|
}
|
|
335
438
|
/**
|
|
336
|
-
* Composer takeover
|
|
337
|
-
*
|
|
439
|
+
* Composer takeover router. Generic-question drafts live in this entry's
|
|
440
|
+
* Session-scoped Slot store, keyed by the pending carrier, so a strict Session
|
|
441
|
+
* entry remount restores the same request without exposing it to another one.
|
|
338
442
|
*
|
|
339
|
-
* One takeover, two
|
|
340
|
-
* package renders
|
|
443
|
+
* One takeover, two presentations: a request that declares a presentation intent this
|
|
444
|
+
* package renders uses that presentation (a plan review is one decision over one
|
|
341
445
|
* plan, not a question set), and every other request takes the generic flow.
|
|
342
446
|
* The routing lives here, at the one entry that owns the composer seat, so
|
|
343
|
-
* neither
|
|
447
|
+
* neither presentation can claim a request the other is already rendering.
|
|
344
448
|
*
|
|
345
449
|
* @param props - the selector-matched pending question carrier plus the framework standard kit.
|
|
346
450
|
* @returns The question flow, or the intent's own surface, for this request.
|
|
347
451
|
*/
|
|
348
452
|
function QuestionComposer(props) {
|
|
349
|
-
const question =
|
|
453
|
+
const question = props.matched;
|
|
350
454
|
const review = (0, react.useMemo)(() => planReviewOf(question.questions), [question]);
|
|
351
455
|
return review === void 0 ? (0, react_jsx_runtime.jsx)(QuestionFlow, {
|
|
352
456
|
pending: question,
|
|
353
|
-
t: props.t
|
|
457
|
+
t: props.t,
|
|
458
|
+
useStore: props.useStore,
|
|
459
|
+
actions: props.actions
|
|
354
460
|
}, question.key) : (0, react_jsx_runtime.jsx)(PlanReviewPanel, {
|
|
355
461
|
pending: question,
|
|
356
462
|
review,
|
|
357
463
|
t: props.t
|
|
358
464
|
}, question.key);
|
|
359
465
|
}
|
|
360
|
-
function QuestionFlow({ pending, t }) {
|
|
466
|
+
function QuestionFlow({ pending, t, useStore, actions }) {
|
|
361
467
|
const questions = pending.questions;
|
|
362
|
-
const
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
468
|
+
const markdownLabels = (0, react.useMemo)(() => ({
|
|
469
|
+
code: {
|
|
470
|
+
copyLabel: t("copy"),
|
|
471
|
+
copiedLabel: t("copied")
|
|
472
|
+
},
|
|
473
|
+
footnotes: t("markdown.footnotes")
|
|
474
|
+
}), [t]);
|
|
475
|
+
const initialProgress = (0, react.useMemo)(() => ({
|
|
476
|
+
index: 0,
|
|
477
|
+
drafts: questions.map(() => ({
|
|
478
|
+
selected: [],
|
|
479
|
+
custom: "",
|
|
480
|
+
skipped: false
|
|
481
|
+
}))
|
|
482
|
+
}), [questions]);
|
|
483
|
+
const { index, drafts } = useStore((state) => state.requestKey === pending.key && state.progress.drafts.length === questions.length ? state.progress : void 0) ?? initialProgress;
|
|
368
484
|
const [busy, setBusy] = (0, react.useState)(null);
|
|
369
485
|
const [error, setError] = (0, react.useState)(null);
|
|
370
486
|
const [minimized, setMinimized] = (0, react.useState)(false);
|
|
@@ -372,16 +488,24 @@ window.__ModuleLoader__.load({
|
|
|
372
488
|
const question = questions[index];
|
|
373
489
|
const draft = drafts[index];
|
|
374
490
|
const hasOptions = (question.options?.length ?? 0) > 0;
|
|
491
|
+
const replaceProgress = (nextIndex, nextDrafts) => {
|
|
492
|
+
actions.replace(pending.key, {
|
|
493
|
+
index: nextIndex,
|
|
494
|
+
drafts: nextDrafts
|
|
495
|
+
});
|
|
496
|
+
};
|
|
375
497
|
const cancelFlow = () => {
|
|
376
498
|
setBusy("cancel");
|
|
377
499
|
setError(null);
|
|
378
|
-
pending.cancel().
|
|
500
|
+
pending.cancel().then(() => {
|
|
501
|
+
actions.clear(pending.key);
|
|
502
|
+
}).catch((cause) => {
|
|
379
503
|
setBusy(null);
|
|
380
504
|
setError({ text: cause instanceof Error ? cause.message : String(cause) });
|
|
381
505
|
});
|
|
382
506
|
};
|
|
383
|
-
const updateDraft = (update) => {
|
|
384
|
-
|
|
507
|
+
const updateDraft = (update, nextIndex = index) => {
|
|
508
|
+
replaceProgress(nextIndex, drafts.map((item, itemIndex) => itemIndex === index ? update(item) : item));
|
|
385
509
|
setError(null);
|
|
386
510
|
};
|
|
387
511
|
const choose = (label) => {
|
|
@@ -399,15 +523,14 @@ window.__ModuleLoader__.load({
|
|
|
399
523
|
custom: "",
|
|
400
524
|
skipped: false
|
|
401
525
|
};
|
|
402
|
-
});
|
|
403
|
-
if (question.multiSelect !== true && index < questions.length - 1) setIndex((current) => current + 1);
|
|
526
|
+
}, question.multiSelect !== true && index < questions.length - 1 ? index + 1 : index);
|
|
404
527
|
};
|
|
405
528
|
const answered = (item) => item.selected.length > 0 || item.custom.trim() !== "";
|
|
406
529
|
const completed = (item) => answered(item) || item.skipped;
|
|
407
530
|
const submitDrafts = (values) => {
|
|
408
531
|
const missing = values.findIndex((item) => !completed(item));
|
|
409
532
|
if (missing >= 0) {
|
|
410
|
-
|
|
533
|
+
replaceProgress(missing, values);
|
|
411
534
|
setError({ key: "error.incomplete" });
|
|
412
535
|
return;
|
|
413
536
|
}
|
|
@@ -426,7 +549,9 @@ window.__ModuleLoader__.load({
|
|
|
426
549
|
}) };
|
|
427
550
|
setBusy("answer");
|
|
428
551
|
setError(null);
|
|
429
|
-
pending.answer(answer).
|
|
552
|
+
pending.answer(answer).then(() => {
|
|
553
|
+
actions.clear(pending.key);
|
|
554
|
+
}).catch((cause) => {
|
|
430
555
|
setBusy(null);
|
|
431
556
|
setError({ text: cause instanceof Error ? cause.message : String(cause) });
|
|
432
557
|
});
|
|
@@ -437,7 +562,7 @@ window.__ModuleLoader__.load({
|
|
|
437
562
|
return;
|
|
438
563
|
}
|
|
439
564
|
if (index < questions.length - 1) {
|
|
440
|
-
|
|
565
|
+
replaceProgress(index + 1, drafts);
|
|
441
566
|
setError(null);
|
|
442
567
|
return;
|
|
443
568
|
}
|
|
@@ -463,12 +588,9 @@ window.__ModuleLoader__.load({
|
|
|
463
588
|
custom: "",
|
|
464
589
|
skipped: true
|
|
465
590
|
} : item);
|
|
466
|
-
|
|
591
|
+
replaceProgress(index < questions.length - 1 ? index + 1 : index, nextDrafts);
|
|
467
592
|
setError(null);
|
|
468
|
-
if (index < questions.length - 1)
|
|
469
|
-
setIndex((current) => current + 1);
|
|
470
|
-
return;
|
|
471
|
-
}
|
|
593
|
+
if (index < questions.length - 1) return;
|
|
472
594
|
submitDrafts(nextDrafts);
|
|
473
595
|
};
|
|
474
596
|
return (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -517,7 +639,10 @@ window.__ModuleLoader__.load({
|
|
|
517
639
|
"data-question-scroll": true,
|
|
518
640
|
children: [question.detail !== void 0 && (0, react_jsx_runtime.jsx)("div", {
|
|
519
641
|
className: QuestionComposer_module_css_default.detail,
|
|
520
|
-
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
|
|
642
|
+
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
|
|
643
|
+
text: question.detail,
|
|
644
|
+
labels: markdownLabels
|
|
645
|
+
})
|
|
521
646
|
}), (0, react_jsx_runtime.jsxs)("div", {
|
|
522
647
|
className: QuestionComposer_module_css_default.options,
|
|
523
648
|
role: question.multiSelect === true ? "group" : "radiogroup",
|
|
@@ -610,7 +735,7 @@ window.__ModuleLoader__.load({
|
|
|
610
735
|
"aria-label": t("nav.prev"),
|
|
611
736
|
disabled: index === 0 || busy !== null,
|
|
612
737
|
onClick: () => {
|
|
613
|
-
|
|
738
|
+
replaceProgress(index - 1, drafts);
|
|
614
739
|
setError(null);
|
|
615
740
|
},
|
|
616
741
|
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, {})
|
|
@@ -629,7 +754,7 @@ window.__ModuleLoader__.load({
|
|
|
629
754
|
"aria-label": t("nav.next"),
|
|
630
755
|
disabled: index === questions.length - 1 || busy !== null,
|
|
631
756
|
onClick: () => {
|
|
632
|
-
|
|
757
|
+
replaceProgress(index + 1, drafts);
|
|
633
758
|
setError(null);
|
|
634
759
|
},
|
|
635
760
|
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutline14, {})
|
|
@@ -703,11 +828,35 @@ window.__ModuleLoader__.load({
|
|
|
703
828
|
//#region lib/types/client/index.js
|
|
704
829
|
/** Dictionary namespace owned by this plugin. */
|
|
705
830
|
const NS = "question";
|
|
706
|
-
/** Required services:
|
|
707
|
-
const inject = [
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
831
|
+
/** Required services: Agent scopes, Remote Events, Session UI, Slot registry, and copy. */
|
|
832
|
+
const inject = [
|
|
833
|
+
"sessions",
|
|
834
|
+
"remote",
|
|
835
|
+
"uiSession",
|
|
836
|
+
"slots",
|
|
837
|
+
"locale"
|
|
838
|
+
];
|
|
839
|
+
/** Present one request until the user answers, cancels, or its lifetime ends. */
|
|
840
|
+
async function answerQuestion(ctx, owner, request, next, registerPendingInteraction) {
|
|
841
|
+
const sessionId = ctx.sessions.scopeOf(owner);
|
|
842
|
+
if (sessionId === void 0) return next();
|
|
843
|
+
const pending = new PendingQuestion(sessionId, request.questions, request.signal);
|
|
844
|
+
const completed = Promise.withResolvers();
|
|
845
|
+
const remove = registerPendingInteraction(pending, async () => {
|
|
846
|
+
pending.delegate();
|
|
847
|
+
await completed.promise;
|
|
848
|
+
});
|
|
849
|
+
try {
|
|
850
|
+
try {
|
|
851
|
+
return await pending.result;
|
|
852
|
+
} catch (error) {
|
|
853
|
+
if (pending.isDelegation(error)) return await next();
|
|
854
|
+
throw error;
|
|
855
|
+
}
|
|
856
|
+
} finally {
|
|
857
|
+
remove();
|
|
858
|
+
completed.resolve();
|
|
859
|
+
}
|
|
711
860
|
}
|
|
712
861
|
/**
|
|
713
862
|
* Client plugin body: register the `question` dictionaries and the question
|
|
@@ -720,14 +869,19 @@ window.__ModuleLoader__.load({
|
|
|
720
869
|
zh,
|
|
721
870
|
en
|
|
722
871
|
}), "ui-user-questions: dictionaries");
|
|
872
|
+
const questionDraftStore = createQuestionDraftStore();
|
|
873
|
+
const registerPendingInteraction = ctx.uiSession.registerPendingInteraction((pending) => pending.kind === "plan-review" ? 2 : 1);
|
|
723
874
|
ctx.slots.inject("conversation.composer", () => ctx.slots.register({
|
|
724
875
|
name: "conversation.composer",
|
|
725
|
-
select:
|
|
726
|
-
locale: NS
|
|
876
|
+
select: ({ pendingInteraction }) => pendingInteraction instanceof PendingQuestion ? pendingInteraction : null,
|
|
877
|
+
locale: NS,
|
|
878
|
+
store: questionDraftStore
|
|
727
879
|
}, QuestionComposer));
|
|
880
|
+
ctx.remote.$on("user-questions/request", function(request, next) {
|
|
881
|
+
return answerQuestion(ctx, this, request, next, registerPendingInteraction);
|
|
882
|
+
});
|
|
728
883
|
}
|
|
729
884
|
//#endregion
|
|
730
|
-
exports.PendingQuestion = PendingQuestion;
|
|
731
885
|
exports.apply = apply;
|
|
732
886
|
exports.inject = inject;
|
|
733
887
|
return module.exports;
|
|
@@ -7,9 +7,9 @@ window.__ModuleLoader__.load({
|
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
let react = require("react");
|
|
9
9
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
10
|
-
let
|
|
10
|
+
let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
|
|
11
11
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css.mjs
|
|
12
|
-
const css = ".DBuyfa_root{width:100%;min-width:0}.DBuyfa_runHeader{box-sizing:border-box;background:var(--dsw-alias-bg-module-platform);border-radius:8px;align-items:center;gap:6px;width:100%;min-width:0;height:32px;padding:0 8px;display:flex}.DBuyfa_runHeader:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.DBuyfa_runLeading{width:16px;height:16px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;margin-right:0;display:inline-flex}.DBuyfa_runTitle{max-width:42%;color:var(--dsw-alias-label-secondary);
|
|
12
|
+
const css = ".DBuyfa_root{width:100%;min-width:0}.DBuyfa_runHeader{box-sizing:border-box;background:var(--dsw-alias-bg-module-platform);border-radius:8px;align-items:center;gap:6px;width:100%;min-width:0;height:32px;padding:0 8px;display:flex}.DBuyfa_runHeader:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}.DBuyfa_runLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;margin-right:0;display:inline-flex}.DBuyfa_runTitle{max-width:42%;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size-secondary,13px);font-weight:510;line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:none;overflow:hidden}.DBuyfa_runSummary{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(18px + var(--dsh-content-font-delta-secondary,0px));text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.DBuyfa_statusTail{height:20px;color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;align-items:center;gap:4px;font-size:11px;font-weight:510;line-height:16px;display:inline-flex;overflow:hidden}.DBuyfa_phaseHeader{box-sizing:border-box;align-items:center;gap:6px;width:100%;min-width:0;height:32px;display:flex}.DBuyfa_phaseHeader:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px;border-radius:4px}.DBuyfa_phaseLeading{width:calc(16px + var(--dsh-content-font-delta,0px));height:calc(16px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:none;justify-content:center;align-items:center;margin-right:0;display:inline-flex}.DBuyfa_phaseTitle{min-width:0;max-width:42%;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:0 auto;overflow:hidden}.DBuyfa_phaseCount{min-width:0;color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.DBuyfa_phaseStatus{width:calc(132px + var(--dsh-content-font-delta-secondary,0px) * 10);color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));text-align:right;text-overflow:ellipsis;white-space:nowrap;flex:none;overflow:hidden}.DBuyfa_separator{corner-shape:round;background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:2px;height:2px}.DBuyfa_phaseList{flex-direction:column;gap:4px;min-width:0;padding:4px 0 0 16px;display:flex}.DBuyfa_phase{min-width:0}.DBuyfa_members{flex-direction:column;gap:2px;min-width:0;padding:0 0 0 16px;display:flex}.DBuyfa_memberRow,.DBuyfa_memberButton{width:100%;min-width:0;min-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-secondary);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;align-items:center;gap:12px;padding:0;display:flex}.DBuyfa_memberButton{cursor:pointer}.DBuyfa_memberButton .DBuyfa_memberLabel{color:var(--dsw-alias-state-business-primary);text-underline-position:from-font;text-decoration:underline}.DBuyfa_dotSlot{width:16px;height:calc(24px + var(--dsh-content-font-delta,0px));flex:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.DBuyfa_memberButton:focus-visible{outline:none}.DBuyfa_memberButton:focus-visible .DBuyfa_memberLabelWrap{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-1px}.DBuyfa_memberLabelWrap{min-width:0;height:calc(24px + var(--dsh-content-font-delta,0px));border-radius:4px;flex:1;align-items:center;padding:0 2px;display:flex;overflow:hidden}.DBuyfa_memberLabel{min-width:0;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size,14px);line-height:calc(24px + var(--dsh-content-font-delta,0px));text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.DBuyfa_memberStatus{width:64px;color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));text-align:right;text-overflow:ellipsis;white-space:nowrap;flex:none;overflow:hidden}.DBuyfa_empty{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));padding:0}@media (width<=560px){.DBuyfa_phaseList,.DBuyfa_members{padding-left:12px}}";
|
|
13
13
|
const tagId = "@deepseek-ai/dsh-client-ui-workflow-run/WorkflowRunPanel.module.css";
|
|
14
14
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
15
15
|
const tag = document.createElement("style");
|
|
@@ -311,7 +311,7 @@ window.__ModuleLoader__.load({
|
|
|
311
311
|
}));
|
|
312
312
|
const runContentRef = (0, react.useRef)(null);
|
|
313
313
|
const phaseContentRefs = (0, react.useRef)(/* @__PURE__ */ new Map());
|
|
314
|
-
const navigable = useSessions((sessions) => navigableMembers(sessions, node.data.phases, sessionId),
|
|
314
|
+
const navigable = useSessions((sessions) => navigableMembers(sessions, node.data.phases, sessionId), _deepseek_ai_dsh_client_store.shallowEqual);
|
|
315
315
|
(0, react.useLayoutEffect)(() => {
|
|
316
316
|
setDisclosures((current) => {
|
|
317
317
|
const phases = /* @__PURE__ */ new Map();
|
|
@@ -618,14 +618,14 @@ window.__ModuleLoader__.load({
|
|
|
618
618
|
/** Browser plugin for durable workflow-run Conversation Nodes. */
|
|
619
619
|
/** Required services for Definition, keyed renderer, navigation, and copy. */
|
|
620
620
|
const inject = [
|
|
621
|
-
"
|
|
621
|
+
"uiConversation",
|
|
622
622
|
"slots",
|
|
623
623
|
"sessions",
|
|
624
624
|
"locale"
|
|
625
625
|
];
|
|
626
626
|
/** Register the workflow Definition, dictionary, and keyed Chat renderer. */
|
|
627
627
|
function apply(ctx) {
|
|
628
|
-
ctx.
|
|
628
|
+
ctx.uiConversation.events.register(workflowRunDefinition);
|
|
629
629
|
ctx.effect(() => ctx.locale.register(NS, {
|
|
630
630
|
zh,
|
|
631
631
|
en
|