@max-null/dsh-node-appearance 0.5.0 → 0.7.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/lib/client.js CHANGED
@@ -31,6 +31,7 @@ window.__ModuleLoader__.load({
31
31
  command: "#f97316",
32
32
  thinking: "#c4b5fd",
33
33
  context: "#8a9bb5",
34
+ summary: "#94a3b8",
34
35
  steering: "#14b8a6",
35
36
  other: "#64748b"
36
37
  };
@@ -84,6 +85,30 @@ window.__ModuleLoader__.load({
84
85
  ask: ["ask_user_question"],
85
86
  other: []
86
87
  };
88
+ /**
89
+ * Process activity → the category whose color paints a collapsed group header.
90
+ *
91
+ * The mapping lands on categories the plugin already ships, so group headers
92
+ * reuse the configured palette and add no settings field. It is deliberately
93
+ * the same classification the expanded member rows get: `search` here means
94
+ * code search (`grep`/`glob`, a `file` category tool), not `web_search`.
95
+ */
96
+ const PROCESS_ACTIVITIES = {
97
+ thinking: "thinking",
98
+ read: "file",
99
+ readImage: "file",
100
+ search: "file",
101
+ edit: "file",
102
+ write: "file",
103
+ commands: "execute",
104
+ code: "execute",
105
+ webSearch: "search",
106
+ webFetch: "search",
107
+ subagents: "agent",
108
+ plan: "task",
109
+ questions: "ask",
110
+ tools: "other"
111
+ };
87
112
  /** Selector matching every tool row inside a tool-call node. */
88
113
  const TOOL_ROW = "[data-chat-flow-kind=\"tool-call\"] [data-tool]";
89
114
  /** The ToolRow root itself (carries data-variant; the wrapper callRow does not). */
@@ -97,9 +122,54 @@ window.__ModuleLoader__.load({
97
122
  /** Selector of a settled tool-result row (rc.8: tool results render as their own row). */
98
123
  const TOOL_RESULT_ROW = "[data-chat-flow-kind=\"tool-result\"]";
99
124
  /**
100
- * The rows that carry the accent paint: the ToolRow root (not its wrapper
125
+ * Selector of a **collapsed** Turn-level summary bar — the outermost fold
126
+ * ("已完成工作 · 用时 35 秒" / "深度求索中,用时 N"). One Turn's members sit
127
+ * under it, each painting itself.
128
+ *
129
+ * `data-open` is present exactly while those members are expanded, so
130
+ * `:not([data-open])` is the folded state. Both kernel 0.1.7-rc.2 and
131
+ * 0.2.0-rc.1 publish it on the same button; 0.2.0 moved the running label to
132
+ * `RunningStatus` (`data-chat-running`) but left this node's attributes alone.
133
+ *
134
+ * Deliberately NOT in {@link ACCENTED_ROWS}: the kernel renders this one as a
135
+ * full-width section divider (`padding: 0` over a bottom hairline), not as a
136
+ * block row. An inset rail lands flush against the label and reads as a stray
137
+ * vertical stroke, and the 3px `padding-left` that keeps the rail off the text
138
+ * pushes the whole bar out of line with every other row. It takes the accent on
139
+ * that existing hairline instead, plus the same 8% wash.
140
+ */
141
+ const TURN_SUMMARY = "[data-turn-process]:not([data-open])";
142
+ /**
143
+ * Selector of a collapsed step-process group header — the one-line summary the
144
+ * kernel folds a run of tool calls into ("已读取文件并执行了命令").
145
+ *
146
+ * Collapsed only: while the group is open its member rows carry their own
147
+ * category colors, and painting the header too would stack two colored layers.
148
+ * The `aria-expanded` attribute is the header button's own disclosure state.
149
+ *
150
+ * `activity` narrows the selector to one published value. Narrowing does NOT
151
+ * raise specificity: `[attr]` and `[attr="value"]` each count as exactly one
152
+ * attribute selector. The general form must therefore be declared first and the
153
+ * per-activity forms after it — `buildCss` does that, and the palette spec
154
+ * guards the order. Same mechanism, same trap, as the unlisted-tool fallback.
155
+ * @param activity - one published activity, or undefined for the general form.
156
+ * @returns a CSS attribute selector for the collapsed process-group header.
157
+ */
158
+ function collapsedProcessHeader(activity) {
159
+ return `[data-step-process] [data-process-activity${activity === void 0 ? "" : `="${activity}"`}][aria-expanded="false"]`;
160
+ }
161
+ /**
162
+ * The same header while expanded: no paint, and no `--ncolor-accent` read. It
163
+ * exists only to hold the paint rule's 3px `padding-left`, so opening a group
164
+ * does not shift its header sideways.
165
+ */
166
+ const PROCESS_HEADER_OPEN = "[data-step-process] [data-process-activity][aria-expanded=\"true\"]";
167
+ /**
168
+ * The rows that carry the accent rail + wash: the ToolRow root (not its wrapper
101
169
  * callRow — both carry data-tool, only the inner row carries data-variant),
102
- * command nodes, Think rows, injected-context rows, and tool-result rows.
170
+ * command nodes, Think rows, injected-context rows, tool-result rows, and a
171
+ * collapsed step-process group header. The collapsed Turn summary bar is
172
+ * deliberately absent — see {@link TURN_SUMMARY}.
103
173
  * User input rows are excluded — right-alignment already
104
174
  * distinguishes them (2026-08-20 用户反馈);steering rows 也走独立规则
105
175
  * (见 buildCss:在 userStack 层做 wash,不涂整行 rail)。
@@ -111,7 +181,8 @@ window.__ModuleLoader__.load({
111
181
  COMMAND_ROW,
112
182
  THINK_ROW,
113
183
  CONTEXT_ROW,
114
- TOOL_RESULT_ROW
184
+ TOOL_RESULT_ROW,
185
+ collapsedProcessHeader()
115
186
  ].join(",\n");
116
187
  /**
117
188
  * Accept a configured CSS color (hex, color functions) or reject it so an
@@ -167,10 +238,19 @@ window.__ModuleLoader__.load({
167
238
  lines.push(`${THINK_ROW} { --ncolor-accent: ${colors.thinking}; }`);
168
239
  lines.push(`${CONTEXT_ROW} { --ncolor-accent: ${colors.context}; }`);
169
240
  lines.push(`${TOOL_RESULT_ROW} { --ncolor-accent: ${colors.file}; }`);
241
+ lines.push(`${TURN_SUMMARY} { --ncolor-accent: ${colors.summary}; }`);
242
+ lines.push(`${collapsedProcessHeader()} { --ncolor-accent: ${colors.other}; }`);
243
+ for (const activity of Object.keys(PROCESS_ACTIVITIES)) lines.push(`${collapsedProcessHeader(activity)} { --ncolor-accent: ${colors[PROCESS_ACTIVITIES[activity]]}; }`);
170
244
  lines.push(`${ACCENTED_ROWS} {
171
245
  box-shadow: inset 3px 0 0 var(--ncolor-accent);
172
246
  background-color: color-mix(in srgb, var(--ncolor-accent) 8%, transparent);
173
247
  padding-left: 3px;
248
+ }`);
249
+ lines.push(`${collapsedProcessHeader()} { padding-left: 8px; }`);
250
+ lines.push(`${PROCESS_HEADER_OPEN} { padding-left: 8px; }`);
251
+ lines.push(`${TURN_SUMMARY} {
252
+ border-bottom-color: var(--ncolor-accent);
253
+ background-color: color-mix(in srgb, var(--ncolor-accent) 8%, transparent);
174
254
  }`);
175
255
  lines.push(`[data-chat-flow-kind="steering"] [data-actions-reveal] > :first-child {
176
256
  position: relative;
@@ -196,45 +276,45 @@ window.__ModuleLoader__.load({
196
276
  }
197
277
  //#endregion
198
278
  //#region \0dsh-css:H:\MaxNull\WorkStation\max-null-plugins\dsh-node-appearance\src\client\card.module.css.mjs
199
- const css$3 = ".CDqThG_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.CDqThG_card:hover{border-color:var(--dsw-alias-label-dimmed)}.CDqThG_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.CDqThG_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.CDqThG_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.CDqThG_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.CDqThG_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.CDqThG_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.CDqThG_chevronOpen{transform:rotate(180deg)}.CDqThG_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.CDqThG_readOnly,.CDqThG_statusLine{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.CDqThG_disabled{opacity:.55;pointer-events:none}.CDqThG_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:16px 0 4px;display:flex}.CDqThG_reset{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.CDqThG_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_resetConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.CDqThG_reset:disabled{opacity:.4;cursor:default}.CDqThG_reset:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.CDqThG_row{border-top:1px solid var(--dsw-alias-border-l2);align-items:center;gap:10px;margin-top:10px;padding:10px 0 4px;display:flex;position:relative}.CDqThG_row:first-child{border-top:none;margin-top:4px}.CDqThG_rowLabel{min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;flex:1;gap:2px;font-size:13px;font-weight:500;line-height:1.5;display:flex}.CDqThG_rowHint{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:1.5}.CDqThG_colorInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);cursor:pointer;border-radius:8px;flex:none;width:34px;height:28px;padding:2px}.CDqThG_colorValue{width:64px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:12px;line-height:1.5}.CDqThG_sectionTitle{color:var(--dsw-alias-label-primary);margin:14px 0 0;font-size:13px;font-weight:600;line-height:1.5}.CDqThG_toolName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;line-height:1.5;overflow:hidden}.CDqThG_removeButton{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 10px;font-size:12px;line-height:1.5}.CDqThG_removeButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_addRow{align-items:center;gap:8px;margin-top:10px;margin-bottom:12px;display:flex}.CDqThG_toolInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);min-width:0;height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 12px;font-size:13px;line-height:1.5}.CDqThG_toolInput:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.CDqThG_toolInput::placeholder{color:var(--dsw-alias-label-tertiary)}.CDqThG_addButton{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:5px 14px;font-size:13px;line-height:1.5}.CDqThG_addButton:disabled{opacity:.4;cursor:default}.CDqThG_switch{cursor:pointer;background:var(--dsw-alias-border-l4,#00000029);border:none;border-radius:11px;flex:none;width:40px;height:22px;padding:0;transition:background .15s}.CDqThG_switch.CDqThG_on{background:var(--dsw-alias-state-business-primary,#4fc3f7)}.CDqThG_knob{pointer-events:none;background:#fff;border-radius:8px;width:16px;height:16px;margin-left:2px;transition:margin-left .15s;display:block}.CDqThG_switch.CDqThG_on .CDqThG_knob{margin-left:22px}";
200
- const tagId$3 = "@max-null/dsh-node-appearance/card.module.css";
201
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
279
+ const css$4 = ".CDqThG_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.CDqThG_card:hover{border-color:var(--dsw-alias-label-dimmed)}.CDqThG_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.CDqThG_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.CDqThG_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.CDqThG_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.CDqThG_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.CDqThG_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.CDqThG_chevronOpen{transform:rotate(180deg)}.CDqThG_body{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.CDqThG_readOnly,.CDqThG_statusLine{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:1.5}.CDqThG_disabled{opacity:.55;pointer-events:none}.CDqThG_footer{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:16px 0 4px;display:flex}.CDqThG_reset{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.CDqThG_reset:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_resetConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.CDqThG_reset:disabled{opacity:.4;cursor:default}.CDqThG_reset:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.CDqThG_row{border-top:1px solid var(--dsw-alias-border-l2);align-items:center;gap:10px;margin-top:10px;padding:10px 0 4px;display:flex;position:relative}.CDqThG_row:first-child{border-top:none;margin-top:4px}.CDqThG_rowLabel{min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;flex:1;gap:2px;font-size:13px;font-weight:500;line-height:1.5;display:flex}.CDqThG_rowHint{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:1.5}.CDqThG_colorInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);cursor:pointer;border-radius:8px;flex:none;width:34px;height:28px;padding:2px}.CDqThG_colorValue{width:64px;color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:12px;line-height:1.5}.CDqThG_sectionTitle{color:var(--dsw-alias-label-primary);margin:14px 0 0;font-size:13px;font-weight:600;line-height:1.5}.CDqThG_toolName{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;line-height:1.5;overflow:hidden}.CDqThG_removeButton{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 10px;font-size:12px;line-height:1.5}.CDqThG_removeButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.CDqThG_addRow{align-items:center;gap:8px;margin-top:10px;margin-bottom:12px;display:flex}.CDqThG_toolInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);min-width:0;height:34px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:0 12px;font-size:13px;line-height:1.5}.CDqThG_toolInput:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.CDqThG_toolInput::placeholder{color:var(--dsw-alias-label-tertiary)}.CDqThG_addButton{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:5px 14px;font-size:13px;line-height:1.5}.CDqThG_addButton:disabled{opacity:.4;cursor:default}.CDqThG_switch{cursor:pointer;background:var(--dsw-alias-border-l4,#00000029);border:none;border-radius:11px;flex:none;width:40px;height:22px;padding:0;transition:background .15s}.CDqThG_switch.CDqThG_on{background:var(--dsw-alias-state-business-primary,#4fc3f7)}.CDqThG_knob{pointer-events:none;background:#fff;border-radius:8px;width:16px;height:16px;margin-left:2px;transition:margin-left .15s;display:block}.CDqThG_switch.CDqThG_on .CDqThG_knob{margin-left:22px}";
280
+ const tagId$4 = "@max-null/dsh-node-appearance/card.module.css";
281
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
202
282
  const tag = document.createElement("style");
203
283
  tag.dataset.plugin = "@max-null/dsh-node-appearance";
204
- tag.dataset.pluginCss = tagId$3;
205
- tag.textContent = css$3;
284
+ tag.dataset.pluginCss = tagId$4;
285
+ tag.textContent = css$4;
206
286
  document.head.appendChild(tag);
207
287
  }
208
288
  var card_module_css_default = {
209
- "toolInput": "CDqThG_toolInput",
210
- "knob": "CDqThG_knob",
211
- "disabled": "CDqThG_disabled",
212
- "header": "CDqThG_header",
213
- "headText": "CDqThG_headText",
214
- "colorValue": "CDqThG_colorValue",
215
- "rowHint": "CDqThG_rowHint",
216
- "sectionTitle": "CDqThG_sectionTitle",
217
- "rowLabel": "CDqThG_rowLabel",
218
- "switch": "CDqThG_switch",
289
+ "reset": "CDqThG_reset",
219
290
  "chevron": "CDqThG_chevron",
291
+ "removeButton": "CDqThG_removeButton",
220
292
  "readOnly": "CDqThG_readOnly",
221
- "description": "CDqThG_description",
222
- "on": "CDqThG_on",
223
- "toolName": "CDqThG_toolName",
224
- "reset": "CDqThG_reset",
225
- "resetConfirm": "CDqThG_resetConfirm",
293
+ "rowHint": "CDqThG_rowHint",
294
+ "disabled": "CDqThG_disabled",
295
+ "name": "CDqThG_name",
296
+ "knob": "CDqThG_knob",
297
+ "row": "CDqThG_row",
298
+ "chevronOpen": "CDqThG_chevronOpen",
299
+ "cardOpen": "CDqThG_cardOpen",
300
+ "rowLabel": "CDqThG_rowLabel",
226
301
  "body": "CDqThG_body",
302
+ "toolInput": "CDqThG_toolInput",
227
303
  "addRow": "CDqThG_addRow",
228
- "addButton": "CDqThG_addButton",
229
- "cardOpen": "CDqThG_cardOpen",
304
+ "card": "CDqThG_card",
305
+ "header": "CDqThG_header",
230
306
  "statusLine": "CDqThG_statusLine",
307
+ "footer": "CDqThG_footer",
308
+ "toolName": "CDqThG_toolName",
231
309
  "colorInput": "CDqThG_colorInput",
232
- "card": "CDqThG_card",
233
- "removeButton": "CDqThG_removeButton",
234
- "name": "CDqThG_name",
235
- "row": "CDqThG_row",
236
- "chevronOpen": "CDqThG_chevronOpen",
237
- "footer": "CDqThG_footer"
310
+ "switch": "CDqThG_switch",
311
+ "headText": "CDqThG_headText",
312
+ "resetConfirm": "CDqThG_resetConfirm",
313
+ "sectionTitle": "CDqThG_sectionTitle",
314
+ "addButton": "CDqThG_addButton",
315
+ "description": "CDqThG_description",
316
+ "on": "CDqThG_on",
317
+ "colorValue": "CDqThG_colorValue"
238
318
  };
239
319
  //#endregion
240
320
  //#region src/client/settings-card.tsx
@@ -263,6 +343,7 @@ window.__ModuleLoader__.load({
263
343
  command: "指令节点",
264
344
  thinking: "思考过程",
265
345
  context: "上下文注入",
346
+ summary: "工作摘要",
266
347
  steering: "模型引导",
267
348
  other: "其他工具"
268
349
  };
@@ -295,7 +376,7 @@ window.__ModuleLoader__.load({
295
376
  * @returns the card, matching the official plugin-card chrome.
296
377
  */
297
378
  function NodeAppearanceRow({ useNodeAppearance, apply, setShowThinking, setCategoryColor, setToolColor, removeToolColor }) {
298
- const [open, setOpen] = (0, react.useState)(false);
379
+ const [open, setOpen] = (0, react.useState)(true);
299
380
  const [confirmReset, setConfirmReset] = (0, react.useState)(false);
300
381
  const [resetting, setResetting] = (0, react.useState)(false);
301
382
  const [toolName, setToolName] = (0, react.useState)("");
@@ -347,7 +428,7 @@ window.__ModuleLoader__.load({
347
428
  className: card_module_css_default.description,
348
429
  children: COPY.description
349
430
  })]
350
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: card_module_css_default.chevron + (open ? " " + card_module_css_default.chevronOpen : "") })]
431
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, { className: card_module_css_default.chevron + (open ? " " + card_module_css_default.chevronOpen : "") })]
351
432
  }), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
