dsh-ui-tweaks 0.15.0 → 0.16.1
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/LICENSE +21 -21
- package/README.en.md +2 -2
- package/README.md +3 -3
- package/cordis.patch.yml +12 -12
- package/lib/client.js +170 -149
- package/lib/client.js.map +1 -1
- package/lib/types/client/index.d.ts +2 -2
- package/lib/types/client/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/vendor/addon-fit.js +1 -1
- package/vendor/xterm.css +218 -218
- package/vendor/xterm.js +1 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 dsh-ui-tweaks contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-ui-tweaks contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.en.md
CHANGED
|
@@ -20,7 +20,7 @@ A [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/) (DSH)
|
|
|
20
20
|
## Features
|
|
21
21
|
|
|
22
22
|
- **Code font size (px)** — absolute 8–32px, default 13 (DSH's stock code-block size at a 16px body); applies to code blocks, with inline code following proportionally. The legacy percentage (`codeFontScale`) stays compatible and is overridden once a px value is set. Message text keeps DSH's stock sizing.
|
|
23
|
-
- **Theme (single choice in Layout, stock look by default)** — choose `Default` or **Neon
|
|
23
|
+
- **Theme (single choice in Layout, stock look by default)** — choose `Default` or **Neon poster**: a two-scheme poster skin — paper-white with ink-black hairlines in light mode, near-black with light hairlines in dark mode, both with lime highlights and an Anthropic-red action accent (buttons, links and selections follow the theme tokens automatically; code blocks and the composer card get hard offset shadows), applied live. Future skins will be added as further options the same way.
|
|
24
24
|
- **Timeline (single choice in Features)** — one switch, two options:
|
|
25
25
|
- **Native (default)** — DSH's built-in turn rail (the row of small dots beside the messages), the stock behavior.
|
|
26
26
|
- **Web (classic)** — the v0.11 classic right-side navigation rail, restored: vertically centered on the message area's right edge, a thin line strip when collapsed, a 240px panel on hover (message previews + current-position highlight), a per-item detail bubble with timestamp, and **click to jump** (deep history pages in automatically before landing, with a landing self-check); wheel over the rail scrubs clipped items into reach. Data comes from the server-side `dshChatTimeline` session projection (every user message, independent of the browser's loaded window); sessions with fewer than two user messages hide it. On the web option the native turn rail is hidden with one theme-independent CSS rule (matching its `--turn-natural-height` inline variable), so the two never appear together.
|
|
@@ -47,7 +47,7 @@ All changes apply **live** — no reload needed. The same values can be hand-edi
|
|
|
47
47
|
```yaml
|
|
48
48
|
ui-tweaks:
|
|
49
49
|
timelineStyle: web # defaults to native (DSH's built-in turn rail); web is the classic web timeline
|
|
50
|
-
themeStyle: neon-lime # defaults to default (DSH's stock look); neon-lime is the
|
|
50
|
+
themeStyle: neon-lime # defaults to default (DSH's stock look); neon-lime is the neon-poster skin
|
|
51
51
|
gitBarEnabled: true # defaults to false (off); set true to enable GitBar
|
|
52
52
|
archiveManagerEnabled: true # defaults to false (off); set true to show the Archive page
|
|
53
53
|
initCommandEnabled: true # defaults to false (off); set true to register the /init slash command
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **依赖版本**:当前依赖 **DSH v0.1.5-alpha.1**。
|
|
4
4
|
|
|
5
|
-
[DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/)(DSH)Web UI
|
|
5
|
+
[DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/)(DSH)Web UI 插件:在设置面板中实时调整对话界面——代码字号、**主题皮肤**(荧光海报风)、**时间线切换**(原生回合导航轨 / 经典网页时间线)、**GitBar**(输入框工具行内的 git 状态胶囊:分支在权限旁、差异在模型前),可开关的**归档管理**(设置中的「归档」页面:查看、恢复或彻底删除已归档会话),可开关的**任务提醒**(会话完成或需要交互时,通过标签页标题闪烁 / 系统通知 / 提示音把你唤回来),以及**缓存命中率两位小数**(把输入框下方统计条的缓存命中百分比改写为精确值)。
|
|
6
6
|
|
|
7
7
|
## 预览
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
## 功能
|
|
21
21
|
|
|
22
22
|
- **代码字号(px)**:绝对值 8–32,默认 13(正文 16 时的 DSH 原生代码块字号);作用于代码块,行内代码按比例跟随——旧版的百分比配置(`codeFontScale`)仍然兼容,一旦设置新的 px 值即以其为准。消息正文保持 DSH 原生字号。
|
|
23
|
-
- **主题(布局区单选,默认即原生外观)**:可选 `默认` 或
|
|
23
|
+
- **主题(布局区单选,默认即原生外观)**:可选 `默认` 或 **荧光海报**——海报风双方案皮肤:浅色模式纸白底 + 黑粗线条,深色模式近黑底 + 浅色粗线条,都配荧光黄高亮 + Anthropic 红点缀(按钮、链接、选中态跟随主题变量自动变色,代码块与输入框卡片带硬阴影贴纸效果),切换即时生效。后续皮肤会以同样方式追加为新选项。
|
|
24
24
|
- **时间线(功能区内单选)**:一个开关两档,选一个:
|
|
25
25
|
- **原生(默认)**:DSH 自带的回合导航轨(消息右侧的小圆点条),即官方默认行为。
|
|
26
26
|
- **网页(经典)**:找回 v0.11 的经典右侧导航轨——消息区右缘垂直居中,收起时是一列细线,悬停展开为 240px 面板(消息预览 + 高亮当前位),悬停单项弹出带时间戳的详情气泡,**点击跳转**到对应消息(深历史会自动连续翻页加载后落点,带落点自校验);滚轮可在轨上直接翻阅被裁剪的条目。数据来自服务端 `dshChatTimeline` 会话投影(全量用户消息,与浏览器已加载窗口无关),少于两条用户消息的会话自动隐藏;切换到网页档时,原生回合导航轨由插件用一条主题无关的 CSS 规则(命中其 `--turn-natural-height` 内联变量)隐藏,两个不会同时出现。
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
```yaml
|
|
51
51
|
ui-tweaks:
|
|
52
52
|
timelineStyle: web # 默认 native(DSH 自带回合导航轨),web 为经典网页时间线
|
|
53
|
-
themeStyle: neon-lime # 默认 default(DSH 原生外观),neon-lime
|
|
53
|
+
themeStyle: neon-lime # 默认 default(DSH 原生外观),neon-lime 为荧光海报皮肤
|
|
54
54
|
gitBarEnabled: true # 默认 false(关闭),设为 true 开启 GitBar
|
|
55
55
|
archiveManagerEnabled: true # 默认 false(关闭),设为 true 开启「归档」页面
|
|
56
56
|
initCommandEnabled: true # 默认 false(关闭),设为 true 开启 /init 斜杠命令
|
package/cordis.patch.yml
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
# dsh-ui-tweaks bundle patch
|
|
2
|
-
#
|
|
3
|
-
# Declared by `dsh.bundle.patch` in package.json: when the plugin is installed
|
|
4
|
-
# through the official CLI —
|
|
5
|
-
#
|
|
6
|
-
# dsh plugin --profile <name> add dsh-ui-tweaks
|
|
7
|
-
#
|
|
8
|
-
# — the command appends `dsh-ui-tweaks` to the profile's bundle stack and this
|
|
9
|
-
# patch mounts the server-side plugin row.
|
|
10
|
-
- insert:
|
|
11
|
-
- id: ui-tweaks
|
|
12
|
-
name: 'dsh-ui-tweaks'
|
|
1
|
+
# dsh-ui-tweaks bundle patch
|
|
2
|
+
#
|
|
3
|
+
# Declared by `dsh.bundle.patch` in package.json: when the plugin is installed
|
|
4
|
+
# through the official CLI —
|
|
5
|
+
#
|
|
6
|
+
# dsh plugin --profile <name> add dsh-ui-tweaks
|
|
7
|
+
#
|
|
8
|
+
# — the command appends `dsh-ui-tweaks` to the profile's bundle stack and this
|
|
9
|
+
# patch mounts the server-side plugin row.
|
|
10
|
+
- insert:
|
|
11
|
+
- id: ui-tweaks
|
|
12
|
+
name: 'dsh-ui-tweaks'
|
package/lib/client.js
CHANGED
|
@@ -86,27 +86,27 @@ function relativeTime(ms, now, formatter) {
|
|
|
86
86
|
return formatter.format(Math.round(diffSeconds / 86400), 'day');
|
|
87
87
|
return formatter.format(Math.round(diffSeconds / 604800), 'week');
|
|
88
88
|
}
|
|
89
|
-
exports.ARCHIVE_CSS = `
|
|
90
|
-
.dut-arc{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
91
|
-
.dut-arc-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
92
|
-
.dut-arc-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
93
|
-
.dut-arc-count{font-size:11.5px;color:var(--dsw-alias-label-secondary);padding:2px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
94
|
-
.dut-arc-spacer{flex:1}
|
|
95
|
-
.dut-arc-btn{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
|
|
96
|
-
.dut-arc-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
97
|
-
.dut-arc-btn:disabled{opacity:.5;cursor:default}
|
|
98
|
-
.dut-arc-btn.dut-arc-del:hover{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}
|
|
99
|
-
.dut-arc-btn.dut-arc-confirm{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);font-weight:600}
|
|
100
|
-
.dut-arc-body{display:grid;gap:2px;margin-top:4px}
|
|
101
|
-
.dut-arc-row{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px}
|
|
102
|
-
.dut-arc-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
103
|
-
.dut-arc-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;text-align:left;background:transparent;border:none;padding:0;cursor:default;color:var(--dsw-alias-label-primary);font:inherit}
|
|
104
|
-
.dut-arc-title{font-size:13.5px;font-weight:600;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
105
|
-
.dut-arc-sub{font-size:11.5px;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
106
|
-
.dut-arc-empty{padding:32px 16px;text-align:center;font-size:12.5px;color:var(--dsw-alias-label-secondary)}
|
|
107
|
-
.dut-arc-alert{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
108
|
-
.dut-arc-off{padding:20px 16px;display:grid;gap:12px}
|
|
109
|
-
.dut-arc-off p{margin:0;font-size:12.5px;line-height:1.6;color:var(--dsw-alias-label-secondary)}
|
|
89
|
+
exports.ARCHIVE_CSS = `
|
|
90
|
+
.dut-arc{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
91
|
+
.dut-arc-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
92
|
+
.dut-arc-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
93
|
+
.dut-arc-count{font-size:11.5px;color:var(--dsw-alias-label-secondary);padding:2px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
94
|
+
.dut-arc-spacer{flex:1}
|
|
95
|
+
.dut-arc-btn{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
|
|
96
|
+
.dut-arc-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
97
|
+
.dut-arc-btn:disabled{opacity:.5;cursor:default}
|
|
98
|
+
.dut-arc-btn.dut-arc-del:hover{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}
|
|
99
|
+
.dut-arc-btn.dut-arc-confirm{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);font-weight:600}
|
|
100
|
+
.dut-arc-body{display:grid;gap:2px;margin-top:4px}
|
|
101
|
+
.dut-arc-row{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px}
|
|
102
|
+
.dut-arc-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
103
|
+
.dut-arc-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;text-align:left;background:transparent;border:none;padding:0;cursor:default;color:var(--dsw-alias-label-primary);font:inherit}
|
|
104
|
+
.dut-arc-title{font-size:13.5px;font-weight:600;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
105
|
+
.dut-arc-sub{font-size:11.5px;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
106
|
+
.dut-arc-empty{padding:32px 16px;text-align:center;font-size:12.5px;color:var(--dsw-alias-label-secondary)}
|
|
107
|
+
.dut-arc-alert{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
108
|
+
.dut-arc-off{padding:20px 16px;display:grid;gap:12px}
|
|
109
|
+
.dut-arc-off p{margin:0;font-size:12.5px;line-height:1.6;color:var(--dsw-alias-label-secondary)}
|
|
110
110
|
`;
|
|
111
111
|
/** Install the Archive stylesheet once (idempotent); returns the disposer. */
|
|
112
112
|
function installArchiveStyles() {
|
|
@@ -2441,9 +2441,9 @@ const en = {
|
|
|
2441
2441
|
timelineNative: 'Native',
|
|
2442
2442
|
timelineWeb: 'Web (classic)',
|
|
2443
2443
|
theme: 'Theme',
|
|
2444
|
-
themeHint: 'Conversation skin. Default keeps DSH\u2019s stock look; Neon
|
|
2444
|
+
themeHint: 'Conversation skin. Default keeps DSH\u2019s stock look; Neon poster is a two-scheme skin — paper-white with ink-black hairlines in light mode, near-black with light hairlines in dark mode, lime highlights and an Anthropic-red action accent, applied live.',
|
|
2445
2445
|
themeDefault: 'Default',
|
|
2446
|
-
themeNeonLime: 'Neon
|
|
2446
|
+
themeNeonLime: 'Neon poster',
|
|
2447
2447
|
sectionSearch: 'Web search',
|
|
2448
2448
|
searchOn: 'On',
|
|
2449
2449
|
searchOff: 'Off',
|
|
@@ -2677,9 +2677,9 @@ const zh = {
|
|
|
2677
2677
|
timelineNative: '原生',
|
|
2678
2678
|
timelineWeb: '网页(经典)',
|
|
2679
2679
|
theme: '主题',
|
|
2680
|
-
themeHint: '对话皮肤。默认保持 DSH
|
|
2680
|
+
themeHint: '对话皮肤。默认保持 DSH 原生外观;荧光海报是海报风双方案——浅色下纸白底黑粗线,深色下近黑底浅粗线,都配荧光黄高亮 + Anthropic 红点缀,切换即时生效。',
|
|
2681
2681
|
themeDefault: '默认',
|
|
2682
|
-
themeNeonLime: '
|
|
2682
|
+
themeNeonLime: '荧光海报',
|
|
2683
2683
|
sectionSearch: '网络搜索',
|
|
2684
2684
|
searchOn: '开',
|
|
2685
2685
|
searchOff: '关',
|
|
@@ -2957,13 +2957,17 @@ function buildCodeFontCss(codeFontSize) {
|
|
|
2957
2957
|
return `body{${parts.join(';')}}`;
|
|
2958
2958
|
}
|
|
2959
2959
|
/**
|
|
2960
|
-
* Fluorescent
|
|
2961
|
-
* the paper-white poster (lime highlights,
|
|
2960
|
+
* Fluorescent poster skin (Bilibili tech-video look), in two schemes:
|
|
2961
|
+
* the paper-white poster (lime highlights, Anthropic-red action accent) in light
|
|
2962
2962
|
* mode, and its dark twin in dark mode — near-black paper with the same
|
|
2963
|
-
* lime/
|
|
2963
|
+
* lime/red stickers. Popovers and menus (model switcher, open-in-app,
|
|
2964
2964
|
* stat dialogs, context panel) ride the scheme's own paper so they never read
|
|
2965
2965
|
* as a gray slab against the conversation.
|
|
2966
2966
|
*
|
|
2967
|
+
* The internal style id stays `neon-lime`: it is the persisted setting value,
|
|
2968
|
+
* so renaming it would silently reset every saved profile. Only the labels
|
|
2969
|
+
* shown in Settings changed when the accent moved to Anthropic red.
|
|
2970
|
+
*
|
|
2967
2971
|
* Every colour is a `--dut-*` design variable re-pointed per scheme, and the
|
|
2968
2972
|
* DSW alias tokens map onto those variables in one place, so buttons, links,
|
|
2969
2973
|
* selections, the sidebar and the plugin's own tinted controls follow
|
|
@@ -2986,7 +2990,8 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
2986
2990
|
--dut-paper-3:#ffffff;
|
|
2987
2991
|
--dut-pop:#ffffff;
|
|
2988
2992
|
--dut-ink:#101418;
|
|
2989
|
-
|
|
2993
|
+
/* the markdown table header keeps an ink strip; its type rides the accent */
|
|
2994
|
+
--dut-th-bg:#101418;
|
|
2990
2995
|
--dut-code:#f7f8f9;
|
|
2991
2996
|
--dut-text-1:#101418;
|
|
2992
2997
|
--dut-text-2:#3d4750;
|
|
@@ -2995,19 +3000,21 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
2995
3000
|
--dut-btn-fg:#ffffff;
|
|
2996
3001
|
--dut-lime:#c6ff00;
|
|
2997
3002
|
--dut-lime-soft:#dcff4d;
|
|
2998
|
-
--dut-
|
|
2999
|
-
--dut-
|
|
3000
|
-
--dut-
|
|
3001
|
-
--dut-
|
|
3002
|
-
--dut-
|
|
3003
|
-
|
|
3003
|
+
--dut-accent:#c15f3c;
|
|
3004
|
+
--dut-accent-soft:rgba(193,95,60,.12);
|
|
3005
|
+
--dut-accent-pale:#eccfc4;
|
|
3006
|
+
--dut-hover:rgba(193,95,60,.07);
|
|
3007
|
+
--dut-active:rgba(193,95,60,.13);
|
|
3008
|
+
/* text selection uses the native blue in both schemes */
|
|
3009
|
+
--dut-sel-bg:Highlight;
|
|
3010
|
+
--dut-sel-fg:HighlightText;
|
|
3004
3011
|
--dut-faint:rgba(0,0,0,.06);
|
|
3005
3012
|
--dut-scroll-1:#e3e6ea;
|
|
3006
3013
|
--dut-scroll-2:#c8cdd3;
|
|
3007
3014
|
--dut-elev:#101418;
|
|
3008
|
-
/* the user bubble:
|
|
3009
|
-
|
|
3010
|
-
--dut-bubble:#
|
|
3015
|
+
/* the user bubble: a pale tint of the Anthropic-red accent, so it stays in
|
|
3016
|
+
the same family as the links, buttons and artifacts */
|
|
3017
|
+
--dut-bubble:#ffe3d9;
|
|
3011
3018
|
--dut-shadow:#101418;
|
|
3012
3019
|
--dut-drop:rgba(255,255,255,.7);
|
|
3013
3020
|
/* Hairlines stay the host's own subtle values: the shipped 0.5px pills and
|
|
@@ -3024,6 +3031,14 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
3024
3031
|
--dut-success-2:var(--dsw-static-green-400);
|
|
3025
3032
|
--dut-success-3:var(--dsw-static-green-100);
|
|
3026
3033
|
--dut-warn-3:var(--dsw-static-amber-100);
|
|
3034
|
+
/* Two surfaces read the STATIC DeepSeek scale instead of an alias, so the
|
|
3035
|
+
alias re-points below never reached them: the running-turn "深度求索中…"
|
|
3036
|
+
shimmer (500 + 200 painted into the glyphs) and the ongoing state dot
|
|
3037
|
+
(450). Re-point the static steps here — every alias that also derives from
|
|
3038
|
+
them is already mapped explicitly, so nothing else moves. */
|
|
3039
|
+
--dsw-static-deepseek-200:var(--dut-accent-pale);
|
|
3040
|
+
--dsw-static-deepseek-450:var(--dut-accent);
|
|
3041
|
+
--dsw-static-deepseek-500:var(--dut-accent);
|
|
3027
3042
|
--dsw-alias-bg-base:var(--dut-paper);
|
|
3028
3043
|
--dsw-alias-bg-layer-1:var(--dut-paper);
|
|
3029
3044
|
--dsw-alias-bg-layer-2:var(--dut-paper-2);
|
|
@@ -3047,7 +3062,7 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
3047
3062
|
--dsw-alias-brand-primary:var(--dut-text-1);
|
|
3048
3063
|
--dsw-alias-brand-primary-invert:var(--dut-paper);
|
|
3049
3064
|
--dsw-alias-brand-text:var(--dut-text-1);
|
|
3050
|
-
--dsw-alias-brand-primary-new-colorprimary-new-color:var(--dut-
|
|
3065
|
+
--dsw-alias-brand-primary-new-colorprimary-new-color:var(--dut-accent);
|
|
3051
3066
|
--dsw-alias-button-contrast-fill:var(--dut-text-2);
|
|
3052
3067
|
--dsw-alias-button-elevated-fill:var(--dut-paper);
|
|
3053
3068
|
--dsw-alias-button-floating-fill:var(--dut-paper);
|
|
@@ -3055,8 +3070,8 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
3055
3070
|
--dsw-alias-button-ghost-active-border:var(--dut-ink);
|
|
3056
3071
|
--dsw-alias-button-ghost-active-fill:var(--dut-paper-3);
|
|
3057
3072
|
--dsw-alias-button-ghost-active-hover:var(--dut-paper-3);
|
|
3058
|
-
--dsw-alias-button-info-fill:var(--dut-
|
|
3059
|
-
--dsw-alias-button-info-hover:var(--dut-
|
|
3073
|
+
--dsw-alias-button-info-fill:var(--dut-accent);
|
|
3074
|
+
--dsw-alias-button-info-hover:var(--dut-accent);
|
|
3060
3075
|
--dsw-alias-button-primary-dimmed:var(--dut-paper-2);
|
|
3061
3076
|
--dsw-alias-button-primary-fill:var(--dut-text-1);
|
|
3062
3077
|
--dsw-alias-button-primary-hover:var(--dut-text-1);
|
|
@@ -3074,21 +3089,20 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
3074
3089
|
--dsw-alias-label-primary-inverted:var(--dut-btn-fg);
|
|
3075
3090
|
--dsw-alias-label-secondary:var(--dut-text-2);
|
|
3076
3091
|
--dsw-alias-label-tertiary:var(--dut-text-3);
|
|
3077
|
-
--dsw-alias-link:var(--dut-
|
|
3092
|
+
--dsw-alias-link:var(--dut-accent);
|
|
3078
3093
|
--dsw-alias-markdown-citation:var(--dut-paper-2);
|
|
3079
3094
|
--dsw-alias-markdown-code-block:var(--dut-code);
|
|
3080
3095
|
--dsw-alias-markdown-code-block-banner:var(--dut-paper-3);
|
|
3081
3096
|
--dsw-alias-markdown-code-segment-selected:var(--dut-paper);
|
|
3082
3097
|
--dsw-alias-markdown-code-segment-unselected:var(--dut-paper-2);
|
|
3083
|
-
--dsw-alias-markdown-inline-code:var(--dut-lime-soft);
|
|
3084
3098
|
--dsw-alias-markdown-placeholder:var(--dut-paper-2);
|
|
3085
3099
|
--dsw-alias-markdown-tag:var(--dut-paper-2);
|
|
3086
3100
|
--dsw-alias-scrollbar-bg-l1:var(--dut-scroll-1);
|
|
3087
3101
|
--dsw-alias-scrollbar-bg-l2:var(--dut-scroll-1);
|
|
3088
3102
|
--dsw-alias-scrollbar-hover-l1:var(--dut-scroll-2);
|
|
3089
3103
|
--dsw-alias-scrollbar-hover-l2:var(--dut-scroll-2);
|
|
3090
|
-
--dsw-alias-state-business-primary:var(--dut-
|
|
3091
|
-
--dsw-alias-state-business-tertiary:var(--dut-
|
|
3104
|
+
--dsw-alias-state-business-primary:var(--dut-accent);
|
|
3105
|
+
--dsw-alias-state-business-tertiary:var(--dut-accent-soft);
|
|
3092
3106
|
--dsw-alias-state-error-primary:var(--dut-error);
|
|
3093
3107
|
--dsw-alias-state-error-secondary:var(--dut-error-2);
|
|
3094
3108
|
--dsw-alias-state-success-primary:var(--dut-success);
|
|
@@ -3108,7 +3122,9 @@ body:not(#dsh-ui-tweaks-theme-scope){
|
|
|
3108
3122
|
--dsw-specific-menu:var(--dut-pop);
|
|
3109
3123
|
--dsw-specific-sidebar-fill:var(--dut-paper);
|
|
3110
3124
|
--dsw-specific-sidebar-nav-item-active:var(--dut-lime-soft);
|
|
3111
|
-
|
|
3125
|
+
/* NOT themed: despite the name this token feeds only the "推荐" chip in the
|
|
3126
|
+
question composer, and a lime slab behind text read as a highlighter mark
|
|
3127
|
+
rather than a chip — it stays on the host's own background. */
|
|
3112
3128
|
--dsw-specific-sidebar-nav-item-hover:var(--dut-paper-2);
|
|
3113
3129
|
--dsw-specific-tip:var(--dut-paper-2);
|
|
3114
3130
|
}
|
|
@@ -3121,8 +3137,12 @@ body:not(#dsh-ui-tweaks-theme-scope)[data-ds-dark-theme]{
|
|
|
3121
3137
|
--dut-paper-2:#14181d;
|
|
3122
3138
|
--dut-paper-3:#1e252c;
|
|
3123
3139
|
--dut-pop:#161c22;
|
|
3124
|
-
|
|
3125
|
-
|
|
3140
|
+
/* the poster frame drops to translucent white in dark mode: a solid
|
|
3141
|
+
near-white 2px frame plus its hard offset read as glare (see --dut-shadow) */
|
|
3142
|
+
--dut-ink:rgba(232,236,239,.42);
|
|
3143
|
+
/* a light strip would kill the red type here, so dark mode keeps a dark
|
|
3144
|
+
header strip lifted one step off the paper */
|
|
3145
|
+
--dut-th-bg:#1e252c;
|
|
3126
3146
|
--dut-code:#171d24;
|
|
3127
3147
|
--dut-text-1:#f2f5f3;
|
|
3128
3148
|
--dut-text-2:#b9c3ca;
|
|
@@ -3131,21 +3151,23 @@ body:not(#dsh-ui-tweaks-theme-scope)[data-ds-dark-theme]{
|
|
|
3131
3151
|
--dut-btn-fg:#101418;
|
|
3132
3152
|
--dut-lime:#c6ff00;
|
|
3133
3153
|
--dut-lime-soft:#dcff4d;
|
|
3134
|
-
--dut-
|
|
3135
|
-
--dut-
|
|
3136
|
-
--dut-
|
|
3137
|
-
--dut-
|
|
3138
|
-
--dut-
|
|
3139
|
-
|
|
3154
|
+
--dut-accent:#d97757;
|
|
3155
|
+
--dut-accent-soft:rgba(217,119,87,.18);
|
|
3156
|
+
--dut-accent-pale:#eec2b3;
|
|
3157
|
+
--dut-hover:rgba(217,119,87,.16);
|
|
3158
|
+
--dut-active:rgba(217,119,87,.26);
|
|
3159
|
+
/* text selection uses the native blue in both schemes */
|
|
3160
|
+
--dut-sel-bg:Highlight;
|
|
3161
|
+
--dut-sel-fg:HighlightText;
|
|
3140
3162
|
--dut-faint:rgba(255,255,255,.07);
|
|
3141
3163
|
--dut-scroll-1:#2a3138;
|
|
3142
3164
|
--dut-scroll-2:#3a444d;
|
|
3143
3165
|
--dut-elev:#1f262c;
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
--dut-shadow
|
|
3166
|
+
/* dark twin: the same red accent, deepened onto the near-black paper */
|
|
3167
|
+
--dut-bubble:#35201a;
|
|
3168
|
+
/* the hard offset band softens with it, so the sticker silhouette survives
|
|
3169
|
+
while the brightness does not */
|
|
3170
|
+
--dut-shadow:rgba(232,236,239,.16);
|
|
3149
3171
|
--dut-drop:rgba(39,39,48,.7);
|
|
3150
3172
|
--dut-line-1:rgba(255,255,255,.06);
|
|
3151
3173
|
--dut-line-2:rgba(255,255,255,.12);
|
|
@@ -3159,10 +3181,10 @@ body:not(#dsh-ui-tweaks-theme-scope)[data-ds-dark-theme]{
|
|
|
3159
3181
|
--dut-warn-3:var(--dsw-static-amber-900);
|
|
3160
3182
|
}
|
|
3161
3183
|
::selection{background:var(--dut-sel-bg);color:var(--dut-sel-fg)}
|
|
3162
|
-
/* table header: the
|
|
3184
|
+
/* table header: the ink header strip, with the type in the accent red */
|
|
3163
3185
|
div[data-slot="conversation.chat.node"] table th{
|
|
3164
|
-
background:var(--dut-
|
|
3165
|
-
color:var(--dut-
|
|
3186
|
+
background:var(--dut-th-bg);
|
|
3187
|
+
color:var(--dut-accent);
|
|
3166
3188
|
}
|
|
3167
3189
|
div[data-slot="conversation.chat.node"] pre{
|
|
3168
3190
|
border:2px solid var(--dut-ink) !important;
|
|
@@ -3171,8 +3193,7 @@ div[data-slot="conversation.chat.node"] pre{
|
|
|
3171
3193
|
background:var(--dut-paper) !important;
|
|
3172
3194
|
}
|
|
3173
3195
|
div[data-slot="conversation.chat.node"] :not(pre)>code{
|
|
3174
|
-
|
|
3175
|
-
color:#101418 !important;
|
|
3196
|
+
color:var(--dut-accent) !important;
|
|
3176
3197
|
border:none !important;
|
|
3177
3198
|
border-radius:6px !important;
|
|
3178
3199
|
padding:1px 6px !important;
|
|
@@ -3184,10 +3205,10 @@ div[data-composer-card]{
|
|
|
3184
3205
|
background:var(--dut-paper) !important;
|
|
3185
3206
|
}
|
|
3186
3207
|
/* context-occupancy ring: the stock track/fill both read near-ink on this
|
|
3187
|
-
skin; give the track a quiet gray and the used arc the
|
|
3208
|
+
skin; give the track a quiet gray and the used arc the red accent
|
|
3188
3209
|
(scoped to the composer's svg so the class-substring match stays safe) */
|
|
3189
3210
|
div[data-composer-card] svg [class*="track"]{stroke:var(--dut-scroll-1)}
|
|
3190
|
-
div[data-composer-card] svg [class*="fill"]{stroke:var(--dut-
|
|
3211
|
+
div[data-composer-card] svg [class*="fill"]{stroke:var(--dut-accent)}
|
|
3191
3212
|
/* sidebar new-session button: lime sticker. Matched by its CSS-module class,
|
|
3192
3213
|
NOT the aria-label — the brand row button shares the same "新建会话"
|
|
3193
3214
|
label (it doubles as the new-session shortcut) and must stay plain. */
|
|
@@ -4038,63 +4059,63 @@ function linesToRecord(text, separator) {
|
|
|
4038
4059
|
function recordToLines(record, separator) {
|
|
4039
4060
|
return Object.entries(record).map(([key, value]) => `${key}${separator}${value}`).join('\n');
|
|
4040
4061
|
}
|
|
4041
|
-
exports.MCP_CSS = `
|
|
4042
|
-
.dut-mcp{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
4043
|
-
.dut-mcp-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
4044
|
-
.dut-mcp-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4045
|
-
.dut-mcp-count{font-size:11.5px;color:var(--dsw-alias-label-secondary);padding:2px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
4046
|
-
.dut-mcp-spacer{flex:1}
|
|
4047
|
-
.dut-mcp-btn{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
|
|
4048
|
-
.dut-mcp-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
4049
|
-
.dut-mcp-btn:disabled{opacity:.5;cursor:default}
|
|
4050
|
-
.dut-mcp-btn.dut-mcp-del:hover{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}
|
|
4051
|
-
.dut-mcp-btn.dut-mcp-confirm{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);font-weight:600}
|
|
4052
|
-
.dut-mcp-body{display:grid;gap:2px;margin-top:4px}
|
|
4053
|
-
.dut-mcp-row{display:grid;gap:6px;padding:10px 16px;border-radius:12px}
|
|
4054
|
-
.dut-mcp-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4055
|
-
.dut-mcp-row-main{display:flex;align-items:center;gap:8px;min-width:0}
|
|
4056
|
-
.dut-mcp-name{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
4057
|
-
.dut-mcp-badge{flex:none;font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4058
|
-
.dut-mcp-badge.dut-mcp-ok{background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);border-color:transparent;color:var(--dsw-alias-state-success-primary)}
|
|
4059
|
-
.dut-mcp-badge.dut-mcp-err{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 12%,transparent);border-color:transparent;color:var(--dsw-alias-state-error-primary)}
|
|
4060
|
-
.dut-mcp-badge.dut-mcp-warn{background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 14%,transparent);border-color:transparent;color:var(--dsw-alias-state-warn-label)}
|
|
4061
|
-
.dut-mcp-sub{font-size:11.5px;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
4062
|
-
.dut-mcp-toggle{flex:none;font-size:11.5px;color:var(--dsw-alias-label-tertiary);background:transparent;border:none;padding:0;cursor:pointer;text-align:left}
|
|
4063
|
-
.dut-mcp-toggle:hover{color:var(--dsw-alias-label-primary)}
|
|
4064
|
-
.dut-mcp-tools{margin-left:2px;display:flex;flex-wrap:wrap;gap:4px}
|
|
4065
|
-
.dut-mcp-tool{font-size:11px;line-height:1;padding:3px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4066
|
-
.dut-mcp-note{margin:2px 16px 0;padding:8px 12px;border-radius:10px;font-size:11.5px;line-height:1.55;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
4067
|
-
.dut-mcp-empty{padding:32px 16px;text-align:center;font-size:12.5px;color:var(--dsw-alias-label-secondary)}
|
|
4068
|
-
.dut-mcp-alert{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4069
|
-
.dut-mcp-notice{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4070
|
-
.dut-mcp-off{padding:20px 16px;display:grid;gap:12px}
|
|
4071
|
-
.dut-mcp-off p{margin:0;font-size:12.5px;line-height:1.6;color:var(--dsw-alias-label-secondary)}
|
|
4072
|
-
.dut-mcp-overlay{z-index:1100;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}
|
|
4073
|
-
.dut-mcp-mask{background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);position:absolute;inset:0}
|
|
4074
|
-
.dut-mcp-panel{z-index:1;background:var(--dsw-alias-bg-layer-2);box-sizing:border-box;width:720px;max-width:calc(100vw - 48px);height:min(700px,100vh - 48px);box-shadow:var(--dsw-shadow-lv3);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:20px;display:flex;flex-direction:column;overflow:hidden}
|
|
4075
|
-
.dut-mcp-panel-head{box-sizing:border-box;flex:none;display:flex;align-items:center;gap:10px;height:52px;padding:0 12px 0 20px}
|
|
4076
|
-
.dut-mcp-panel-head h2{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4077
|
-
.dut-mcp-panel-close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-primary);background:transparent;border:none;border-radius:28px;display:inline-flex;justify-content:center;align-items:center;padding:0;font-size:13px}
|
|
4078
|
-
.dut-mcp-panel-close:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4079
|
-
.dut-mcp-tabs{flex:none;display:inline-flex;padding:3px;gap:3px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;background:var(--dsw-alias-bg-layer-2);margin:0 20px 10px;align-self:flex-start}
|
|
4080
|
-
.dut-mcp-tabs button{border:none;border-radius:7px;padding:5px 14px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12.5px;cursor:pointer}
|
|
4081
|
-
.dut-mcp-tabs button.dut-mcp-tab-on{background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 12%,transparent);color:var(--dsw-alias-state-business-primary);font-weight:600}
|
|
4082
|
-
.dut-mcp-form{flex:1;min-height:0;overflow-y:auto;padding:0 20px 20px;display:grid;gap:12px;align-content:start}
|
|
4083
|
-
.dut-mcp-field{display:grid;gap:6px}
|
|
4084
|
-
.dut-mcp-field>span{font-size:12px;font-weight:600;color:var(--dsw-alias-label-primary)}
|
|
4085
|
-
.dut-mcp-field small{font-size:11px;line-height:1.5;color:var(--dsw-alias-label-tertiary)}
|
|
4086
|
-
.dut-mcp-input{box-sizing:border-box;width:100%;height:34px;padding:0 10px;border-radius:9px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px}
|
|
4087
|
-
.dut-mcp-input:focus{outline:none;border-color:color-mix(in srgb,var(--dsw-alias-state-business-primary) 55%,transparent)}
|
|
4088
|
-
.dut-mcp-input:disabled{opacity:.55;cursor:not-allowed}
|
|
4089
|
-
textarea.dut-mcp-input{height:auto;min-height:72px;padding:8px 10px;line-height:1.5;resize:vertical;font-family:var(--dsw-font-markdown-code-block-font-family, Consolas, monospace);font-size:12px}
|
|
4090
|
-
textarea.dut-mcp-input-lg{min-height:120px}
|
|
4091
|
-
textarea.dut-mcp-yaml{min-height:320px}
|
|
4092
|
-
.dut-mcp-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
|
|
4093
|
-
.dut-mcp-field .dut-seg{width:fit-content}
|
|
4094
|
-
.dut-mcp-row2 .dut-seg{height:34px;box-sizing:border-box;align-items:center}
|
|
4095
|
-
.dut-mcp-row2 .dut-seg button{flex:none;white-space:nowrap;padding:0 16px;height:26px}
|
|
4096
|
-
.dut-mcp-foot{flex:none;display:flex;align-items:center;gap:8px;justify-content:flex-end;padding:12px 20px 16px;border-top:1px solid var(--dsw-alias-border-l1)}
|
|
4097
|
-
.dut-mcp-error{margin:0 20px 10px;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4062
|
+
exports.MCP_CSS = `
|
|
4063
|
+
.dut-mcp{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
4064
|
+
.dut-mcp-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
4065
|
+
.dut-mcp-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4066
|
+
.dut-mcp-count{font-size:11.5px;color:var(--dsw-alias-label-secondary);padding:2px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
4067
|
+
.dut-mcp-spacer{flex:1}
|
|
4068
|
+
.dut-mcp-btn{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
|
|
4069
|
+
.dut-mcp-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
4070
|
+
.dut-mcp-btn:disabled{opacity:.5;cursor:default}
|
|
4071
|
+
.dut-mcp-btn.dut-mcp-del:hover{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent)}
|
|
4072
|
+
.dut-mcp-btn.dut-mcp-confirm{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 55%,transparent);color:var(--dsw-alias-state-error-primary);font-weight:600}
|
|
4073
|
+
.dut-mcp-body{display:grid;gap:2px;margin-top:4px}
|
|
4074
|
+
.dut-mcp-row{display:grid;gap:6px;padding:10px 16px;border-radius:12px}
|
|
4075
|
+
.dut-mcp-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4076
|
+
.dut-mcp-row-main{display:flex;align-items:center;gap:8px;min-width:0}
|
|
4077
|
+
.dut-mcp-name{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
4078
|
+
.dut-mcp-badge{flex:none;font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4079
|
+
.dut-mcp-badge.dut-mcp-ok{background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);border-color:transparent;color:var(--dsw-alias-state-success-primary)}
|
|
4080
|
+
.dut-mcp-badge.dut-mcp-err{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 12%,transparent);border-color:transparent;color:var(--dsw-alias-state-error-primary)}
|
|
4081
|
+
.dut-mcp-badge.dut-mcp-warn{background:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 14%,transparent);border-color:transparent;color:var(--dsw-alias-state-warn-label)}
|
|
4082
|
+
.dut-mcp-sub{font-size:11.5px;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
|
|
4083
|
+
.dut-mcp-toggle{flex:none;font-size:11.5px;color:var(--dsw-alias-label-tertiary);background:transparent;border:none;padding:0;cursor:pointer;text-align:left}
|
|
4084
|
+
.dut-mcp-toggle:hover{color:var(--dsw-alias-label-primary)}
|
|
4085
|
+
.dut-mcp-tools{margin-left:2px;display:flex;flex-wrap:wrap;gap:4px}
|
|
4086
|
+
.dut-mcp-tool{font-size:11px;line-height:1;padding:3px 8px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4087
|
+
.dut-mcp-note{margin:2px 16px 0;padding:8px 12px;border-radius:10px;font-size:11.5px;line-height:1.55;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1)}
|
|
4088
|
+
.dut-mcp-empty{padding:32px 16px;text-align:center;font-size:12.5px;color:var(--dsw-alias-label-secondary)}
|
|
4089
|
+
.dut-mcp-alert{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4090
|
+
.dut-mcp-notice{margin:8px 16px 0;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4091
|
+
.dut-mcp-off{padding:20px 16px;display:grid;gap:12px}
|
|
4092
|
+
.dut-mcp-off p{margin:0;font-size:12.5px;line-height:1.6;color:var(--dsw-alias-label-secondary)}
|
|
4093
|
+
.dut-mcp-overlay{z-index:1100;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}
|
|
4094
|
+
.dut-mcp-mask{background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);position:absolute;inset:0}
|
|
4095
|
+
.dut-mcp-panel{z-index:1;background:var(--dsw-alias-bg-layer-2);box-sizing:border-box;width:720px;max-width:calc(100vw - 48px);height:min(700px,100vh - 48px);box-shadow:var(--dsw-shadow-lv3);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border-radius:20px;display:flex;flex-direction:column;overflow:hidden}
|
|
4096
|
+
.dut-mcp-panel-head{box-sizing:border-box;flex:none;display:flex;align-items:center;gap:10px;height:52px;padding:0 12px 0 20px}
|
|
4097
|
+
.dut-mcp-panel-head h2{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4098
|
+
.dut-mcp-panel-close{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-primary);background:transparent;border:none;border-radius:28px;display:inline-flex;justify-content:center;align-items:center;padding:0;font-size:13px}
|
|
4099
|
+
.dut-mcp-panel-close:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4100
|
+
.dut-mcp-tabs{flex:none;display:inline-flex;padding:3px;gap:3px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;background:var(--dsw-alias-bg-layer-2);margin:0 20px 10px;align-self:flex-start}
|
|
4101
|
+
.dut-mcp-tabs button{border:none;border-radius:7px;padding:5px 14px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:12.5px;cursor:pointer}
|
|
4102
|
+
.dut-mcp-tabs button.dut-mcp-tab-on{background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 12%,transparent);color:var(--dsw-alias-state-business-primary);font-weight:600}
|
|
4103
|
+
.dut-mcp-form{flex:1;min-height:0;overflow-y:auto;padding:0 20px 20px;display:grid;gap:12px;align-content:start}
|
|
4104
|
+
.dut-mcp-field{display:grid;gap:6px}
|
|
4105
|
+
.dut-mcp-field>span{font-size:12px;font-weight:600;color:var(--dsw-alias-label-primary)}
|
|
4106
|
+
.dut-mcp-field small{font-size:11px;line-height:1.5;color:var(--dsw-alias-label-tertiary)}
|
|
4107
|
+
.dut-mcp-input{box-sizing:border-box;width:100%;height:34px;padding:0 10px;border-radius:9px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px}
|
|
4108
|
+
.dut-mcp-input:focus{outline:none;border-color:color-mix(in srgb,var(--dsw-alias-state-business-primary) 55%,transparent)}
|
|
4109
|
+
.dut-mcp-input:disabled{opacity:.55;cursor:not-allowed}
|
|
4110
|
+
textarea.dut-mcp-input{height:auto;min-height:72px;padding:8px 10px;line-height:1.5;resize:vertical;font-family:var(--dsw-font-markdown-code-block-font-family, Consolas, monospace);font-size:12px}
|
|
4111
|
+
textarea.dut-mcp-input-lg{min-height:120px}
|
|
4112
|
+
textarea.dut-mcp-yaml{min-height:320px}
|
|
4113
|
+
.dut-mcp-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}
|
|
4114
|
+
.dut-mcp-field .dut-seg{width:fit-content}
|
|
4115
|
+
.dut-mcp-row2 .dut-seg{height:34px;box-sizing:border-box;align-items:center}
|
|
4116
|
+
.dut-mcp-row2 .dut-seg button{flex:none;white-space:nowrap;padding:0 16px;height:26px}
|
|
4117
|
+
.dut-mcp-foot{flex:none;display:flex;align-items:center;gap:8px;justify-content:flex-end;padding:12px 20px 16px;border-top:1px solid var(--dsw-alias-border-l1)}
|
|
4118
|
+
.dut-mcp-error{margin:0 20px 10px;padding:8px 12px;border-radius:10px;font-size:12px;line-height:1.5;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4098
4119
|
`;
|
|
4099
4120
|
/** Install the MCP stylesheet once (idempotent); returns the disposer. */
|
|
4100
4121
|
function installMcpStyles() {
|
|
@@ -4755,32 +4776,32 @@ async function searchRequest(init) {
|
|
|
4755
4776
|
}
|
|
4756
4777
|
return body.value;
|
|
4757
4778
|
}
|
|
4758
|
-
exports.SEARCH_CSS = `
|
|
4759
|
-
.dut-search{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
4760
|
-
.dut-search-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
4761
|
-
.dut-search-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4762
|
-
.dut-search-head p{margin:4px 0 0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}
|
|
4763
|
-
.dut-search-note{padding:0 16px;font-size:11.5px;line-height:1.55;color:var(--dsw-alias-label-tertiary)}
|
|
4764
|
-
.dut-search-path{font-family:var(--dsw-font-markdown-code-block-font-family,Consolas,monospace);font-size:11px;color:var(--dsw-alias-label-secondary)}
|
|
4765
|
-
.dut-search-grid{display:grid;gap:2px;margin-top:4px}
|
|
4766
|
-
.dut-search-row{display:grid;gap:6px;padding:10px 16px;border-radius:12px}
|
|
4767
|
-
.dut-search-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4768
|
-
.dut-search-row-main{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
|
|
4769
|
-
.dut-search-name{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary)}
|
|
4770
|
-
.dut-search-badge{flex:none;font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4771
|
-
.dut-search-badge.dut-search-ok{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary) 45%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4772
|
-
.dut-search-badge.dut-search-key{border-color:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 45%,transparent);color:var(--dsw-alias-state-warn-label)}
|
|
4773
|
-
.dut-search-badge.dut-search-req{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 45%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4774
|
-
.dut-search-spacer{flex:1}
|
|
4775
|
-
.dut-search-input{box-sizing:border-box;height:30px;width:280px;max-width:100%;padding:0 10px;border-radius:9px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:12.5px}
|
|
4776
|
-
.dut-search-input:focus{outline:none;border-color:color-mix(in srgb,var(--dsw-alias-state-business-primary) 55%,transparent)}
|
|
4777
|
-
.dut-search-select{height:28px;padding:0 8px;border:1px solid var(--dsw-alias-border-l1);border-radius:9px;background:var(--dsw-alias-bg-layer-2);color:inherit;font:inherit;font-size:12.5px;cursor:pointer;color-scheme:light dark}
|
|
4778
|
-
.dut-search-select:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}
|
|
4779
|
-
.dut-search-btn{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:11.5px;cursor:pointer;transition:background .15s ease,color .15s ease}
|
|
4780
|
-
.dut-search-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
4781
|
-
.dut-search-btn:disabled{opacity:.5;cursor:default}
|
|
4782
|
-
.dut-search-status{padding:3px 10px;border-radius:999px;font-size:11.5px;background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4783
|
-
.dut-search-status.dut-search-err{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4779
|
+
exports.SEARCH_CSS = `
|
|
4780
|
+
.dut-search{display:grid;gap:12px;max-width:680px;padding:6px 2px 36px}
|
|
4781
|
+
.dut-search-head{display:flex;align-items:center;gap:10px;padding:14px 16px 0}
|
|
4782
|
+
.dut-search-head h2{margin:0;font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--dsw-alias-label-primary)}
|
|
4783
|
+
.dut-search-head p{margin:4px 0 0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}
|
|
4784
|
+
.dut-search-note{padding:0 16px;font-size:11.5px;line-height:1.55;color:var(--dsw-alias-label-tertiary)}
|
|
4785
|
+
.dut-search-path{font-family:var(--dsw-font-markdown-code-block-font-family,Consolas,monospace);font-size:11px;color:var(--dsw-alias-label-secondary)}
|
|
4786
|
+
.dut-search-grid{display:grid;gap:2px;margin-top:4px}
|
|
4787
|
+
.dut-search-row{display:grid;gap:6px;padding:10px 16px;border-radius:12px}
|
|
4788
|
+
.dut-search-row:hover{background:var(--dsw-alias-interactive-bg-hover)}
|
|
4789
|
+
.dut-search-row-main{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
|
|
4790
|
+
.dut-search-name{font-size:13.5px;font-weight:600;color:var(--dsw-alias-label-primary)}
|
|
4791
|
+
.dut-search-badge{flex:none;font-size:11px;line-height:1;padding:4px 9px;border-radius:999px;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary)}
|
|
4792
|
+
.dut-search-badge.dut-search-ok{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary) 45%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4793
|
+
.dut-search-badge.dut-search-key{border-color:color-mix(in srgb,var(--dsw-alias-state-warn-primary) 45%,transparent);color:var(--dsw-alias-state-warn-label)}
|
|
4794
|
+
.dut-search-badge.dut-search-req{border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary) 45%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4795
|
+
.dut-search-spacer{flex:1}
|
|
4796
|
+
.dut-search-input{box-sizing:border-box;height:30px;width:280px;max-width:100%;padding:0 10px;border-radius:9px;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:12.5px}
|
|
4797
|
+
.dut-search-input:focus{outline:none;border-color:color-mix(in srgb,var(--dsw-alias-state-business-primary) 55%,transparent)}
|
|
4798
|
+
.dut-search-select{height:28px;padding:0 8px;border:1px solid var(--dsw-alias-border-l1);border-radius:9px;background:var(--dsw-alias-bg-layer-2);color:inherit;font:inherit;font-size:12.5px;cursor:pointer;color-scheme:light dark}
|
|
4799
|
+
.dut-search-select:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}
|
|
4800
|
+
.dut-search-btn{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;border:1px solid var(--dsw-alias-border-l1);background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:11.5px;cursor:pointer;transition:background .15s ease,color .15s ease}
|
|
4801
|
+
.dut-search-btn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
|
|
4802
|
+
.dut-search-btn:disabled{opacity:.5;cursor:default}
|
|
4803
|
+
.dut-search-status{padding:3px 10px;border-radius:999px;font-size:11.5px;background:color-mix(in srgb,var(--dsw-alias-state-success-primary) 12%,transparent);color:var(--dsw-alias-state-success-primary)}
|
|
4804
|
+
.dut-search-status.dut-search-err{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 10%,transparent);color:var(--dsw-alias-state-error-primary)}
|
|
4784
4805
|
`;
|
|
4785
4806
|
let stylesInstalled = false;
|
|
4786
4807
|
function installSearchStyles() {
|