352
433
  className: card_module_css_default.body,
353
434
  children: [
@@ -630,42 +711,42 @@ window.__ModuleLoader__.load({
630
711
  }
631
712
  //#endregion
632
713
  //#region \0dsh-css:H:\MaxNull\WorkStation\max-null-plugins\dsh-node-appearance\src\client\ask-card.module.css.mjs
633
- const css$2 = ".ylzLDa_root{--ask-accent:var(--ncolor-accent,#65a30d);flex-direction:column;display:flex}.ylzLDa_row{position:relative;overflow:hidden}.ylzLDa_root[data-state=running] .ylzLDa_row:after{content:\"\";background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite ylzLDa_ask-row-sweep;position:absolute;top:0;bottom:0;left:0}@keyframes ylzLDa_ask-row-sweep{0%{left:-300px}90%,to{left:100%}}.ylzLDa_leading{flex-shrink:0}.ylzLDa_chevron{color:var(--dsw-alias-label-secondary)}.ylzLDa_title{font-weight:400}.ylzLDa_sep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.ylzLDa_summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:auto;overflow:hidden}.ylzLDa_bodyWrap{flex-direction:column;display:flex}.ylzLDa_card{border:1px solid color-mix(in srgb, var(--ask-accent) 34%, transparent);background:color-mix(in srgb, var(--ask-accent) 6%, var(--dsw-alias-bg-base));border-radius:12px;flex-direction:column;gap:14px;margin:4px 0 4px 4px;padding:14px 16px;display:flex}.ylzLDa_item{flex-direction:column;gap:8px;min-width:0;display:flex}.ylzLDa_header{color:var(--ask-accent);font-size:var(--dsh-content-font-size-secondary,13px);font-weight:500;line-height:calc(20px + var(--dsh-content-font-delta,0px))}.ylzLDa_question{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_detail{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_verdict{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));margin:0}.ylzLDa_options{flex-direction:column;gap:6px;display:flex}.ylzLDa_option{border:1px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));border-radius:8px;align-items:flex-start;gap:8px;padding:9px 12px;display:flex}.ylzLDa_option[data-chosen]{border-color:var(--ask-accent);background:color-mix(in srgb, var(--ask-accent) 14%, transparent);color:var(--ask-accent);font-weight:500}.ylzLDa_marker{width:16px;height:calc(22px + var(--dsh-content-font-delta,0px));flex:none;justify-content:center;align-items:center;display:inline-flex}.ylzLDa_optionText{flex-direction:column;gap:2px;min-width:0;display:flex}.ylzLDa_label{overflow-wrap:anywhere}.ylzLDa_desc{color:inherit;opacity:.72;font-size:var(--dsh-content-font-size-secondary,13px);font-weight:400;line-height:calc(20px + var(--dsh-content-font-delta,0px));overflow-wrap:anywhere}.ylzLDa_answers{flex-direction:column;gap:2px;display:flex}.ylzLDa_answerLine{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_answersEmpty{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px))}.ylzLDa_fallback{white-space:pre-wrap;overflow-wrap:anywhere;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);margin:4px 0 4px 4px}.ylzLDa_inspectButton{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;border-radius:999px;align-self:flex-start;align-items:center;gap:4px;margin:4px 0 2px 4px;padding:2px 8px;font-size:11px;line-height:16px;transition:opacity .1s;display:inline-flex}.ylzLDa_root:hover .ylzLDa_inspectButton,.ylzLDa_inspectButton:focus-visible{opacity:1}.ylzLDa_inspectButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}";
634
- const tagId$2 = "@max-null/dsh-node-appearance/ask-card.module.css";
635
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
714
+ const css$3 = ".ylzLDa_root{--ask-accent:var(--ncolor-accent,#65a30d);flex-direction:column;display:flex}.ylzLDa_row{position:relative;overflow:hidden}.ylzLDa_root[data-state=running] .ylzLDa_row:after{content:\"\";background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite ylzLDa_ask-row-sweep;position:absolute;top:0;bottom:0;left:0}@keyframes ylzLDa_ask-row-sweep{0%{left:-300px}90%,to{left:100%}}.ylzLDa_leading{flex-shrink:0}.ylzLDa_chevron{color:var(--dsw-alias-label-secondary)}.ylzLDa_title{font-weight:400}.ylzLDa_sep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.ylzLDa_summary{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:auto;overflow:hidden}.ylzLDa_bodyWrap{flex-direction:column;display:flex}.ylzLDa_card{border:1px solid color-mix(in srgb, var(--ask-accent) 34%, transparent);background:color-mix(in srgb, var(--ask-accent) 6%, var(--dsw-alias-bg-base));border-radius:12px;flex-direction:column;gap:14px;margin:4px 0 4px 4px;padding:14px 16px;display:flex}.ylzLDa_item{flex-direction:column;gap:8px;min-width:0;display:flex}.ylzLDa_header{color:var(--ask-accent);font-size:var(--dsh-content-font-size-secondary,13px);font-weight:500;line-height:calc(20px + var(--dsh-content-font-delta,0px))}.ylzLDa_question{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_detail{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_verdict{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));margin:0}.ylzLDa_options{flex-direction:column;gap:6px;display:flex}.ylzLDa_option{border:1px solid var(--dsw-alias-border-l3);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));border-radius:8px;align-items:flex-start;gap:8px;padding:9px 12px;display:flex}.ylzLDa_option[data-chosen]{border-color:var(--ask-accent);background:color-mix(in srgb, var(--ask-accent) 14%, transparent);color:var(--ask-accent);font-weight:500}.ylzLDa_marker{width:16px;height:calc(22px + var(--dsh-content-font-delta,0px));flex:none;justify-content:center;align-items:center;display:inline-flex}.ylzLDa_optionText{flex-direction:column;gap:2px;min-width:0;display:flex}.ylzLDa_label{overflow-wrap:anywhere}.ylzLDa_desc{color:inherit;opacity:.72;font-size:var(--dsh-content-font-size-secondary,13px);font-weight:400;line-height:calc(20px + var(--dsh-content-font-delta,0px));overflow-wrap:anywhere}.ylzLDa_answers{flex-direction:column;gap:2px;display:flex}.ylzLDa_answerLine{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;overflow-wrap:anywhere}.ylzLDa_answersEmpty{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px))}.ylzLDa_fallback{white-space:pre-wrap;overflow-wrap:anywhere;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);margin:4px 0 4px 4px}.ylzLDa_inspectButton{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;border-radius:999px;align-self:flex-start;align-items:center;gap:4px;margin:4px 0 2px 4px;padding:2px 8px;font-size:11px;line-height:16px;transition:opacity .1s;display:inline-flex}.ylzLDa_root:hover .ylzLDa_inspectButton,.ylzLDa_inspectButton:focus-visible{opacity:1}.ylzLDa_inspectButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}";
715
+ const tagId$3 = "@max-null/dsh-node-appearance/ask-card.module.css";
716
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
636
717
  const tag = document.createElement("style");
637
718
  tag.dataset.plugin = "@max-null/dsh-node-appearance";
638
- tag.dataset.pluginCss = tagId$2;
639
- tag.textContent = css$2;
719
+ tag.dataset.pluginCss = tagId$3;
720
+ tag.textContent = css$3;
640
721
  document.head.appendChild(tag);
641
722
  }
642
723
  var ask_card_module_css_default = {
643
- "ask-row-sweep": "ylzLDa_ask-row-sweep",
724
+ "options": "ylzLDa_options",
725
+ "verdict": "ylzLDa_verdict",
726
+ "marker": "ylzLDa_marker",
727
+ "detail": "ylzLDa_detail",
644
728
  "answers": "ylzLDa_answers",
645
- "option": "ylzLDa_option",
646
- "root": "ylzLDa_root",
647
- "bodyWrap": "ylzLDa_bodyWrap",
648
- "answersEmpty": "ylzLDa_answersEmpty",
729
+ "chevron": "ylzLDa_chevron",
730
+ "card": "ylzLDa_card",
649
731
  "label": "ylzLDa_label",
732
+ "bodyWrap": "ylzLDa_bodyWrap",
733
+ "optionText": "ylzLDa_optionText",
734
+ "root": "ylzLDa_root",
735
+ "summary": "ylzLDa_summary",
650
736
  "header": "ylzLDa_header",
651
- "question": "ylzLDa_question",
652
- "row": "ylzLDa_row",
653
- "detail": "ylzLDa_detail",
654
- "verdict": "ylzLDa_verdict",
655
- "chevron": "ylzLDa_chevron",
656
- "options": "ylzLDa_options",
657
737
  "desc": "ylzLDa_desc",
658
- "fallback": "ylzLDa_fallback",
659
- "inspectButton": "ylzLDa_inspectButton",
660
- "card": "ylzLDa_card",
738
+ "row": "ylzLDa_row",
661
739
  "leading": "ylzLDa_leading",
662
- "marker": "ylzLDa_marker",
663
- "summary": "ylzLDa_summary",
740
+ "item": "ylzLDa_item",
664
741
  "title": "ylzLDa_title",
665
- "answerLine": "ylzLDa_answerLine",
666
742
  "sep": "ylzLDa_sep",
667
- "item": "ylzLDa_item",
668
- "optionText": "ylzLDa_optionText"
743
+ "question": "ylzLDa_question",
744
+ "answerLine": "ylzLDa_answerLine",
745
+ "option": "ylzLDa_option",
746
+ "fallback": "ylzLDa_fallback",
747
+ "inspectButton": "ylzLDa_inspectButton",
748
+ "ask-row-sweep": "ylzLDa_ask-row-sweep",
749
+ "answersEmpty": "ylzLDa_answersEmpty"
669
750
  };
670
751
  //#endregion
671
752
  //#region src/client/ask-card.tsx
@@ -704,7 +785,7 @@ window.__ModuleLoader__.load({
704
785
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
705
786
  className: ask_card_module_css_default.marker,
706
787
  "aria-hidden": "true",
707
- children: chosen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline14, {})
788
+ children: chosen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineMedium, {})
708
789
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
709
790
  className: ask_card_module_css_default.optionText,
710
791
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -780,7 +861,7 @@ window.__ModuleLoader__.load({
780
861
  const [expanded, setExpanded] = (0, react.useState)(false);
781
862
  const hasBody = model.questions.length > 0 || model.fallbackText !== null;
782
863
  const open = expanded && hasBody;
783
- const leading = model.state === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : model.state === "stopped" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "warning" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutline14, {});
864
+ const leading = model.state === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "error" }) : model.state === "stopped" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "warning" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQuestionOutlineMedium, {});
784
865
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
785
866
  className: ask_card_module_css_default.root,
786
867
  "data-variant": "others",
@@ -819,7 +900,7 @@ window.__ModuleLoader__.load({
819
900
  type: "button",
820
901
  className: ask_card_module_css_default.inspectButton,
821
902
  onClick: inspect,
822
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutline12, {}), t("row.inspect")]
903
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutlineMedium, {}), t("row.inspect")]
823
904
  })]
824
905
  })
825
906
  })
@@ -919,35 +1000,35 @@ window.__ModuleLoader__.load({
919
1000
  }
920
1001
  //#endregion
921
1002
  //#region \0dsh-css:H:\MaxNull\WorkStation\max-null-plugins\dsh-node-appearance\src\client\deliverable-row.module.css.mjs
922
- const css$1 = "._8xFzxq_root{--deliverable-accent:var(--ncolor-accent,#06b6d4);flex-direction:column;display:flex}._8xFzxq_row{position:relative;overflow:hidden}._8xFzxq_root[data-state=running] ._8xFzxq_row:after{content:\"\";background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite _8xFzxq_deliverable-row-sweep;position:absolute;top:0;bottom:0;left:0}@keyframes _8xFzxq_deliverable-row-sweep{0%{left:-300px}90%,to{left:100%}}._8xFzxq_leading{flex-shrink:0}._8xFzxq_chevron{color:var(--dsw-alias-label-secondary)}._8xFzxq_title{font-weight:400}._8xFzxq_sep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}._8xFzxq_summary{min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:auto;align-items:center;gap:8px;display:flex;overflow:hidden}._8xFzxq_state{color:var(--dsw-alias-label-secondary);flex:none}._8xFzxq_paths{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._8xFzxq_bodyWrap{flex-direction:column;padding:2px 0 2px 4px;display:flex}._8xFzxq_files{flex-direction:column;gap:4px;margin:4px 0 0;padding:0;list-style:none;display:flex}._8xFzxq_file{align-items:center;gap:8px;min-width:0;display:flex}._8xFzxq_ext{box-sizing:border-box;background:color-mix(in srgb, var(--deliverable-accent) 14%, transparent);width:38px;color:var(--deliverable-accent);letter-spacing:.04em;text-align:center;border-radius:4px;flex:none;padding:1px 4px;font-size:10px;font-weight:600;line-height:16px}._8xFzxq_name{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(20px + var(--dsh-content-font-delta,0px));overflow-wrap:anywhere;flex:none}._8xFzxq_path{text-overflow:ellipsis;white-space:nowrap;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,0px));flex:auto;overflow:hidden}._8xFzxq_meta{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));margin-top:10px}._8xFzxq_output{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;margin:8px 0 0;padding:12px;font-size:12px}._8xFzxq_inspectButton{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;border-radius:999px;align-self:flex-start;align-items:center;gap:4px;margin:8px 0 2px;padding:2px 8px;font-size:11px;line-height:16px;transition:opacity .1s;display:inline-flex}._8xFzxq_root:hover ._8xFzxq_inspectButton,._8xFzxq_inspectButton:focus-visible{opacity:1}._8xFzxq_inspectButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}";
923
- const tagId$1 = "@max-null/dsh-node-appearance/deliverable-row.module.css";
924
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
1003
+ const css$2 = "._8xFzxq_root{--deliverable-accent:var(--ncolor-accent,#06b6d4);flex-direction:column;display:flex}._8xFzxq_row{position:relative;overflow:hidden}._8xFzxq_root[data-state=running] ._8xFzxq_row:after{content:\"\";background:linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, transparent 100%);pointer-events:none;width:300px;animation:2.6s ease-out infinite _8xFzxq_deliverable-row-sweep;position:absolute;top:0;bottom:0;left:0}@keyframes _8xFzxq_deliverable-row-sweep{0%{left:-300px}90%,to{left:100%}}._8xFzxq_leading{flex-shrink:0}._8xFzxq_chevron{color:var(--dsw-alias-label-secondary)}._8xFzxq_title{font-weight:400}._8xFzxq_sep{background:var(--dsw-alias-label-caption);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}._8xFzxq_summary{min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-alias-label-tertiary);flex:auto;align-items:center;gap:8px;display:flex;overflow:hidden}._8xFzxq_state{color:var(--dsw-alias-label-secondary);flex:none}._8xFzxq_paths{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._8xFzxq_bodyWrap{flex-direction:column;padding:2px 0 2px 4px;display:flex}._8xFzxq_files{flex-direction:column;gap:4px;margin:4px 0 0;padding:0;list-style:none;display:flex}._8xFzxq_file{align-items:center;gap:8px;min-width:0;display:flex}._8xFzxq_ext{box-sizing:border-box;background:color-mix(in srgb, var(--deliverable-accent) 14%, transparent);width:38px;color:var(--deliverable-accent);letter-spacing:.04em;text-align:center;border-radius:4px;flex:none;padding:1px 4px;font-size:10px;font-weight:600;line-height:16px}._8xFzxq_name{color:var(--dsw-alias-label-primary);font-size:var(--dsh-content-font-size,14px);line-height:calc(20px + var(--dsh-content-font-delta,0px));overflow-wrap:anywhere;flex:none}._8xFzxq_path{text-overflow:ellipsis;white-space:nowrap;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,0px));flex:auto;overflow:hidden}._8xFzxq_meta{color:var(--dsw-alias-label-tertiary);font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta,0px));margin-top:10px}._8xFzxq_output{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;margin:8px 0 0;padding:12px;font-size:12px}._8xFzxq_inspectButton{border:.5px solid var(--dsw-alias-border-l3);corner-shape:round;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;border-radius:999px;align-self:flex-start;align-items:center;gap:4px;margin:8px 0 2px;padding:2px 8px;font-size:11px;line-height:16px;transition:opacity .1s;display:inline-flex}._8xFzxq_root:hover ._8xFzxq_inspectButton,._8xFzxq_inspectButton:focus-visible{opacity:1}._8xFzxq_inspectButton:hover{background:var(--dsw-alias-interactive-bg-hover-solid);color:var(--dsw-alias-label-primary)}";
1004
+ const tagId$2 = "@max-null/dsh-node-appearance/deliverable-row.module.css";
1005
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
925
1006
  const tag = document.createElement("style");
926
1007
  tag.dataset.plugin = "@max-null/dsh-node-appearance";
927
- tag.dataset.pluginCss = tagId$1;
928
- tag.textContent = css$1;
1008
+ tag.dataset.pluginCss = tagId$2;
1009
+ tag.textContent = css$2;
929
1010
  document.head.appendChild(tag);
930
1011
  }
931
1012
  var deliverable_row_module_css_default = {
932
- "name": "_8xFzxq_name",
933
- "title": "_8xFzxq_title",
934
- "state": "_8xFzxq_state",
935
- "row": "_8xFzxq_row",
936
1013
  "chevron": "_8xFzxq_chevron",
1014
+ "root": "_8xFzxq_root",
1015
+ "bodyWrap": "_8xFzxq_bodyWrap",
1016
+ "title": "_8xFzxq_title",
937
1017
  "output": "_8xFzxq_output",
938
- "deliverable-row-sweep": "_8xFzxq_deliverable-row-sweep",
939
- "leading": "_8xFzxq_leading",
940
- "path": "_8xFzxq_path",
941
- "meta": "_8xFzxq_meta",
942
- "paths": "_8xFzxq_paths",
943
1018
  "summary": "_8xFzxq_summary",
944
- "bodyWrap": "_8xFzxq_bodyWrap",
945
- "root": "_8xFzxq_root",
946
- "files": "_8xFzxq_files",
947
- "file": "_8xFzxq_file",
1019
+ "state": "_8xFzxq_state",
948
1020
  "ext": "_8xFzxq_ext",
1021
+ "name": "_8xFzxq_name",
1022
+ "meta": "_8xFzxq_meta",
949
1023
  "sep": "_8xFzxq_sep",
950
- "inspectButton": "_8xFzxq_inspectButton"
1024
+ "inspectButton": "_8xFzxq_inspectButton",
1025
+ "files": "_8xFzxq_files",
1026
+ "file": "_8xFzxq_file",
1027
+ "leading": "_8xFzxq_leading",
1028
+ "row": "_8xFzxq_row",
1029
+ "deliverable-row-sweep": "_8xFzxq_deliverable-row-sweep",
1030
+ "paths": "_8xFzxq_paths",
1031
+ "path": "_8xFzxq_path"
951
1032
  };
952
1033
  //#endregion
953
1034
  //#region src/client/deliverable-row.tsx
@@ -1065,7 +1146,7 @@ window.__ModuleLoader__.load({
1065
1146
  type: "button",
1066
1147
  className: deliverable_row_module_css_default.inspectButton,
1067
1148
  onClick: inspect,
1068
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutline12, {}), t("row.inspect")]
1149
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconInspectOutlineMedium, {}), t("row.inspect")]
1069
1150
  })
1070
1151
  ]
1071
1152
  })
@@ -1074,28 +1155,28 @@ window.__ModuleLoader__.load({
1074
1155
  }
1075
1156
  //#endregion
1076
1157
  //#region \0dsh-css:H:\MaxNull\WorkStation\max-null-plugins\dsh-node-appearance\src\client\goal-detail.module.css.mjs
1077
- const css = ".WyWU3a_root{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));border:.5px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-tip);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-top-color:#0000;border-radius:0 0 12px 12px;flex:none;margin:-6px auto 0;overflow:hidden}[data-goal-bar]>div:first-child{border-bottom-color:#0000;border-bottom-right-radius:0;border-bottom-left-radius:0}.WyWU3a_body{flex-direction:column;gap:8px;padding:6px 12px;display:flex}.WyWU3a_header{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:0;display:flex}.WyWU3a_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.WyWU3a_title{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.WyWU3a_summary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:13px;line-height:20px;overflow:hidden}.WyWU3a_chevron{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.WyWU3a_detail{flex-direction:column;gap:6px;max-height:180px;margin:0;display:flex;overflow-y:auto}.WyWU3a_row{grid-template-columns:max-content 1fr;align-items:baseline;column-gap:10px;margin:0;display:grid}.WyWU3a_key{color:var(--dsw-alias-label-caption);font-size:13px;line-height:20px}.WyWU3a_value{min-width:0;color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:20px}.WyWU3a_code{font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-caption);font-size:11px}.WyWU3a_value>.WyWU3a_code:not(:first-child){margin-left:8px}";
1078
- const tagId = "@max-null/dsh-node-appearance/goal-detail.module.css";
1079
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1158
+ const css$1 = ".WyWU3a_root{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));border:.5px solid var(--dsw-alias-border-l1);background:var(--dsw-specific-tip);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-top-color:#0000;border-radius:0 0 12px 12px;flex:none;margin:-6px auto 0;overflow:hidden}[data-goal-bar]>div:first-child{border-bottom-color:#0000;border-bottom-right-radius:0;border-bottom-left-radius:0}.WyWU3a_body{flex-direction:column;gap:8px;padding:6px 12px;display:flex}.WyWU3a_header{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:0;display:flex}.WyWU3a_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.WyWU3a_title{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.WyWU3a_summary{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:13px;line-height:20px;overflow:hidden}.WyWU3a_chevron{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.WyWU3a_detail{flex-direction:column;gap:6px;max-height:180px;margin:0;display:flex;overflow-y:auto}.WyWU3a_row{grid-template-columns:max-content 1fr;align-items:baseline;column-gap:10px;margin:0;display:grid}.WyWU3a_key{color:var(--dsw-alias-label-caption);font-size:13px;line-height:20px}.WyWU3a_value{min-width:0;color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:20px}.WyWU3a_code{font-family:var(--ds-font-family-code);color:var(--dsw-alias-label-caption);font-size:11px}.WyWU3a_value>.WyWU3a_code:not(:first-child){margin-left:8px}";
1159
+ const tagId$1 = "@max-null/dsh-node-appearance/goal-detail.module.css";
1160
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
1080
1161
  const tag = document.createElement("style");
1081
1162
  tag.dataset.plugin = "@max-null/dsh-node-appearance";
1082
- tag.dataset.pluginCss = tagId;
1083
- tag.textContent = css;
1163
+ tag.dataset.pluginCss = tagId$1;
1164
+ tag.textContent = css$1;
1084
1165
  document.head.appendChild(tag);
1085
1166
  }
1086
1167
  var goal_detail_module_css_default = {
1087
- "root": "WyWU3a_root",
1088
- "lead": "WyWU3a_lead",
1089
- "chevron": "WyWU3a_chevron",
1090
- "key": "WyWU3a_key",
1091
- "body": "WyWU3a_body",
1168
+ "row": "WyWU3a_row",
1092
1169
  "title": "WyWU3a_title",
1093
- "header": "WyWU3a_header",
1094
- "summary": "WyWU3a_summary",
1095
1170
  "value": "WyWU3a_value",
1096
- "row": "WyWU3a_row",
1171
+ "key": "WyWU3a_key",
1097
1172
  "code": "WyWU3a_code",
1098
- "detail": "WyWU3a_detail"
1173
+ "body": "WyWU3a_body",
1174
+ "lead": "WyWU3a_lead",
1175
+ "detail": "WyWU3a_detail",
1176
+ "chevron": "WyWU3a_chevron",
1177
+ "root": "WyWU3a_root",
1178
+ "header": "WyWU3a_header",
1179
+ "summary": "WyWU3a_summary"
1099
1180
  };
1100
1181
  //#endregion
1101
1182
  //#region src/client/goal-detail.tsx
@@ -1172,7 +1253,7 @@ window.__ModuleLoader__.load({
1172
1253
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1173
1254
  className: goal_detail_module_css_default.lead,
1174
1255
  "aria-hidden": true,
1175
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconGoalOutline16, { size: 14 })
1256
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconGoalOutlineMedium, { size: 14 })
1176
1257
  }),
1177
1258
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1178
1259
  className: goal_detail_module_css_default.title,
@@ -1185,7 +1266,7 @@ window.__ModuleLoader__.load({
1185
1266
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1186
1267
  className: goal_detail_module_css_default.chevron,
1187
1268
  "aria-hidden": true,
1188
- children: collapsed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutline14, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, {})
1269
+ children: collapsed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronUpOutlineMedium, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineMedium, {})
1189
1270
  })
1190
1271
  ]
1191
1272
  }), !collapsed && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
@@ -1219,15 +1300,411 @@ window.__ModuleLoader__.load({
1219
1300
  });
1220
1301
  }
1221
1302
  //#endregion
1303
+ //#region src/client/trigger-model.ts
1304
+ /**
1305
+ * 拆开内容块:文本与未知块各成一段。
1306
+ * @param content - 持久化的内容块数组。
1307
+ * @returns 分段结果;不是数组时返回 null(调用方走等价外壳)。
1308
+ */
1309
+ function contentRuns(content) {
1310
+ if (!Array.isArray(content)) return null;
1311
+ const runs = [];
1312
+ for (const block of content) {
1313
+ const text = textBlock(block);
1314
+ runs.push(text === null ? {
1315
+ kind: "block",
1316
+ block
1317
+ } : {
1318
+ kind: "text",
1319
+ text
1320
+ });
1321
+ }
1322
+ return runs;
1323
+ }
1324
+ /** 一个块是不是文本块;是则给出文本。 */
1325
+ function textBlock(block) {
1326
+ if (typeof block !== "object" || block === null) return null;
1327
+ const candidate = block;
1328
+ return candidate.type === "text" && typeof candidate.text === "string" ? candidate.text : null;
1329
+ }
1330
+ /**
1331
+ * 全部内容都是文本块时把它们拼起来。
1332
+ *
1333
+ * 目标轮次的提示词是**单个**文本块,所以拼起来就能直接拿去解析。出现任何
1334
+ * 非文本块即返回 null —— 那种内容本卡不负责解释,交给等价外壳按块渲染。
1335
+ * @param content - 持久化的内容块数组。
1336
+ * @returns 拼接后的文本,或 null。
1337
+ */
1338
+ function plainText(content) {
1339
+ const runs = contentRuns(content);
1340
+ if (runs === null) return null;
1341
+ let text = "";
1342
+ for (const run of runs) {
1343
+ if (run.kind !== "text") return null;
1344
+ text += run.text;
1345
+ }
1346
+ return text;
1347
+ }
1348
+ /** 记下的一段来源,读成对象。 */
1349
+ function sourceRecord(source) {
1350
+ return typeof source === "object" && source !== null ? source : {};
1351
+ }
1352
+ /** 读一个字符串字段,非字符串当空串。 */
1353
+ function textField(source, key) {
1354
+ const value = source[key];
1355
+ return typeof value === "string" ? value : "";
1356
+ }
1357
+ /**
1358
+ * 由来源标注判断该显示成什么 —— 逐条复刻官方 `turn-trigger.ts` 的 switch。
1359
+ *
1360
+ * 未识别的来源保留「收到执行请求」这一默认,**不假装知道**它的身份或结果
1361
+ * (官方注释:Custom sources remain visible without attributing unrecorded
1362
+ * identity or success)。
1363
+ * @param source - 持久化的来源标注。
1364
+ * @returns 标题 key 与图标。
1365
+ */
1366
+ function turnTriggerDetails(source) {
1367
+ const record = sourceRecord(source);
1368
+ switch (textField(record, "kind")) {
1369
+ case "goal": return {
1370
+ titleKey: "message.trigger.goal",
1371
+ icon: "goal"
1372
+ };
1373
+ case "agent-message": return {
1374
+ titleKey: "message.trigger.agent",
1375
+ icon: "agent"
1376
+ };
1377
+ case "team-message": return {
1378
+ titleKey: "message.trigger.team",
1379
+ icon: "team"
1380
+ };
1381
+ case "subagent-settled": return {
1382
+ titleKey: "message.trigger.subagent",
1383
+ icon: "subagent"
1384
+ };
1385
+ case "webhook": return textField(record, "provider") === "github" ? {
1386
+ titleKey: "message.trigger.github",
1387
+ icon: "github"
1388
+ } : {
1389
+ titleKey: "message.trigger.webhook",
1390
+ icon: "webhook"
1391
+ };
1392
+ case "schedule": return {
1393
+ titleKey: "message.trigger.schedule",
1394
+ icon: "schedule"
1395
+ };
1396
+ case "tool-jobs": return {
1397
+ titleKey: "message.trigger.job",
1398
+ icon: "job"
1399
+ };
1400
+ case "cordis-host-runner": return {
1401
+ titleKey: "message.trigger.plugin",
1402
+ icon: "plugin"
1403
+ };
1404
+ default: return {
1405
+ titleKey: "message.trigger.request",
1406
+ icon: "request"
1407
+ };
1408
+ }
1409
+ }
1410
+ /**
1411
+ * 目标轮次提示词的骨架。锚定整串:开头、`Objective:` 行、`Round:` 行、
1412
+ * 结尾的闭合标签缺一不可。
1413
+ *
1414
+ * `(\d+)\/(\d+)` 顺带挡住上限缺失的情形(内核在 `maxGoalRounds` 未设时会
1415
+ * 写出 `Round: 1/undefined`),那种文本会解析失败并整卡回退。
1416
+ */
1417
+ const GOAL_ROUND = /^<goal_round>\nObjective: (.*)\nRound: (\d+)\/(\d+)\n\n([\s\S]*)\n<\/goal_round>$/;
1418
+ /**
1419
+ * 解析一段目标轮次提示词;结构不符即整体放弃。
1420
+ * @param text - 内容拼接后的文本。
1421
+ * @returns 还原后的字段,或 null。
1422
+ */
1423
+ function parseGoalRound(text) {
1424
+ const matched = GOAL_ROUND.exec(text);
1425
+ if (matched === null) return null;
1426
+ const [, encoded, round, maxRounds, instruction] = matched;
1427
+ if (encoded === void 0 || round === void 0 || maxRounds === void 0 || instruction === void 0) return null;
1428
+ let objective;
1429
+ try {
1430
+ objective = JSON.parse(encoded);
1431
+ } catch {
1432
+ return null;
1433
+ }
1434
+ if (typeof objective !== "string") return null;
1435
+ return {
1436
+ objective,
1437
+ round: Number(round),
1438
+ maxRounds: Number(maxRounds),
1439
+ instruction
1440
+ };
1441
+ }
1442
+ /**
1443
+ * 来源里记录的轮次号。
1444
+ *
1445
+ * 它是**结构化事实**,比提示词文本可靠 —— 两者不一致时以它为准(解析成功但
1446
+ * 来源缺失的情况也存在,例如旧记录,那时回落到文本里的数字)。
1447
+ */
1448
+ function roundFromSource(source) {
1449
+ const record = sourceRecord(source);
1450
+ if (textField(record, "kind") !== "goal") return null;
1451
+ const round = record.round;
1452
+ return typeof round === "number" && Number.isInteger(round) && round > 0 ? round : null;
1453
+ }
1454
+ /**
1455
+ * 取一条消息的目标轮次,供卡片决定用哪种展开体。
1456
+ * @param node - 触发节点的时间、内容与来源。
1457
+ * @returns 字段齐备的目标轮次,或 null(调用方渲染等价外壳)。
1458
+ */
1459
+ function goalRoundOf(node) {
1460
+ const text = plainText(node.content);
1461
+ if (text === null) return null;
1462
+ const parsed = parseGoalRound(text);
1463
+ if (parsed === null) return null;
1464
+ const fromSource = roundFromSource(node.source);
1465
+ return fromSource === null ? parsed : {
1466
+ ...parsed,
1467
+ round: fromSource
1468
+ };
1469
+ }
1470
+ /** 两位补零。 */
1471
+ function pad2(value) {
1472
+ return String(value).padStart(2, "0");
1473
+ }
1474
+ /**
1475
+ * 紧凑的本地时间戳 —— 复刻 ui-chat 的 `formatMessageClock`。
1476
+ *
1477
+ * 跨插件不能 import 它的值(client bundle 的 purity gate 禁止 feature plugin
1478
+ * 之间做运行时 import),所以这份实现与它同源:同一天只给 `HH:mm`,同年补上
1479
+ * `clock.md` 的日期模板,跨年用 `clock.ymd`。日期模板仍从调用方的 locale
1480
+ * seat 取,插件不自带文案。
1481
+ * @param time - 记录时间(Unix epoch ms)。
1482
+ * @param t - 提供 `clock.md` / `clock.ymd` 模板的翻译席位。
1483
+ * @param now - 判定「今天 / 今年」的参照时刻。
1484
+ * @returns 与官方卡片一致的时钟串。
1485
+ */
1486
+ function formatClock(time, t, now = Date.now()) {
1487
+ const date = new Date(time);
1488
+ const reference = new Date(now);
1489
+ const clock = `${pad2(date.getHours())}:${pad2(date.getMinutes())}`;
1490
+ if (date.getFullYear() === reference.getFullYear() && date.getMonth() === reference.getMonth() && date.getDate() === reference.getDate()) return clock;
1491
+ const params = {
1492
+ y: date.getFullYear(),
1493
+ m: date.getMonth() + 1,
1494
+ d: date.getDate()
1495
+ };
1496
+ return `${date.getFullYear() === reference.getFullYear() ? t("clock.md", params) : t("clock.ymd", params)} ${clock}`;
1497
+ }
1498
+ //#endregion
1499
+ //#region \0dsh-css:H:\MaxNull\WorkStation\max-null-plugins\dsh-node-appearance\src\client\trigger-card.module.css.mjs
1500
+ const css = ".MMrk2q_root{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-markdown-code-block);min-width:0;transition:background-color .1s}.MMrk2q_root:hover{background:var(--dsw-alias-interactive-bg-hover)}.MMrk2q_header{width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:12px 16px;display:flex}.MMrk2q_icon{color:var(--dsw-alias-label-tertiary);flex:none;display:inline-flex}.MMrk2q_title{font:var(--dsw-font-xs-13);flex:none}.MMrk2q_round{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:1px 7px}.MMrk2q_time{color:var(--dsw-alias-label-caption);font:var(--dsw-font-xxs-12);flex:none;margin-left:auto}.MMrk2q_chevron,.MMrk2q_openChevron{color:var(--dsw-alias-label-tertiary);flex:none}.MMrk2q_openChevron{transform:rotate(180deg)}.MMrk2q_body{padding:0 16px 12px 40px}.MMrk2q_explanation{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);margin:8px 0}.MMrk2q_content{white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;font:var(--dsw-font-xxs-12);overflow:auto}.MMrk2q_text{white-space:pre-wrap;overflow-wrap:anywhere;font:var(--dsw-font-xxs-12);margin:0}.MMrk2q_detail{margin-top:10px}.MMrk2q_pair{margin:0}.MMrk2q_key{color:var(--dsw-alias-label-caption);font:var(--dsw-font-xxs-12);margin:0 0 3px}.MMrk2q_value{color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-13);overflow-wrap:anywhere;margin:0 0 12px;line-height:1.6}.MMrk2q_instruction{background:var(--dsw-alias-markdown-code-block);border-radius:6px}.MMrk2q_instructionSummary{color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;padding:6px 10px}.MMrk2q_instructionText{max-height:200px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxs-12);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:0 10px 8px;overflow:auto}@media (prefers-reduced-motion:reduce){.MMrk2q_root{transition:none}}";
1501
+ const tagId = "@max-null/dsh-node-appearance/trigger-card.module.css";
1502
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1503
+ const tag = document.createElement("style");
1504
+ tag.dataset.plugin = "@max-null/dsh-node-appearance";
1505
+ tag.dataset.pluginCss = tagId;
1506
+ tag.textContent = css;
1507
+ document.head.appendChild(tag);
1508
+ }
1509
+ var trigger_card_module_css_default = {
1510
+ "root": "MMrk2q_root",
1511
+ "instruction": "MMrk2q_instruction",
1512
+ "explanation": "MMrk2q_explanation",
1513
+ "header": "MMrk2q_header",
1514
+ "chevron": "MMrk2q_chevron",
1515
+ "key": "MMrk2q_key",
1516
+ "icon": "MMrk2q_icon",
1517
+ "title": "MMrk2q_title",
1518
+ "round": "MMrk2q_round",
1519
+ "detail": "MMrk2q_detail",
1520
+ "value": "MMrk2q_value",
1521
+ "content": "MMrk2q_content",
1522
+ "time": "MMrk2q_time",
1523
+ "openChevron": "MMrk2q_openChevron",
1524
+ "body": "MMrk2q_body",
1525
+ "instructionSummary": "MMrk2q_instructionSummary",
1526
+ "instructionText": "MMrk2q_instructionText",
1527
+ "text": "MMrk2q_text",
1528
+ "pair": "MMrk2q_pair"
1529
+ };
1530
+ //#endregion
1531
+ //#region src/client/trigger-card.tsx
1532
+ /**
1533
+ * 触发通知卡:接管 `conversation.chat.node` 的 `turn-trigger` key。
1534
+ *
1535
+ * 官方 `TurnTriggerNodeView` 是「图标 + 标题 + 时间 + chevron」的折叠条,
1536
+ * 展开体把模型看到的那段文本原样交给 `NoticeBody`(→ `<pre>`)。对目标轮次
1537
+ * 来说,那段文本是**提示词原文**(`<goal_round>` / `Objective:` / `Round:`),
1538
+ * 骨架对人不构成信息却占满展开区。
1539
+ *
1540
+ * 本组件保留官方全部信息与交互(折叠、时间、explanation、原文可查),另加:
1541
+ * ① 折叠头补**轮次徽标**(收起态即可读到走到第几轮);
1542
+ * ② 目标轮次的展开体改为字段化(目标 / 模型收到的指令),标签与转义消失;
1543
+ * ③ 其余触发来源按官方同构渲染(见下)。
1544
+ *
1545
+ * ## 接管是全 key 的
1546
+ *
1547
+ * `conversation.chat.node` 是 keyed cell,`priority` 最低者渲染 —— 注册
1548
+ * `turn-trigger` 的 `priority: -1` 会让**全部**触发来源都走本组件,这正是
1549
+ * 官方 `turnTriggerDetails` 被逐条复刻到 `trigger-model.ts` 的原因。判别只
1550
+ * 认 `source.kind`,不认标题文本。
1551
+ *
1552
+ * 代价:官方对该面板的后续改进会被遮蔽(0.2.0 就把 `schedule` 的图标从
1553
+ * `IconAlarmClockOutlineRegular` 换成了 `IconClockOutlineRegular`),今后要
1554
+ * 手动跟进。与 `ask_user_question`、`present` 两处接管同一性质。
1555
+ *
1556
+ * 全部派生在 `trigger-model.ts` 里,本文件只做 JSX。
1557
+ */
1558
+ /** 与官方 `TurnTriggerNodeView` 逐项相同的图标映射(`schedule` 用 0.2.0 的选择,两版内核都导出它)。 */
1559
+ const TRIGGER_ICONS = {
1560
+ request: _deepseek_ai_dsh_client_ui_primitives.IconContextInjectionOutlineRegular,
1561
+ goal: _deepseek_ai_dsh_client_ui_primitives.IconGoalOutlineRegular,
1562
+ agent: _deepseek_ai_dsh_client_ui_primitives.IconPaperPlaneOutlineRegular,
1563
+ team: _deepseek_ai_dsh_client_ui_primitives.IconAgentPresetOutlineRegular,
1564
+ subagent: _deepseek_ai_dsh_client_ui_primitives.IconAgentPresetOutlineRegular,
1565
+ github: _deepseek_ai_dsh_client_ui_primitives.IconBranchOutlineRegular,
1566
+ webhook: _deepseek_ai_dsh_client_ui_primitives.IconGlobeOutlineRegular,
1567
+ schedule: _deepseek_ai_dsh_client_ui_primitives.IconClockOutlineRegular,
1568
+ job: _deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineRegular,
1569
+ plugin: _deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutlineRegular
1570
+ };
1571
+ /**
1572
+ * 轮次徽标。文案是插件自有 —— chat 字典里没有「第 N / M 轮」这样的 key,
1573
+ * 与交付行的折叠摘要直写中文同一取径。
1574
+ * @param props - 已还原的轮次字段。
1575
+ * @returns 徽标。
1576
+ */
1577
+ function RoundBadge({ goal }) {
1578
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1579
+ className: trigger_card_module_css_default.round,
1580
+ children: `第 ${String(goal.round)} / ${String(goal.maxRounds)} 轮`
1581
+ });
1582
+ }
1583
+ /**
1584
+ * 目标轮次的展开体:字段化,标签与转义都不再出现。
1585
+ *
1586
+ * 指令段独立成一节并默认收起 —— 它是给模型的执行要求,对人是噪音,但**不该
1587
+ * 销毁**(它解释了模型这一轮为什么会这么干),所以保留可查性而不是删掉。
1588
+ * @param props - 已还原的轮次字段。
1589
+ * @returns 两节字段。
1590
+ */
1591
+ function GoalRoundBody({ goal }) {
1592
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1593
+ className: trigger_card_module_css_default.detail,
1594
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dl", {
1595
+ className: trigger_card_module_css_default.pair,
1596
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("dt", {
1597
+ className: trigger_card_module_css_default.key,
1598
+ children: "目标"
1599
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dd", {
1600
+ className: trigger_card_module_css_default.value,
1601
+ "data-trigger-objective": true,
1602
+ children: goal.objective
1603
+ })]
1604
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
1605
+ className: trigger_card_module_css_default.instruction,
1606
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
1607
+ className: trigger_card_module_css_default.instructionSummary,
1608
+ children: "模型收到的指令"
1609
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
1610
+ className: trigger_card_module_css_default.instructionText,
1611
+ children: goal.instruction
1612
+ })]
1613
+ })]
1614
+ });
1615
+ }
1616
+ /**
1617
+ * 非目标轮次的展开体:与官方 `NoticeBody` 同构 —— 文本按真实换行显示,
1618
+ * 本版本不认识的块单独渲染而不是消失。
1619
+ * @param props - 内容分段与翻译席位。
1620
+ * @returns 原文块。
1621
+ */
1622
+ function PlainBody({ runs, t }) {
1623
+ return runs.map((run, index) => run.kind === "text" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
1624
+ className: trigger_card_module_css_default.text,
1625
+ "data-context-text": true,
1626
+ children: run.text
1627
+ }, index) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.JsonBlock, {
1628
+ label: t("message.unknownBlock"),
1629
+ payload: run.block,
1630
+ truncatedLabel: (total) => t("json.truncated", { total })
1631
+ }, index));
1632
+ }
1633
+ /**
1634
+ * 渲染一张触发通知卡。
1635
+ * @param props - 节点数据与翻译席位(注册时声明 `chat` 命名空间)。
1636
+ * @returns 折叠卡;收起的展开体由内容形态决定。
1637
+ */
1638
+ function TriggerCard({ node, t }) {
1639
+ const [open, setOpen] = (0, react.useState)(false);
1640
+ const bodyId = (0, react.useId)();
1641
+ const data = node.data;
1642
+ const details = turnTriggerDetails(data.source);
1643
+ const TriggerIcon = TRIGGER_ICONS[details.icon];
1644
+ const goal = goalRoundOf(data);
1645
+ const runs = contentRuns(data.content);
1646
+ const time = formatClock(data.time, t);
1647
+ const instant = new Date(data.time);
1648
+ const stamp = Number.isNaN(instant.getTime()) ? void 0 : instant.toISOString();
1649
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
1650
+ className: trigger_card_module_css_default.root,
1651
+ "data-turn-trigger": true,
1652
+ "data-trigger-card": true,
1653
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1654
+ className: trigger_card_module_css_default.header,
1655
+ type: "button",
1656
+ "aria-expanded": open,
1657
+ "aria-controls": bodyId,
1658
+ onClick: () => {
1659
+ setOpen(!open);
1660
+ },
1661
+ children: [
1662
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1663
+ className: trigger_card_module_css_default.icon,
1664
+ "aria-hidden": true,
1665
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TriggerIcon, { size: 14 })
1666
+ }),
1667
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1668
+ className: trigger_card_module_css_default.title,
1669
+ children: t(details.titleKey)
1670
+ }),
1671
+ goal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RoundBadge, { goal }),
1672
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("time", {
1673
+ className: trigger_card_module_css_default.time,
1674
+ dateTime: stamp,
1675
+ children: time
1676
+ }),
1677
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, {
1678
+ size: 12,
1679
+ className: open ? trigger_card_module_css_default.openChevron : trigger_card_module_css_default.chevron
1680
+ })
1681
+ ]
1682
+ }), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1683
+ id: bodyId,
1684
+ className: trigger_card_module_css_default.body,
1685
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1686
+ className: trigger_card_module_css_default.explanation,
1687
+ children: t("message.trigger.explanation")
1688
+ }), goal !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GoalRoundBody, { goal }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1689
+ className: trigger_card_module_css_default.content,
1690
+ children: runs !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PlainBody, {
1691
+ runs,
1692
+ t
1693
+ })
1694
+ })]
1695
+ })]
1696
+ });
1697
+ }
1698
+ //#endregion
1222
1699
  //#region src/client/index.ts
1223
1700
  const inject = [
1224
1701
  "slots",
1225
1702
  "connection",
1226
1703
  "remote",
1227
- "settingsScope"
1704
+ "configForms"
1228
1705
  ];
1229
1706
  /** Upsert the plugin's paint stylesheet with the current snapshot's CSS. */
1230
- function paint(scope) {
1707
+ function paint(form) {
1231
1708
  let tag = document.querySelector(`style[data-plugin-css="${STYLE_TAG_ID}"]`);
1232
1709
  if (tag === null) {
1233
1710
  tag = document.createElement("style");
@@ -1235,51 +1712,77 @@ window.__ModuleLoader__.load({
1235
1712
  tag.dataset.pluginCss = STYLE_TAG_ID;
1236
1713
  document.head.appendChild(tag);
1237
1714
  }
1238
- tag.textContent = buildCss(scope.getSnapshot().value);
1715
+ tag.textContent = buildCss(form.getSnapshot().value);
1239
1716
  }
1240
1717
  /**
1241
1718
  * Mount the node-appearance plugin on the page.
1242
1719
  * @param ctx - client root context.
1243
1720
  */
1244
1721
  function apply(ctx) {
1245
- const scope = ctx.settingsScope.bind({ namespace: NODE_APPEARANCE_NS });
1246
- paint(scope);
1247
- ctx.effect(() => scope.subscribe(() => {
1248
- paint(scope);
1722
+ const form = ctx.configForms.get(NODE_APPEARANCE_NS);
1723
+ paint(form);
1724
+ ctx.effect(() => form.subscribe(() => {
1725
+ paint(form);
1249
1726
  }), "dsh-node-appearance: repaint on settings change");
1250
1727
  const face = {
1251
- hooks: { nodeAppearance: scope },
1728
+ hooks: { nodeAppearance: form },
1252
1729
  apply: async (value) => {
1253
- await scope.set("showThinking", value.showThinking ?? true);
1254
- await scope.set("colors", value.colors ?? {});
1255
- await scope.set("toolColors", value.toolColors ?? {});
1730
+ await form.mutate([
1731
+ {
1732
+ op: "set",
1733
+ path: ["showThinking"],
1734
+ value: value.showThinking ?? true
1735
+ },
1736
+ {
1737
+ op: "set",
1738
+ path: ["colors"],
1739
+ value: value.colors ?? {}
1740
+ },
1741
+ {
1742
+ op: "set",
1743
+ path: ["toolColors"],
1744
+ value: value.toolColors ?? {}
1745
+ }
1746
+ ]);
1256
1747
  },
1257
1748
  setShowThinking: (show) => {
1258
- scope.set("showThinking", show);
1749
+ form.set("showThinking", show);
1259
1750
  },
1260
1751
  setCategoryColor: (category, color) => {
1261
- const value = scope.getSnapshot().value;
1262
- scope.set("colors", {
1263
- ...value?.colors,
1264
- [category]: color
1265
- });
1752
+ const value = form.getSnapshot().value;
1753
+ form.mutate([{
1754
+ op: "set",
1755
+ path: ["colors"],
1756
+ value: {
1757
+ ...value?.colors,
1758
+ [category]: color
1759
+ }
1760
+ }]);
1266
1761
  },
1267
1762
  setToolColor: (tool, color) => {
1268
- const value = scope.getSnapshot().value;
1269
- scope.set("toolColors", {
1270
- ...value?.toolColors,
1271
- [tool]: color
1272
- });
1763
+ const value = form.getSnapshot().value;
1764
+ form.mutate([{
1765
+ op: "set",
1766
+ path: ["toolColors"],
1767
+ value: {
1768
+ ...value?.toolColors,
1769
+ [tool]: color
1770
+ }
1771
+ }]);
1273
1772
  },
1274
1773
  removeToolColor: (tool) => {
1275
- const toolColors = { ...scope.getSnapshot().value?.toolColors };
1774
+ const toolColors = { ...form.getSnapshot().value?.toolColors };
1276
1775
  delete toolColors[tool];
1277
- scope.set("toolColors", toolColors);
1776
+ form.mutate([{
1777
+ op: "set",
1778
+ path: ["toolColors"],
1779
+ value: toolColors
1780
+ }]);
1278
1781
  }
1279
1782
  };
1280
- ctx.slots.inject("settings.plugin.item", () => ctx.slots.register({
1281
- name: "settings.plugin.item",
1282
- key: NODE_APPEARANCE_NS,
1783
+ ctx.slots.inject("plugins.bundle.config", () => ctx.slots.register({
1784
+ name: "plugins.bundle.config",
1785
+ key: "@max-null/dsh-node-appearance",
1283
1786
  inject: () => face
1284
1787
  }, NodeAppearanceRow));
1285
1788
  ctx.slots.inject("tool.call.toolview", () => ctx.slots.register({
@@ -1299,6 +1802,12 @@ window.__ModuleLoader__.load({
1299
1802
  id: "max-null/goal-detail",
1300
1803
  order: 11
1301
1804
  }, GoalDetail));
1805
+ ctx.slots.inject("conversation.chat.node", () => ctx.slots.register({
1806
+ name: "conversation.chat.node",
1807
+ key: "turn-trigger",
1808
+ priority: -1,
1809
+ locale: "chat"
1810
+ }, TriggerCard));
1302
1811
  }
1303
1812
  //#endregion
1304
1813
  exports.apply = apply;