dsh-claude-style 0.16.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/CHANGELOG.md +62 -0
- package/LICENSE +3 -2
- package/README.en.md +1 -0
- package/README.md +6 -0
- package/THIRD_PARTY_NOTICES.md +2 -0
- package/docs/FEATURES.en.md +4 -3
- package/docs/FEATURES.md +4 -3
- package/docs/SETTINGS.en.md +12 -6
- package/docs/SETTINGS.md +12 -6
- package/docs/STYLE.md +40 -1
- package/lib/assets/0443f196403b.js.br +0 -0
- package/lib/assets/39f1a2e69bb7.js.br +0 -0
- package/lib/assets/4d55814bc60a.js.br +0 -0
- package/lib/assets/6c257991027d.js.br +0 -0
- package/lib/assets/9abad5da303e.js.br +0 -0
- package/lib/assets/b55a1acf34e0.js.br +0 -0
- package/lib/assets/d2064c247435.js.br +0 -0
- package/lib/assets/manifest.json +28 -28
- package/lib/client.js +37 -11
- package/lib/host/brand.js +70 -1
- package/lib/host/cache-file.js +63 -25
- package/lib/host/harness-home.js +7 -3
- package/lib/host/index.js +4 -1
- package/lib/host/package-root.js +15 -13
- package/lib/host/peakrate.js +7 -4
- package/lib/host/routes.js +164 -72
- package/lib/host/search.js +44 -2
- package/lib/host/settings.js +137 -43
- package/lib/host/usage-record.js +5 -2
- package/lib/host/usage.js +57 -5
- package/lib/model-descriptions.json +0 -1322
- package/package.json +1 -1
- package/lib/assets/1cefeb3d67c7.js.br +0 -0
- package/lib/assets/1da1959a3cb1.js.br +0 -0
- package/lib/assets/2c3bd0b6c22c.js.br +0 -0
- package/lib/assets/34d559377558.js.br +0 -0
- package/lib/assets/acf9cf79c43e.js.br +0 -0
- package/lib/assets/b7ec75cf39a7.js.br +0 -0
- package/lib/assets/dab5fb383802.js.br +0 -0
- package/lib/host/http.js +0 -74
- package/lib/host/session-events.js +0 -40
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,68 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.16.1] - 2026-10-17
|
|
8
|
+
|
|
9
|
+
[中文](#cn-0.16.1) | [English](#en-0.16.1)
|
|
10
|
+
|
|
11
|
+
<h3 id="cn-0.16.1">新增功能</h3>
|
|
12
|
+
|
|
13
|
+
- **读者自己发出的长消息可以收起来**:一条比对话装得下的更长的消息收在一个上限高度里,下缘渐隐,气泡下面多出一个「展开全文」;按下它整条消息放回来,再按收起,按过之后这条消息在本次会话里保持读者选的样子。消息一出现就收,宿主那一条即时回显也一样,之后换成正式那一条时仍然收着;附件、时间与复制按钮都不受影响。设置页把「自动开合与卷帘门」关掉时这项跟着关掉。
|
|
14
|
+
- **新会话页有了水波纹字符背景**:页面背景是一片每秒重绘两次的数字与字母,被缓缓漂移的云层遮住;点击页面荡开水波,波速在点击处最快、越远越慢,被扫过的字符显现出来,波前染蓝、尾迹留灰并淡去。设置页「外观」页首页版面下新增同名开关,默认关闭、标题旁带「实验性」标记,设置存为 `homeRipple`;宿主半边是旧版本时(更新插件后没有重启宿主),这一项改动保存不下来,重启宿主后恢复正常。
|
|
15
|
+
- **设置页「通用」多了页面缩放**:整页按 0.8x、1x、1.25x、1.5x 绘制,界面、文字与控件一起变大或变小,窗口尺寸不变、页面按缩放之后剩下的空间重新排布,「随系统」保持系统与 DSH 给出的尺寸;设置页自己也按同一倍数绘制,档位可以在这一页上直接比出来。贴着输入区展开的模型、努力度与权限弹层仍与各自的按钮对齐。设置存为 `pageZoom`。
|
|
16
|
+
- **代码字体先试 Anthropic Mono**:把 Anthropic 的等宽字体装进系统或放进 `$DSH_HOME/dsh-claude-style/fonts/` 之后,代码块、行内代码与等宽标签都由这款字体绘制;没有这份文件时仍用随包分发的 JetBrains Mono,中文照旧落到系统中文字体。字体文件只在仓库里提供,npm 包不带。
|
|
17
|
+
|
|
18
|
+
### 体验优化
|
|
19
|
+
|
|
20
|
+
- **页面缩放的标题旁标出「实验性」**:设置页「通用」页的「页面缩放」一行带上一枚实验性标签,与插件页标记实验性插件的那一枚相同。
|
|
21
|
+
- **深色弹层的边只剩边框本身**:皮肤自建的弹层卡片与它重绘的账户菜单、首页选择器不再在边框外侧铺一道 3px 的黑色沉降,卡片的外缘就是那道高光边线,两层投影照旧。
|
|
22
|
+
- **工作台首页的问候语与用量面板之间只剩一个列间距**:标题块不再为下方预留 30px,面板随之整体上移 30px,问候语与面板之间只留首屏列自己的 10px 间距;经典版面上问候语与输入卡片之间的那份间距保持原样。
|
|
23
|
+
- **主题风格的两张卡片左图右文**:Claude 卡片是星芒标志加 Claude 文字标志,DeepSeek 卡片是它的标志与文字合成的一件图形,均沿用插件已有的图形资源,不再另写文字。
|
|
24
|
+
- **「动画」设为「减弱」时,动效页的预览卡仍能分清两档**:状态行画法、光标动画、新文字淡入与消息气泡动画的卡片各停在一帧——扫光的高光带停在字中、光标带滑行拖尾、末几个字停在渐淡的各档、气泡停在长大或升起的途中;卡片略变暗,行下方写明这一项此时不生效,选择仍可修改。
|
|
25
|
+
- **上下文占用那一环改成一枚饼**:已占用与未占用画成两段同心扇区,少数的那一块撑到画布半径、多数的那一块往里收一档,收多少随占用比例变化——越接近对半越小,15% 与 85% 互为镜像,对半时是两枚等大的半圆。两块之间是一道 1.2px 宽的缝,由两条描边各让一半:占用那块的一条从满宽收到 0,未占用那块的一条反过来,读数跨过对半时两边都不跳;撑出去的那一块压在上面。色带照旧按占用取色,读数与这一块同色;触发按钮的位置与高度、输入行给它留的宽度都不变,饼比原来那枚图标大一圈、与它同中心。
|
|
26
|
+
- **独立成行的数字改成从当前读数计数到新读数**:每个数字都留在原位连续增长(或减少)到新值,答案流式输出期间接连更新时后一次从当时显示的值接着走,切换会话时也从上一段的数字计数到新一段的。缓存命中那一截的色带只染数字与百分号,「缓存命中」四个字留在这一行自己的颜色。
|
|
27
|
+
- **五个开关改成直接装卸**:关闭输入框插入符动效、吉祥物、模型选择器、侧栏账号区或输入区重绘范围时,对应功能自己的监听、尺寸观察者与每帧同步一并撤掉,宿主原来的界面随即回来;重新打开就在原位装回并重画,不用刷新页面。Ctrl+, 打开设置的快捷键改由设置页承担,关掉侧栏账号区之后仍然可用。
|
|
28
|
+
- **远程页面上的设置也能改**:宿主把它信任的地址上打开的页面当成同一个使用者的页面,经局域网地址或隧道打开的页面现在与运行 DSH 的电脑上那一页读写同一份设置,任意一边改动,另一边不需要刷新就会跟上;设置页不再带着说明行把控件全部禁用。
|
|
29
|
+
|
|
30
|
+
### 问题修复
|
|
31
|
+
|
|
32
|
+
- **长消息的起飞带着消息自己的字**:折叠收住的长消息在飞行时,替身从第一帧起就显示这条消息的开头,也就是它落到那一行里显示的内容;盒子从输入框自己的高度收拢到折好之后的高度,读者看到的是消息从输入框里出来、一边飞一边收成它自己的样子。
|
|
33
|
+
- **另一款皮肤作画时本主题整页让出,设置页也随主题撤下**:页面上的侧栏、对话、输入区与设置页一起离场,只留那款皮肤与宿主自己的界面;在皮肤中心里本插件那一行选回本主题,这些内容与读者存下的偏好一起回来。
|
|
34
|
+
- **深色模式下分段控件的滑块有了底色**:设置页的页签与并排开关、经典首页的权限分段这几处同一种控件,当前项在深色里读得出来——滑块比它的底座亮一档,不再与底座同色;浅色与 DeepSeek 深色配色下同样成立。
|
|
35
|
+
|
|
36
|
+
### 其他变更
|
|
37
|
+
|
|
38
|
+
- **用户消息的两处宿主查询移进引擎层**:气泡的查找(按是否真的刷上底色逐层向下)与用户行的选择器此前分别写在 chat-send 与 scroll-owner 里,折叠消息也要用它们;现在都放在 `packages/engine/src/chat-dom.ts`,两处改为引用,颜色分量与透明度的读取也一并搬过去。读者看到的行为不变。
|
|
39
|
+
|
|
40
|
+
<h3 id="en-0.16.1">New Features</h3>
|
|
41
|
+
|
|
42
|
+
- **A long message the reader sent can be folded away**: a message taller than the conversation can spare is held under a cap with its bottom edge softened, and the skin draws a Show the whole message control under the bubble; pressing it hands the whole message back and pressing it again folds it, and after that the message keeps what he chose for the rest of the session. The fold lands as soon as the message does — the host's own echo included — and stands when the durable row takes its place; the attachments, the time and the copy action are untouched. Turning the chat area's folding off turns this off with it.
|
|
43
|
+
- **The new-conversation page gets a ripple glyph background**: the page's background is a field of digits and letters redrawn twice a second under a slowly drifting cloud; a press sends out waves that are fastest at the click and slow with distance, and the characters a wave passes show, blue at its front and grey in its wake before fading. A switch of the same name sits under the home layout on the Appearance tab, off until it is turned on and marked experimental, stored as `homeRipple`; with an older host half still running (the plugin updated without restarting the host), a change to it does not save until the host restarts.
|
|
44
|
+
- **The settings page's General tab gains page zoom**: the page is drawn at 0.8x, 1x, 1.25x or 1.5x — the interface, its text and its controls growing or shrinking together while the window keeps its size and the page lays itself out in the room left over — and Follow the system keeps the size the system and DSH give it; the settings page is drawn at the same scale, so a level can be compared on it. The model, reasoning-effort and permission popovers that open off the composer stay on their own triggers. The setting is stored as `pageZoom`.
|
|
45
|
+
- **Code is drawn in Anthropic Mono first**: once Anthropic's mono face is installed on the system or dropped into `$DSH_HOME/dsh-claude-style/fonts/`, code blocks, inline code and the mono labels take it; without the file the JetBrains Mono copy the package carries still answers, and Chinese text keeps falling through to the system's Chinese faces. The face is served from this repository only, not from the npm package.
|
|
46
|
+
|
|
47
|
+
### Improvements
|
|
48
|
+
|
|
49
|
+
- **Page zoom is labelled experimental**: the row on the settings page's General tab carries the experimental tag, the same one the plugin page marks an experimental package with.
|
|
50
|
+
- **A dark popover's edge is its border again**: the skin's own popover cards and the account menu and hero-row pickers it repaints no longer lay a 3px black falloff outside the border, so the card's outer edge is the highlight line itself and the two drops stay as they were.
|
|
51
|
+
- **The studio home's greeting and usage panel sit one column gap apart**: the headline block no longer reserves 30px below itself, so the panel moves up by 30px and only the hero column's own 10px gap stands between them; the classic layout keeps the spacing under its greeting.
|
|
52
|
+
- **The theme style cards read mark left, word right**: the Claude card carries the starburst beside the Claude wordmark and the DeepSeek card its mark and word as one lockup, both from the plugin's own artwork instead of typed text.
|
|
53
|
+
- **While Animation is Reduced the Motion tab's cards still tell their two choices apart**: the status paint, caret, text fade and message entrance cards each hold one frame — the sweep's band parked mid-word, the caret with its glide trail, the last characters on their fading steps, the bubble part-grown or part-risen; the cards dim and the row says the choice takes no effect now, while it stays editable.
|
|
54
|
+
- **The context meter's ring is a pie**: the occupied share and the rest are two sectors on one centre. The smaller share keeps the box's radius and the larger one steps in by up to 1.3px, easing to nothing as the split comes even — so 15% and 85% mirror each other and an even split is two half discs of one radius. The 1.2px seam between them is shared by two strokes, the occupied sector's running from its whole width down to nothing and the plate's the mirror, so no edge jumps as the reading crosses the even split, and the part that stands out is painted last. It still takes the colour band its occupancy falls on, and the reading beside it is painted the same colour. The trigger keeps its box, its height and the room the row keeps for it, and the pie is one pixel larger than the old icon on each side, centred on it.
|
|
55
|
+
- **The line of numbers counts to a new reading from the one it shows**: each figure stays where it is and grows (or falls) continuously to its new value, a reading that lands while the count is in flight carries on from the value on show, and another session's numbers are counted to from the ones the line was showing. The cache share's colour band marks its figure and percent sign alone, the words before them keeping the line's own tone.
|
|
56
|
+
- **Five switches now install and remove their feature whole**: turning off the composer caret motion, the mascot, the model picker, the sidebar account area or the composer restyle's scope takes that feature's listeners, size observers and per-frame work off the page with the host's own interface coming back, and turning it on again installs it in place and repaints without a reload. The Ctrl+, shortcut for settings now belongs to the settings page, so it keeps working with the sidebar account area switched off.
|
|
57
|
+
- **Settings can be changed from a remote page**: the host treats a page opened at an address it trusts as the same reader's page, so a page reached through a LAN address or a tunnel now reads and writes the same settings document as the page on the computer running DSH — a change made on one side reaches the other without a reload, and the settings page no longer opens with a notice and every control disabled.
|
|
58
|
+
|
|
59
|
+
### Bug Fixes
|
|
60
|
+
|
|
61
|
+
- **A folded message's flight carries the message's own words**: the stand-in of a long message the fold holds shows the message from its own first line — what the row holds — from its first frame, and its box closes from the composer's own height down to the folded one, so the reader watches his message leave the composer and settle into the shape it lands in.
|
|
62
|
+
- **With another skin painting the page this skin hands over the whole page, its settings page included**: the sidebar, the conversation, the composer and the settings page all leave together, and the skin and the host paint the page alone; picking this plugin's row in the skin center brings them back together with the preferences the reader saved.
|
|
63
|
+
- **The segmented controls' slider carries a fill in dark mode**: the settings page's tabs and paired switches and the classic home's permission presets show which item is current, the pill sitting one step lighter than its groove instead of the same grey; the light and DeepSeek dark palettes read the same way.
|
|
64
|
+
|
|
65
|
+
### Chores
|
|
66
|
+
|
|
67
|
+
- **Two host reads of a user message moved into the engine**: the bubble lookup (walking down to the first element that really paints a fill) and the user row selector lived in chat-send and scroll-owner; the message fold needs both, so they now stand in `packages/engine/src/chat-dom.ts` and the two former homes read them from there, with the colour-part and alpha reads moved along. Nothing the reader sees changes.
|
|
68
|
+
|
|
7
69
|
## [0.16.0] - 2026-10-16
|
|
8
70
|
|
|
9
71
|
[中文](#cn-0.16.0) | [English](#en-0.16.0)
|
package/LICENSE
CHANGED
|
@@ -24,8 +24,9 @@ SOFTWARE.
|
|
|
24
24
|
|
|
25
25
|
Font files notice:
|
|
26
26
|
|
|
27
|
-
- `packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf
|
|
28
|
-
`packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf`
|
|
27
|
+
- `packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf`,
|
|
28
|
+
`packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf` and
|
|
29
|
+
`packages/assets/src/fonts/anthropic/AnthropicMonoWeb.ttf` are
|
|
29
30
|
proprietary typefaces of Anthropic, extracted from Anthropic's web products.
|
|
30
31
|
They are included in this repository for personal use only and are **not**
|
|
31
32
|
covered by the MIT license above; all rights remain with Anthropic. The npm
|
package/README.en.md
CHANGED
|
@@ -79,6 +79,7 @@ What the plugin does and what each setting changes is documented: [Features](doc
|
|
|
79
79
|
|---|---|---|
|
|
80
80
|
| Anthropic Sans Web Text | Interface / UI | [`packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf) |
|
|
81
81
|
| Anthropic Serif Web Text | Conversation body / Markdown | [`packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf) |
|
|
82
|
+
| Anthropic Mono Web | Code / inline code | [`packages/assets/src/fonts/anthropic/AnthropicMonoWeb.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicMonoWeb.ttf) |
|
|
82
83
|
|
|
83
84
|
To enable the Anthropic fonts, choose one of the following:
|
|
84
85
|
|
package/README.md
CHANGED
|
@@ -88,6 +88,12 @@ dsh plugin --profile web add dsh-claude-style # npm 包(推
|
|
|
88
88
|
|
|
89
89
|
> **重要:Anthropic 没有对其字体进行公开发行,[`点击此处可以查看`](https://github.com/Nwflower/dsh-claude-style/tree/master/packages/assets/src/fonts/anthropic),请自行下载,仅供学习或研究用途**。
|
|
90
90
|
|
|
91
|
+
| 字体 | 用途 | 文件 |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| Anthropic Sans Web Text | 界面 | [`packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf) |
|
|
94
|
+
| Anthropic Serif Web Text | 对话正文 / Markdown | [`packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf) |
|
|
95
|
+
| Anthropic Mono Web | 代码 / 行内代码 | [`packages/assets/src/fonts/anthropic/AnthropicMonoWeb.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/master/packages/assets/src/fonts/anthropic/AnthropicMonoWeb.ttf) |
|
|
96
|
+
|
|
91
97
|
Anthropic 字体启用(二选一):
|
|
92
98
|
|
|
93
99
|
① 安装到系统——Windows 双击 `.ttf` → 「安装」,macOS 用「字体册」导入;
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -6,6 +6,8 @@ This package includes material from the projects below. Each keeps its own licen
|
|
|
6
6
|
|
|
7
7
|
The chat area's folding (`packages/client/src/features/chat-fold/`), the token reveal (`packages/client/src/features/chat-reveal/`), the send flight (`packages/client/src/features/chat-send/`), the enhanced follow and the capped process group's follow (`packages/client/src/features/chat-follow/`) and the composer caret (`packages/client/src/features/caret/`) are ported from dsh-chat-ux. The ported source files name it in their headers, and each of those features stands down while that plugin is on the page.
|
|
8
8
|
|
|
9
|
+
The context meter's pie (`packages/client/src/features/context-stats/context-meter-pie.ts`) is derived the same way: the occupied share drawn as a pie in the reading's own colour, painted as the trigger's own background image, and the seam cut by stroking a sector's own path are taken from that plugin; the two sectors standing on one centre, the step that follows the split and the seam shared between their two strokes are this plugin's. The browser half draws it while that plugin is off the page and leaves the host's ring standing while it is on.
|
|
10
|
+
|
|
9
11
|
Source: <https://github.com/alm-allen/dsh-chat-ux>
|
|
10
12
|
|
|
11
13
|
```
|
package/docs/FEATURES.en.md
CHANGED
|
@@ -9,9 +9,10 @@ What each feature does and where its switch lives; the six tabs, their rows and
|
|
|
9
9
|
- **Custom brand**: Puts your own brand name, mark and wordmark over the chosen brand: the top of the sidebar, the collapsed rail, the new-conversation page and the account row's fallback picture all take them, with the images in their own colours or inked in the text colour. An accent colour of your own can recolour buttons, selected marks, links and focus rings.
|
|
10
10
|
- **Composer**: The input card on the new-conversation page and in conversations is redrawn after Claude Code Desktop: attachments sit in one row of tiles, the context usage is a ring in the toolbar, a press anywhere on the card starts typing, and a conversation resting at the bottom moves up with the card as it grows; an empty composer shows Claude's own hint. The skin's popover cards — the model, reasoning, permission and account cards and the new-conversation page's two menus — grow out of their buttons from a little smaller and close faster, shrinking only slightly as they fade. The Composer tab chooses the home page alone, the conversation alone, both, or neither.
|
|
11
11
|
- **Home layout**: Classic is the centred greeting over the input card. Studio moves the greeting to the top left, pins the input card to the window's bottom edge and fills the space between with a usage panel: a heat map of recent usage and the usage and cost of each model. The new-conversation page greets you by name with a line that changes with the time of day, and a different one each time the page comes back. In both layouts, the home page opening raises the brand mark and then, a beat behind, the greeting, each out of a short blur; the usage panel draws placeholders for its figures first, and when the figures are ready the placeholders fade while the figures come out of the blur.
|
|
12
|
+
- **Ripple glyph background**: The new-conversation page's background is a field of digits and letters in the monospace face, redrawn twice a second under a slowly drifting cloud and faintly visible only where the cloud is thin. A press anywhere on the page sends out waves: they travel fastest at the click and slow with distance, so each ring thins as it goes; the characters a wave passes show, blue at its front and grey in its wake, fading away. A switch of the same name under the home layout on the Appearance tab is off until it is turned on, and is marked experimental.
|
|
12
13
|
- **Mascot**: A pixel companion stands on the composer's top edge and changes its animation with what the agent is doing (thinking, writing and calling tools, several sessions at work, subagents, waiting on you, compacting the context, finished, failed, asleep). Follow the brand shows the pixel crab under Claude and Deepy the whale under DeepSeek; either can be picked for good, or none. Where it appears keeps it to the new-conversation page, or puts it in conversations as well.
|
|
13
14
|
- **Permission control**: The composer's permission menu becomes a row of segments on the classic home; the studio home and conversations carry one trigger with its tier card, shaped like the composer's other pickers. The presets are the host's own catalog, a plugin's preset included; the new-conversation page shows the one a new session will start in.
|
|
14
|
-
- **Session numbers**: The session statistics and the token usage follow the host's data live and stand in the context
|
|
15
|
+
- **Session numbers**: The session statistics and the token usage follow the host's data live and stand in the context meter's popover by default: the host's own context rows, followed by this session's detail rows — turns and steps, the output speed, the tokens read in and written back, the cache-hit share. On its own line writes them on a line of their own below the input card with the meter's pie at its end, and pressing that line opens and closes the same popover (opening and closing on hover stays the pie's own path). A figure counts from the value on show to a new reading, carries on from where it stands when another reading lands mid-count, and counts to another session's numbers from the ones it was showing; no separator glyph stands between the groups — the line's own gap is what sets them apart — and the cache share's band marks its figure and percent sign alone while the meter's pie takes the colour its occupancy falls on.
|
|
15
16
|
- **Peak rate meter**: Every row of the model picker carries the rate in force for that model right now: peak, off-peak and a dated promotion each get their own mark, the colour says expensive or cheap, and the countdown says how long it lasts; hovering reads the whole judgement, the state in force and what it becomes and when. Each provider is judged on its own clock, public holidays are off-peak in full, and windows crossing midnight and daylight-saving changes are resolved against real instants.
|
|
16
17
|
- **Model picker**: The composer's model menu becomes a two-level card: the first level holds the official service and the quick providers you picked, each model with its vendor mark and a line of description; the second level holds the rest.
|
|
17
18
|
- **Effort**: The reasoning effort gets a trigger of its own beside the model, opening a slider. It switches with the model picker, since the host keeps the effort inside its own model menu.
|
|
@@ -23,7 +24,7 @@ What each feature does and where its switch lives; the six tabs, their rows and
|
|
|
23
24
|
- **Sidebar search**: A search box in the sidebar opens a palette that finds sessions (titles and content), projects, plugins, Skills and shortcuts, through the host's own dialog and navigation; picking a content hit lands on the turn holding that message rather than at the top of the session. Search box style places it: Cover the brand (the default) keeps it in the brand row, standing over the brand while the pointer is over the sidebar; Standalone gives it a row of its own under the brand row, shown always; Icon leaves the host's own search button in place and takes only its click over.
|
|
24
25
|
- **Conversation navigator**: The column of short marks at the conversation's right edge holds one per turn and follows where you are reading. Reach it with the pointer and it opens into a list: each row carries the message that started its turn and sits exactly where that turn's mark was — the turn you are reading stays in place, and the turn under the pointer is still under it. The wheel scrolls the list and a click glides the page to the turn, loading earlier history first when it is not loaded yet; the Chat / Trajectory tabs at the top of the conversation stay up while the pointer is on the list. Alt+↑ / Alt+↓ jump to the previous or the next turn, and held or repeated they keep stepping; while the composer holds a draft the keys stay with it. The turn you land on flashes a short line over its start. With [dsh-plugin-msg-nav](https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav) installed too, Alt+↑ / Alt+↓ stay with that plugin.
|
|
25
26
|
- **Chat-area follow**: At the structural moments — a thinking row folding, a tool call row arriving — a reader sitting at the bottom is handed back to the host's own follow, instead of being left tens of pixels short by the burst of content; a process group capped in the Standard and Compact tiers (thinking and tool output kept in one scrolling body) is caught up the same way. Catching up runs on a curve: a trickle of characters settles softly and a burst glides at one steady speed before landing. While content streams, the host's own follow keeps the position at the end and the newly grown content slides up from the bottom edge instead of the text above it jumping in a single frame, with the status line standing still; the slide runs on the graphics card and takes no layout, so several sessions streaming at once cost no more for it. A message you send does not go through it: the host's scroll to bring it into view lands at once. Once the reader scrolls away from the bottom himself, the plugin stays out of it until he returns.
|
|
26
|
-
- **Automatic folding and the rolling door**: A thinking row opens while the model reasons and folds back when it stops; a running process group opens and folds back once that piece of work ends. A row or group the reader pressed himself keeps what he chose for that phase. The open reasoning stands in a window that grows with it: the window is as tall as the text until it reaches the height reasoning may take, and there it stays while the text steps up two lines at a steady beat behind a softened edge at each side, stopping at the newest line; once the reasoning stops the window comes off and the reader who opens the row reads it whole, and with Animation set to Reduced the window is never set. A process group's header says what the group holds — "2 thoughts, 1 tool call", empty figures left out — each number rolling as the work grows, and the whole line sweeps the way the host's words do while that piece of work runs; a header without the room for the sentence falls back to `Thinking×2 · Tools×1` and takes the sentence back when the room returns, with the sentence as the control's name either way. Opening or closing a row (a tool card, a thinking row, a command card) or a process group moves the height frame by frame, really pushing the content below away or pulling it back. The door only rolls the stretch the reader can see, so any length moves at the same speed, and a body holding several cards rolls as one door.
|
|
27
|
+
- **Automatic folding and the rolling door**: A thinking row opens while the model reasons and folds back when it stops; a running process group opens and folds back once that piece of work ends. A row or group the reader pressed himself keeps what he chose for that phase. The open reasoning stands in a window that grows with it: the window is as tall as the text until it reaches the height reasoning may take, and there it stays while the text steps up two lines at a steady beat behind a softened edge at each side, stopping at the newest line; once the reasoning stops the window comes off and the reader who opens the row reads it whole, and with Animation set to Reduced the window is never set. A process group's header says what the group holds — "2 thoughts, 1 tool call", empty figures left out — each number rolling as the work grows, and the whole line sweeps the way the host's words do while that piece of work runs; a header without the room for the sentence falls back to `Thinking×2 · Tools×1` and takes the sentence back when the room returns, with the sentence as the control's name either way. Opening or closing a row (a tool card, a thinking row, a command card) or a process group moves the height frame by frame, really pushing the content below away or pulling it back. The door only rolls the stretch the reader can see, so any length moves at the same speed, and a body holding several cards rolls as one door. A message the reader sent that the conversation cannot spare the room for is held under a cap with its bottom edge softened, and the Show the whole message control under it hands the whole message back; once he presses it, that message keeps what he chose for the rest of the session.
|
|
27
28
|
- **The line saying what the model is doing**: While a turn runs, the line at the end of the conversation is no longer a fixed "Deep diving for N s ···": it names what that turn is doing now — "Thinking…", "Preparing a tool call…", "Running tools…", "Writing…" — with the time the turn has taken beside it in the host's own units. Three of those states say something more: a call in flight names the file it works on ("Reading app.js", "Editing notes.md", "Writing out.txt" — the file's own name); a command call declares a description in its arguments (the host requires one saying what the command does), and the line writes it as the model wrote it ("Regenerate the changelog": the first line); and reasoning carrying a continuous clause hands the line the model's own words ("Checking the file is true": from the participle to that clause's end, with where a sentence ends left to the page's own sentence rules, so a dot inside a file name or a version number does not cut it; a negated clause, a plan the model has not started, anything inside a quotation and reasoning carrying no clause are passed over — a model quoting a sentence it read, the line's own waiting word among them, is not saying what it is doing; and "Thinking…" where there is none). All three are carried whole: how much of one shows is the width this line itself has, and past that the words are clipped with an ellipsis while the clock and the badge keep their places. The Conversation tab's Waiting-line detail choice set to Simple reads none of these specifics and names the bare states alone; Precise (the default) reads them as written. The line follows the host's own publishes, so a call is read the moment it starts running; every wording written is locked for a second, and the pass that finds the lock run out writes the newest state of that moment — whatever came and went inside the second is passed over, so a turn that moves quickly still changes the line at most once a second. A call's own words are the one thing the lock does not pass over: a small file read inside the second is written as soon as the lock ends, ahead of the state of that moment. The model's own clause has a rule of its own: the stretches between two of them, where the reasoning reads as the bare thinking state or as nothing at all, do not take it off the line — it stands until the next intent arrives, whether that is a newer clause, a call's own words, or a state such as writing; with the Precise status line switched off no clause is read at all, so nothing stands. A wording that changes runs transitions.dev's "Text states swap": the old one blurs and fades upward, the new one rises from below, and the box takes the arriving wording's width in one move, so the clock beside it travels to its new place rather than jumping twice. Where no state can be read at all the line stands on that brand's own word — the same one it says while the model is thinking: the skin's own "Thinking…" under the Claude brand, the host's own "Deep diving" under the DeepSeek brand — and once the model has been silent for ten seconds "No response yet" appears beside the clock, sliding onto the line from below and to the left while it pops out of nothing, and shrinking away as soon as the model speaks. The line sweeps — the Motion tab can give it a colour wash that moves through the letters instead — and the host's whale, which is DeepSeek's own character, gives way under the Claude brand to the skin's own loader: three 4px dots in the accent in force, which bounce the way the snippet has them while the model thinks (each rising 8px and flattening as it leaves the floor, half a second a bounce with the second dot starting two fifths of the period behind the first and the third three fifths) and take a second motion once the turn writes or works — each dot walking its own line, three lines 120° apart with one of them run the other way, the dot largest at either end and smallest as it crosses the middle, 1.25s a round trip with as long spent going out as coming back; the two motions never cut: the lane leaving fades each of its dots out where its own motion next turns back — off the floor for a bounce, off a far end for a walk — and the lane arriving fades each of its dots in where that motion next carries it, each fade over one of its own legs, so no dot is ever moved to a pose its motion does not carry; a motion stands for 2s before the next may take it over, so a state that comes and goes inside that stretch leaves it standing, while under the other brands the host's whale tail stands; the host's screen-reader announcement stays either way; wording wider than the room this line has is cut with an ellipsis while the clock and the badge keep their places; with Animation set to Reduced the wording is written at once, with none of those three phases. As long as the conversation follows its tail the line rests above the composer, so content arriving below no longer drags it around; scrolling back yourself leaves it travelling with the content. When a plugin hides the host wording and provides visible replacement text in the same content container, the theme yields its waiting line and restores it when the takeover ends; other chat animations keep running.
|
|
28
29
|
- **New text fades in**: Characters arriving in a streaming answer start faint and settle, staggered slightly by arrival order; a block arriving whole, a burst of thousands of characters and text that just reflowed from a fold stay solid. The Motion tab offers Fade in and Appears at once, each with a preview card, shipped on Appears at once.
|
|
29
30
|
- **File operation rows**: A read, edit or write of a file carries the `+n -m` tail and an expandable diff card or read window, and its path opens the file; the calls on one file inside one process group stand as a single row whose icon and title move on with the file's last operation and whose tail is their change total, turning character by character as each change lands, and opening that row reads every change — or the window it was last read at when nothing changed; a failed or interrupted row keeps its verdict.
|
|
@@ -31,7 +32,7 @@ What each feature does and where its switch lives; the six tabs, their rows and
|
|
|
31
32
|
- **Composer caret motion**: The composer's text caret is drawn by the plugin and glides when it moves; a question card's answer box and a queued message's inline editor are covered as well. The Motion tab offers On and Off, each with a preview card.
|
|
32
33
|
- **Chat / Trajectory tabs**: The Chat / Trajectory tab strip at the top of the conversation is redrawn as a segmented control and lifted onto the title's line when it fits.
|
|
33
34
|
- **Header in the title bar**: On the desktop the session title and the header's controls rise into the window's own caption row: whichever side fits is placed there — the title at the left, the controls at the right — and the rest of the title row closes up to the left.
|
|
34
|
-
- **Settings page**: The settings page appears both in the settings dialog (the "Claude Style" tab) and on the plugin page, in six tabs: General, Appearance, Composer, Sidebar, Conversation and Motion. Every feature that takes over part of the host's interface has its own switch; turning it off brings the host's original back at once, without a reload. A setting that only works while another one is on greys out while that one is off and says why; Header in the title bar acts on the Windows desktop window alone and greys out on every other page. Changing tabs slides the pages the way the strip reads: the new tab comes in from its side through a short blur while the one it replaces leaves to the other side; a pressed switch carries its knob past the end and back, and a page that opens shows every switch at rest. In the settings dialog the heading row ends with a link to the plugin's repository.
|
|
35
|
+
- **Settings page**: The settings page appears both in the settings dialog (the "Claude Style" tab) and on the plugin page, in six tabs: General, Appearance, Composer, Sidebar, Conversation and Motion. Every feature that takes over part of the host's interface has its own switch; turning it off brings the host's original back at once, without a reload. A setting that only works while another one is on greys out while that one is off and says why; Header in the title bar acts on the Windows desktop window alone and greys out on every other page. Changing tabs slides the pages the way the strip reads: the new tab comes in from its side through a short blur while the one it replaces leaves to the other side; a pressed switch carries its knob past the end and back, and a page that opens shows every switch at rest. In the settings dialog the heading row ends with a link to the plugin's repository. With another skin painting the page this one leaves with the theme, and picking this plugin's row in the skin center brings it back together with the whole interface.
|
|
35
36
|
- **Chat / Code switch**: With [ds-bot](https://github.com/Fei2411/DeepSeek-Bot) installed, the top of the sidebar carries a Chat / Code switch like the one in Claude's desktop app: Chat is ds-bot's Bot surface, and the theme steps aside entirely, leaving only the switch and its settings page; Code is the host's own interface, painted by the theme as usual. The switch drives ds-bot's own mode change, so neither side loses what it remembers, and switching through ds-bot's own controls brings the theme along too. On the desktop it sits in the window's top row at the sidebar's right end; on the web, in the sidebar's first row.
|
|
36
37
|
|
|
37
38
|
<!-- features:end -->
|
package/docs/FEATURES.md
CHANGED
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
- **自定义品牌**:在所选品牌之上换上你自己的品牌名、标志图与文字标志,侧栏顶部、折叠栏、新会话页与账号行的兜底头像都跟着换;图可以保留原色,也可以按文字颜色着色。另可指定一个强调色,按钮、选中标记、链接与焦点环随之变色。
|
|
10
10
|
- **输入区**:新会话页与对话页的输入卡片按 Claude Code Desktop 的样子重画:附件排成一行缩略图,上下文用量是工具栏里的一个圆环,点卡片的空白处就能开始输入,卡片变高时停在底部的对话跟着上移;空输入框的提示换成 Claude 的那一句。皮肤画的弹层卡片——模型、推理等级、权限、账号、新会话页的两个菜单——从各自的按钮处略小地长出来,收起时更快、只略微收拢就淡出。设置页「输入区」可以选只改新会话页、只改对话页、两处都改或关闭。
|
|
11
11
|
- **首页版面**:「经典」是居中的问候语与输入卡片;「工作室」把问候语移到左上角、输入卡片贴着窗口底边,中间是用量面板:近期的用量热力图、各模型的用量与费用。新会话页的问候语按时段换着说,带上你的名字,每次回到这一页换一句。两种布局里,首页打开时品牌标志先升起、问候语晚一拍跟上,都穿过一点模糊落到原位;用量面板先画出数字的占位,数字算好时占位淡去、数字从模糊里显出来。
|
|
12
|
+
- **水波纹字符背景**:新会话页的背景是一片等宽字体的数字与字母,每秒重绘两次,被缓缓漂移的云层遮住,只在云层稀薄处隐约可见。点击页面任意位置会荡开水波:波速在点击处最快、越远越慢,环越走越细;被波扫过的字符显现出来,波前染成蓝色,尾迹留下灰色并慢慢淡去。设置页「外观」页首页版面下有一个同名开关,默认关闭,标为实验性。
|
|
12
13
|
- **吉祥物**:输入框上沿站着一只像素小伙伴,随智能体的工作状态换动画(思考、写回答与调用工具、多个会话同时工作、子代理、等你操作、压缩上下文、完成、失败、睡着)。「跟随品牌」在 Claude 品牌下是像素螃蟹,在 DeepSeek 品牌下是小鲸鱼 Deepy,也可以固定选一个或者关闭;「出现位置」决定它只在新会话页出现,还是新会话页和对话页都出现。
|
|
13
14
|
- **权限控件**:输入区的权限菜单在经典首页换成一排分段按钮,工作台首页与对话页是一枚按钮加一张档位卡片,与输入区其余选择器同一形制;档位以宿主的目录为准,别的插件加的档位也在里面;新会话页上显示新会话会用的那一档。
|
|
14
|
-
- **会话数字**:会话统计与 Token
|
|
15
|
+
- **会话数字**:会话统计与 Token 用量随宿主的数据实时更新,默认收进上下文计量那张弹层:里面是宿主自己的上下文行,后面接上这一段会话的数字明细——轮数与步数、输出速度、读入与写回的 tokens、缓存命中率。也可以选「独立成行」,把这些数字写在输入卡片下面单独一行、末尾就是那枚计量饼,按一下那一行同样开合这张弹层(悬停开合只归那枚饼)。数字接到新读数就从眼前的数连续计数到新值,答案流式输出期间接连更新时从当时的值接着走,切换会话时也从上一段的数字计数过去;各段之间没有分隔符号、只靠间距分开,缓存命中那一截的色带只染数字与百分号,计量饼按占用自己取色。
|
|
15
16
|
- **峰谷电表**:模型选择器的每一行标出该模型此刻的峰谷:峰价、谷价与限时活动三种状态各有自己的图标,颜色表示贵还是便宜,并跟上距离切换还有多久;悬停读到完整的一条,讲出此刻的判定与切换后的状态。各家供应商按各自时区的作息判定,法定节假日整日算谷价,跨零点与夏令时都按真实时刻计算。
|
|
16
17
|
- **模型选择器**:输入区的模型菜单换成两级卡片:第一级是官方服务与你挑的快捷供应商,每个模型带厂商标志与一句说明,第二级是其余模型。
|
|
17
18
|
- **工作强度**:模型旁边有一个自己的工作强度按钮,点开是一条滑杆;它跟着模型选择器一起开关,因为宿主把工作强度放在自己的模型菜单里。
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
- **侧栏搜索**:侧栏里有一个搜索框,打开的面板能找会话(标题与内容)、项目、插件、Skill 与快捷键,用宿主自己的对话框与导航;点开一条内容命中会落到那条消息所在的一轮,而不只是会话开头。「搜索框样式」选它的位置:覆盖品牌(默认)把它放在品牌行、指针移到侧栏时盖过品牌,独立在品牌行下方给它自己一行并一直显示,图标则保留宿主自己的搜索按钮、只把单击接管过来。
|
|
24
25
|
- **对话导航**:对话区右侧那列短横线每一轮一条,跟着你读到的位置走。鼠标碰到它,它就展开成一张列表:每一行写着开启这一轮的那条消息,正好落在它那条短横线原来的位置上——你正在读的那一轮还在原处,鼠标下面还是刚才那一轮;滚轮上下翻,点一行页面滑到那一轮,还没加载的早期对话先加载再跳;指针停在列表上时,对话区顶部的对话 / 轨迹标签照常显示。Alt+↑ / Alt+↓ 跳到上一轮或下一轮,连按会一轮一轮接着走;输入框里有草稿时这两个键留给输入框。跳到的那一轮开头会闪一条短横线。同时装着 [dsh-plugin-msg-nav](https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav) 时,Alt+↑ / Alt+↓ 留给它。
|
|
25
26
|
- **聊天区跟随**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部。补到底部走的是曲线:零散到达的字收得住尾巴,成片涌进的文字以一段稳速滑过去,再落到末尾。流式输出期间位置由宿主自己的跟随写到末尾,新长出的内容从屏幕下缘平滑滑上来,上方文字不再一帧跳上去,状态行停在原处不动;这段滑动由显卡完成,不占用页面的布局,多个会话同时输出时也不加重负担。你自己发出的消息不走这条曲线:宿主把它滚进视野的那一下照旧一步到位。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。
|
|
26
|
-
- **自动开合与卷帘门**:模型还在思考时思考行开着,思考停下就收回去;运行中的过程组自动展开,这一段结束再收起。读者自己按过的行或组在当时的阶段里不再被改动。开着的那段思考停在一个跟着它长高的窗口里:窗口先是和文本一样高,长到推理能到的最大高度就停在那里,只有到了这一刻文字才一档一档往上走两行,走到最新一行就停住,上下边缘渐隐,也不再往下推整列对话;推理一停,窗口撤下,读者打开这一行读到的是完整文本,「动画」为「减弱」时不设这个窗口。过程组的标题改写成这一组装了什么:「执行 2 次思考,调用 1 次工具」,没有的项不写,数字随内容增加逐位滚动,这一段还在进行时整行带着宿主那样的扫光;放不下整句时改用「思考×2 · 工具×1
|
|
27
|
+
- **自动开合与卷帘门**:模型还在思考时思考行开着,思考停下就收回去;运行中的过程组自动展开,这一段结束再收起。读者自己按过的行或组在当时的阶段里不再被改动。开着的那段思考停在一个跟着它长高的窗口里:窗口先是和文本一样高,长到推理能到的最大高度就停在那里,只有到了这一刻文字才一档一档往上走两行,走到最新一行就停住,上下边缘渐隐,也不再往下推整列对话;推理一停,窗口撤下,读者打开这一行读到的是完整文本,「动画」为「减弱」时不设这个窗口。过程组的标题改写成这一组装了什么:「执行 2 次思考,调用 1 次工具」,没有的项不写,数字随内容增加逐位滚动,这一段还在进行时整行带着宿主那样的扫光;放不下整句时改用「思考×2 · 工具×1」,位置宽回来再换回整句,控件的可访问名字始终是整句。点开或收起一行(工具卡片、思考行、命令卡片)以及过程组时,高度逐帧变化,下方内容被真的推开或收回;门只走读者看得见的那一段,内容再长也是同一速度,多张卡片的展开体整扇门一起走。读者自己发出的消息装不下时收在一个上限高度里,下缘渐隐,气泡下面的「展开全文」把整条消息放回来;按过一次之后,这条消息在本次会话里保持读者选的样子。
|
|
27
28
|
- **模型正在做什么的那一行**:轮次进行中,对话末尾那一行不再是固定的「深度求索中,用时 N 秒 ···」,而是写出这一轮此刻在做的事:「正在思考」「正在准备工具调用」「正在调用工具」「正在写回答」,后面跟着这一轮已用的时间(用宿主自己的单位)。三种状态说的是具体的东西:调用在跑时写出它操作的文件(「正在读取 app.js」「正在编辑 notes.md」「正在写入 out.txt」,只取文件名);命令调用在参数里声明了这条命令做什么(宿主要求声明),这一行把它原样写出(「Regenerate the changelog」:只取第一行);推理正文里出现进行时从句时把模型自己那句话写出来(「Checking the file is true」:从动词截到这一句的句末;句子在哪里断开交给页面自己的句子规则,所以文件名与版本号里的点号不算句末;否定的句子、还没动手的打算、引号里的话与读不出从句的正文都不取——模型引用它读到的一句话、甚至引用这一行自己那个等待词时,那不是它在说自己正在做什么;取不到就回到「正在思考」)。这三种说法都整句带出来,不按字数截断:放得下多少由这一行自己的宽度决定,放不下时在断开处画省略号,计时与徽标留在原处。「对话」页的「状态行描述」选「简洁」时这些具体内容都不读,只说状态本身;选「精确」(默认)照旧。这一行跟着宿主自己的发布走,调用刚开始跑就被读到;每种说法写上之后锁住 1 秒,这一秒里状态再换也不动,锁一过就直接写当时最新的状态(中间来过的那些不补演),因此一个轮次里状态换得再快,这一行也只一秒换一次;被锁跨过去的调用说法不在此列——一次读完的小文件调用会在锁一过先补上它,再轮到当时的状态。模型自己那句从句另有一条:两次从句之间读不出东西的那几拍(正在思考,或刚起一步还没写下什么)不把它换掉,它一直站到下一次意图到达为止——新的从句、调用自带的说法,或写回答这类状态;「精确状态行」关掉时本来就不读从句,也就无所谓站住。说法换掉时旧的向上淡出、新的从下方升起(来自 transitions.dev 的「Text states swap」);说法盒子换宽度时,旁边的计时随之滑到新位置,不做两次跳变;一直读不出状态时这一行说这个品牌自己的那一个词,与模型思考时说的同一个:Claude 品牌下是「正在思考」,DeepSeek 品牌下是宿主自己的「深度求索中」,不因为读不出状态而换一次说法;模型连续 10 秒没有开口时,计时后面多一枚「暂未响应」:它从左下方滑上这一行,同时从无到有弹出来,模型一开口就缩回消失。这一行带扫光(「动效」页可换成让文字本身流动着变色的那一档);宿主的小鲸鱼是 DeepSeek 自己的形象,Claude 品牌下它让位给本插件自己的加载点:三枚 4px 圆点用当时生效的主题色,模型思考时它们照旧弹跳(各自弹起 8 像素、离地时压扁,半秒一次,第二枚与第三枚分别错开五分之二与五分之三个周期),这一轮改成写回答或调用工具时换另一套走法——三颗点各沿一条直线来回,三条直线彼此相差 120°、其中一条反着走,球在两端最大、过中点最小,一个来回 1.25 秒、去程与回程一样长;两套走法之间不硬切:旧的那一列各自淡出、新的那一列各自淡入,每颗球都在自己动作里的那一拍上开始——跳球从落地回弹那一刻开始淡出、到最高点淡完,从最高点开始淡入、到落地淡完;走路从线的一端开始淡出、到中点淡完,从中点开始淡入、到另一端淡完,没有哪颗球被挪到别的动作的位置上;一个动作站满 2 秒才允许下一套接手,这段时间里来了又走的状态不打扰它;其余品牌下宿主的鲸鱼尾照旧,读屏播报也照旧;说法比这一行放得下的宽度更长时,它在这个宽度上截断并画省略号,计时与徽标留在原处;「动画」设为「减弱」时说法直接换掉,不做上面那三段。只要对话还在跟随末尾,这一行就停在输入框上方,不断追加的内容不再带着它上下移动;读者自己往回翻看时它照常随内容走。同一内容容器内,第三方插件隐藏宿主文案并提供可见替代文字时,主题等待行自动让位;接管结束后恢复,其他聊天动效继续运行。
|
|
28
29
|
- **新文字淡入**:流式回答里新出现的字符先淡后实,并按到达次序略作错开;整段一次到达的内容、几千字的突发与刚被折叠重排过的文字保持本色。设置页的「动效」页有「淡入」与「直接出现」两档,各带一张预览卡,默认「直接出现」。
|
|
29
30
|
- **文件操作行**:一个文件的读取、编辑与写入带着行尾的 `+n -m`、可展开的改动卡片或读取窗口,路径可点开文件;同一个文件在同一个过程组里的多次调用读成一行,行首的图标与标题跟着最后一次操作换新,行尾的数字是这些改动的累计值、随每次改动到达逐位翻页,展开这一行读到全部改动(只被读取过时读到这一次读取的窗口);失败与中断的行保留裁决信息。
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
- **输入框插入符动效**:输入框里的光标由插件自己绘制,移动时滑过去;提问卡片的作答框与排队消息的行内编辑框同样覆盖。设置页的「动效」页有开与关两档,各带一张预览卡。
|
|
32
33
|
- **对话 / 轨迹标签条**:对话区顶部的对话 / 轨迹标签条重画成分段控件,放得下时抬到标题那一行。
|
|
33
34
|
- **会话标题进入顶栏**:桌面端把会话标题与顶栏一行的控件抬进系统标题栏:放得下时标题靠左、控件靠右,放不下的一侧留在原来的行里,标题行的其余内容顺势左移。
|
|
34
|
-
- **设置页**:设置页同时出现在设置对话框(「Claude Style」标签页)与插件页,分为通用、外观、输入区、侧栏、对话、动效六个分页;每一项接管宿主界面的功能都有自己的开关,关闭后宿主原来的界面原样回来,不需要刷新页面。只在另一项打开时才起作用的设置,在那一项关闭时变灰并写明原因;「会话标题进入顶栏」只作用于 Windows
|
|
35
|
+
- **设置页**:设置页同时出现在设置对话框(「Claude Style」标签页)与插件页,分为通用、外观、输入区、侧栏、对话、动效六个分页;每一项接管宿主界面的功能都有自己的开关,关闭后宿主原来的界面原样回来,不需要刷新页面。只在另一项打开时才起作用的设置,在那一项关闭时变灰并写明原因;「会话标题进入顶栏」只作用于 Windows 桌面端的窗口,在别的页面上变灰。切换分页时,新的一页从它在分页条上所在的一侧滑入、穿过一点模糊,被换下的那一页朝另一侧滑出;按下开关时圆钮越过终点再弹回,打开页面时各个开关都静止在原位。设置对话框里这一页的标题行右端是插件仓库的入口。另一款皮肤作画时这一页随主题一起让出,读者在皮肤中心里本插件那一行选回本主题之后,它与整个界面一起回来。
|
|
35
36
|
- **聊天 / 代码切换**:装着 [ds-bot](https://github.com/Fei2411/DeepSeek-Bot) 时,侧栏顶端多一个和 Claude 桌面端一样的聊天 / 代码切换:聊天是 ds-bot 的 Bot 界面,本主题整个让开,只留下这个切换与设置页;代码是宿主自己的界面,由本主题照常绘制。切换就是 ds-bot 自己的模式切换,两边各自记住的状态都不丢;在 ds-bot 里用它自己的入口切换时,本主题同样跟上。桌面端它待在窗口顶端那一行、侧栏的右端,网页上待在侧栏的第一行。
|
|
36
37
|
|
|
37
38
|
<!-- features:end -->
|
package/docs/SETTINGS.en.md
CHANGED
|
@@ -8,8 +8,8 @@ The settings page appears both in the settings dialog (the "Claude Style" tab) a
|
|
|
8
8
|
|
|
9
9
|
| Tab | Settings |
|
|
10
10
|
|---|---|
|
|
11
|
-
| General | Theme style, Username, Open popovers on hover |
|
|
12
|
-
| Appearance | Colours, Typefaces, Home layout, Mascot, Where it appears, Brand name, Brand mark, Wordmark, Image colours, Accent colour |
|
|
11
|
+
| General | Theme style, Username, Page zoom, Open popovers on hover |
|
|
12
|
+
| Appearance | Colours, Typefaces, Home layout (and the Ripple glyph background under it), Mascot, Where it appears, Brand name, Brand mark, Wordmark, Image colours, Accent colour |
|
|
13
13
|
| Composer | Composer restyle, Redraw the model picker (with Model descriptions, Quick providers and the Peak rate meter under it), Redraw the permission control |
|
|
14
14
|
| Sidebar | Collapse the sidebar settings area (with the Account-hold easter egg under it: Off / 中文 / English), Sidebar search, Search box style, In progress / Archived view, Float docked panels, Sidebar layout (Relaxed / Compact) |
|
|
15
15
|
| Conversation | Conversation navigator, Conversation statistics position (Inside the context popover / On its own line), Chat / Trajectory tabs, Header in the title bar |
|
|
@@ -17,13 +17,19 @@ The settings page appears both in the settings dialog (the "Claude Style" tab) a
|
|
|
17
17
|
|
|
18
18
|
Every feature that takes over part of the host's interface has its own switch; turning it off brings the host's original back at once, without a reload. Chat-area scrolling animation governs the three parts of the conversation that move with its content — following the end, rows and groups folding open and shut, and the file operation rows — playing this plugin's set when on and handing those three back, with the host's own way of doing them, when off; the waiting-line animation and the sent message's entrance on the Motion tab each carry a switch of their own and no longer follow it, and the caret and the new-text fade keep their on/off choices as before.
|
|
19
19
|
|
|
20
|
+
While Animation is Reduced, the Motion tab's status paint, caret, text fade and message bubble cards dim and each holds one frame (the sweep's band parked mid-word, the caret with its glide trail, the last characters on their fading steps, the bubble part-grown or part-risen); a line under the row says the choice takes no effect then, and it stays editable.
|
|
21
|
+
|
|
20
22
|
A few settings only work while another one is on; while that one is off they grey out and take no input, still showing the value you set, and a line under the description says what they wait for. Redraw the model picker (with Model descriptions, Quick providers and the Peak rate meter) and Redraw the permission control are drawn into the restyled composer, so they grey out while Composer restyle is Off; Conversation statistics position only works while the restyle covers the conversation (Conversation only or All); the Account-hold easter egg opens from the account popover, so it greys out with Collapse the sidebar settings area. Header in the title bar acts on the Windows desktop window alone, so it greys out on every other page (a browser, the macOS window), still showing the value you set.
|
|
21
23
|
|
|
24
|
+
**Page zoom**: the row carries an Experimental tag beside its title. It draws the whole page at a multiple — the interface, its text, its controls and its pictures together, smaller below 1x and larger above it. Follow the system keeps the size the system and DSH give it, and the other four are 0.8x, 1x, 1.25x and 1.5x. The window keeps its size: the page lays itself out in the room left over, so the sidebar and the conversation are narrower at the levels above 1x and wider at 0.8x; the model, reasoning-effort and permission popovers that open off the composer stay on their own triggers, and the settings page is drawn at the same scale, so a level can be compared on this page. The desktop window's own three buttons and the row they sit in are outside the page and keep their size.
|
|
25
|
+
|
|
26
|
+
**Ripple glyph background**: under the home layout on the Appearance tab, off until it is turned on and carrying an Experimental tag beside its title. It turns the new-conversation page's background into a field of digits and letters in the monospace face, redrawn twice a second under a slowly drifting cloud; a press sends out waves that are fastest at the click and slow with distance, and the characters a wave passes show, blue at its front and grey in its wake before fading.
|
|
27
|
+
|
|
22
28
|
**Account-hold easter egg**: the account row at the top of the account popover opens a full-page replica of Claude's account-hold page, in the language chosen on the Sidebar tab whatever the interface language. With Off chosen the account row is a plain name and pressing it opens nothing.
|
|
23
29
|
|
|
24
30
|
In the settings dialog, this page's heading row ends with a GitHub mark; pressing it opens the plugin's repository in a new tab.
|
|
25
31
|
|
|
26
|
-
**Opened from a remote address**:
|
|
32
|
+
**Opened from a remote address**: the host treats every page opened at an address it trusts as the same reader's page, so a page reached through a LAN address or a tunnel (a phone, another computer) reads and writes the same settings document as the page on the computer running DSH, and a change made on one side reaches the other without a reload. At an address the host does not trust, the page cannot reach the host at all.
|
|
27
33
|
|
|
28
34
|
**Custom brand**: the last rows of the Appearance tab put your own brand over the one Theme style picks. Brand name replaces the brand text at the top of the sidebar; Brand mark replaces the mark at the top of the sidebar, on the collapsed rail, on the new-conversation page and as the account row's fallback picture; Wordmark replaces the name beside the mark, its width following the image's proportions at the row's height, and while it is in place the brand name is not shown. The images take PNG, SVG and WebP up to 2 MB each and are kept under `dsh-claude-style/brand/` in the DSH home directory; dropping `mark.png` (or `.svg`, `.webp`) and `wordmark.png` into that directory by hand works too, after a page reload. Image colours set to Original shows the images in their own colours; Text colour uses each image as a shape filled with the text colour where it stands, which suits a one-colour mark and reads in both light and dark. Accent colour recolours buttons, selected marks, links and focus rings, with the text on a button picked dark or light to read on it; unset, the chosen brand's accent stays, and while Colours is set to Follow the host the accent has no effect. Clearing or removing any of them puts the chosen brand's own back in its place.
|
|
29
35
|
|
|
@@ -35,7 +41,7 @@ In the settings dialog, this page's heading row ends with a GitHub mark; pressin
|
|
|
35
41
|
|
|
36
42
|
**Sidebar layout**: Relaxed (the default) is how the sidebar looks now; Compact takes the spacing down alone — the gap between the top rows (New session, Plugins, Automation tasks, and the search box's own row when it stands alone) and the workspace, the workspace heading's own margins, the conversation rows' height and spacing, the distance between two sections, and the account area's padding and row margins. Control shapes, type sizes, icons and colours are untouched, so both layouts hold the same things to press.
|
|
37
43
|
|
|
38
|
-
**Alongside other theme plugins**: with Colours and Typefaces set to Follow the host, the skin no longer rewrites the host's colours and fonts and keeps only its layout and controls; the colours are left to DSH itself, or to another theme plugin enabled at the same time. With [dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine), for example, the wallpaper shows through the sidebar and the conversation, and the skin's own popovers take that plugin's glass, translucent and blurring the picture behind them. **Alongside [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux)**: that plugin implements the same chat-area interactions (the rolling door, automatic folding, the token fade, file change rows, the send flight, the drawn caret), and two copies of them intercept each other's clicks and press the same controls. So this skin stands down when it sees that plugin: the Chat-area animations row on the settings page's Conversation tab and the Composer caret motion and New-text fade rows on the Motion tab have their controls disabled while each still shows the value you set, with a line underneath in the accent colour reading "Managed by dsh-chat-ux". Your settings are not rewritten, and they take effect as they are once dsh-chat-ux is removed.
|
|
44
|
+
**Alongside other theme plugins**: with Colours and Typefaces set to Follow the host, the skin no longer rewrites the host's colours and fonts and keeps only its layout and controls; the colours are left to DSH itself, or to another theme plugin enabled at the same time. With [dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine), for example, the wallpaper shows through the sidebar and the conversation, and the skin's own popovers take that plugin's glass, translucent and blurring the picture behind them. **Alongside [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux)**: that plugin implements the same chat-area interactions (the rolling door, automatic folding, the token fade, file change rows, the send flight, the drawn caret), and two copies of them intercept each other's clicks and press the same controls. So this skin stands down when it sees that plugin: the Chat-area animations row on the settings page's Conversation tab and the Composer caret motion and New-text fade rows on the Motion tab have their controls disabled while each still shows the value you set, with a line underneath in the accent colour reading "Managed by dsh-chat-ux". Your settings are not rewritten, and they take effect as they are once dsh-chat-ux is removed. **Alongside a skin from the Skin Center**: the Skin Center lists this plugin as one of its selectable looks, and picking it hands the whole page to this plugin; picking another skin there hands the page back whole — the sidebar, the conversation, the composer and this skin's settings page all leave, and that skin and the host paint the page. Picking this plugin's row in the Skin Center brings them all back.
|
|
39
45
|
|
|
40
46
|
**Chat-area follow**: at the structural moments — a thinking row folding, a tool call row arriving — a reader sitting at the bottom is handed back to the host's own follow, instead of being left tens of pixels short by the burst of content; a process group capped in the Standard and Compact tiers (thinking and tool output kept in one scrolling body) is caught up the same way. Catching up runs on a curve: a trickle of characters settles softly and a burst glides at one steady speed before landing. While content streams, the host's own follow keeps the position at the end and the newly grown content slides up from the bottom edge instead of the text above it jumping in a single frame, with the status line standing still; the slide runs on the graphics card and takes no layout, so several sessions streaming at once cost no more for it. A message you send does not go through it: the host's scroll to bring it into view lands at once. Once the reader scrolls away from the bottom himself, the plugin stays out of it until he returns.
|
|
41
47
|
|
|
@@ -51,7 +57,7 @@ In the settings dialog, this page's heading row ends with a GitHub mark; pressin
|
|
|
51
57
|
|
|
52
58
|
**File change rows**: a write or edit dispatched from inside a run_code program carries the `+n -m` tail and an expandable diff card, and its path opens the file; a failed or interrupted row keeps its verdict.
|
|
53
59
|
|
|
54
|
-
**New text fades in**: this row on the Motion tab governs the characters arriving in a streaming answer. On, they start faint and settle over about 0.12 s, staggered slightly by arrival order; a block arriving whole, a burst of thousands of characters and text that just reflowed from a fold stay solid. Neither card carries text: both hold the same sample line arriving character by character, the Fade in card letting each character land at its faintest step before it brightens and the Appears at once card handing each one over as it is, then standing a moment before the walk repeats. The row ships off; with Animation set to Reduced
|
|
60
|
+
**New text fades in**: this row on the Motion tab governs the characters arriving in a streaming answer. On, they start faint and settle over about 0.12 s, staggered slightly by arrival order; a block arriving whole, a burst of thousands of characters and text that just reflowed from a fold stay solid. Neither card carries text: both hold the same sample line arriving character by character, the Fade in card letting each character land at its faintest step before it brightens and the Appears at once card handing each one over as it is, then standing a moment before the walk repeats. The row ships off; with Animation set to Reduced the conversation stops fading and each card holds one frame: the Fade in card its last characters on their fading steps, the Appears at once card the whole line.
|
|
55
61
|
|
|
56
62
|
**Message bubble animation**: this row on the Motion tab governs how a message you send arrives in the conversation, and it carries a switch of its own: off hands the entrance back to the host and greys the two cards under it. Neither card carries text: both hold a short conversation of your own messages, and its lower line takes turns between two of them, one landing and the next following, so what moves is a message arriving. Grows into its place takes the bubble from nothing at its own bottom-right corner over about 0.32 s with a slight overshoot, and nothing beside it moves; Flies up from the composer is the answer that was already there, the composer card lifted and flown to the message's row while the real message waits hidden and is handed over as the stand-in lands. With Animation set to Reduced neither answer moves and the bubble stands where it belongs. The row ships on the flight.
|
|
57
63
|
|
|
@@ -61,7 +67,7 @@ In the settings dialog, this page's heading row ends with a GitHub mark; pressin
|
|
|
61
67
|
|
|
62
68
|
**Waiting-line animation**: one of the Motion tab's settings, and it is about the words on the line that says what the model is doing, with a switch of its own: off hands the line back to the host and greys the two rows under it — Precise status line and the two cards. With the line on, the Precise status line switch right below decides how much it says: on writes the specifics of the moment (the file a call works on, a command's declared description, a clause out of the reasoning, so Chinese and English mix), off writes the bare states alone. The two cards under that carry no text: each is that line's own words, moving, all the time. Inside a card the words take turns between two wordings — the word the brand in force waits on and "Running tools…" — the old one leaving upward and the new one rising back in, which is the swap the line itself runs (with the precise line on, the card takes turns between three samples instead, one at a time: 正在阅读README.md, Checking out current tree and 正在思考), over either paint: Highlight sweep (the default) crosses a band of light over the glyphs at the rhythm of the host's own rows, and Colour wash makes the letters themselves move through colour — seven radial washes over a grey ramp, orbiting the glyph box while the hue turns a full circle. One press on a card changes it at once; on the line itself the wording, its swap and the clock beside it are the same either way; with Animation set to Reduced the paint holds still (neither the band nor the wash moves on) and the words keep taking turns, cut from one to the other with no leave and no rise, which is what the line does as well.
|
|
63
69
|
|
|
64
|
-
**Conversation statistics position**: the session's eight figures have two places to live. Inside the context popover (the default) puts them in the panel that
|
|
70
|
+
**Conversation statistics position**: the session's eight figures have two places to live. Inside the context popover (the default) puts them in the panel that the meter's pie opens and leaves only the pie under the input card; On its own line writes the turns and steps, the output speed, the tokens read in, the tokens written back and the cache-hit share on a line of their own below the input card, with the pie itself at the end. A figure on that line counts from the value on show to a new reading (every step, and all through a streaming answer), carries on from where it stands when another reading lands mid-count, and counts to another session's numbers from the ones it was showing; the cache share's band marks its figure and percent sign alone, the words before them keeping the line's own tone — the share runs from red in the nineties to dark green at 99%, and the pie takes a colour between green at two fifths and red at four fifths. A window too narrow for the whole line makes it give way one step at a time: first the cache share's words, then the turns and steps, then the number beside the pie (the pie stays), then the tokens read in and written back as one total, and last the counts folded into k / M / B — and the same order gives them back when the window grows.
|
|
65
71
|
|
|
66
72
|
**Conversation navigator**: the column of short marks at the conversation's right edge holds one per turn and follows where you are reading. Reach it with the pointer and it opens into a list: each row carries the message that started its turn and sits exactly where that turn's mark was — the turn you are reading stays in place, and the turn under the pointer is still under it. The wheel scrolls the list and a click glides the page to the turn, loading earlier history first when it is not loaded yet; the Chat / Trajectory tabs at the top of the conversation stay up while the pointer is on the list. Alt+↑ / Alt+↓ jump to the previous or the next turn, and held or repeated they keep stepping; while the composer holds a draft the keys stay with it. The turn you land on flashes a short line over its start. With [dsh-plugin-msg-nav](https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav) installed too, Alt+↑ / Alt+↓ stay with that plugin.
|
|
67
73
|
|
package/docs/SETTINGS.md
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
| 分页 | 设置项 |
|
|
10
10
|
|---|---|
|
|
11
|
-
| 通用 |
|
|
12
|
-
| 外观 |
|
|
11
|
+
| 通用 | 主题风格、用户名、页面缩放、悬停展开弹层 |
|
|
12
|
+
| 外观 | 配色、字体、首页版面(及其下的水波纹字符背景)、吉祥物、出现位置、品牌名称、标志图片、文字标志、图片颜色、主色 |
|
|
13
13
|
| 输入区 | 输入区重绘范围、重绘模型选择器(及其下的模型描述、快捷供应商与峰谷电表)、重绘权限控件 |
|
|
14
14
|
| 侧栏 | 折叠侧栏设置区(及其下的封号彩蛋:关闭 / 中文 / English)、侧栏搜索、搜索框样式、进行中 / 已归档视图、面板悬浮卡片、左侧栏布局(宽松 / 紧凑) |
|
|
15
15
|
| 对话 | 对话导航、对话统计信息位置(收进上下文 / 独立成行)、对话 / 轨迹标签条、会话标题进入顶栏 |
|
|
@@ -17,13 +17,19 @@
|
|
|
17
17
|
|
|
18
18
|
每一项接管宿主界面的功能都有自己的开关,关闭后宿主原来的界面原样回来,不需要刷新页面。「聊天区滚动动画」管的是对话区里随内容滚动的那三样——跟随末尾、行与过程组的开合、文件操作行——开启时播放本插件的这一套,关闭后这三样交回宿主,宿主自己的做法也一并回来;「动效」页里的状态行动画与消息气泡动画各自带一个开关,不再跟它一起走,光标动画与新文字淡入也照旧各自有开与关两档。
|
|
19
19
|
|
|
20
|
+
「动画」设为「减弱」时,「动效」页里状态行画法、光标动画、新文字淡入与消息气泡动画的卡片略变暗并各停在一帧(扫光的高光带停在字中、光标带滑行拖尾、淡入的末几个字停在渐淡的各档、气泡停在长大或升起的途中),行下方写明这一项此时不生效,选择仍可修改。
|
|
21
|
+
|
|
20
22
|
有几项只在另一项打开时起作用,那一项关闭时它们变灰、不能操作,仍显示你设的值,说明下面写明在等哪一项:「重绘模型选择器」(连同模型描述、快捷供应商与峰谷电表)和「重绘权限控件」画在重绘后的输入区里,输入区重绘范围选「关闭」时变灰;「对话统计信息位置」只在输入区重绘覆盖对话页(「仅对话」或「全部」)时起作用;「封号彩蛋」从账号弹层打开,「折叠侧栏设置区」关闭时一起变灰。「会话标题进入顶栏」只作用于 Windows 桌面端的窗口,在别的页面(浏览器、macOS 窗口)里同样变灰,仍显示你设的值。
|
|
21
23
|
|
|
24
|
+
**页面缩放**:这一行的标题旁带「实验性」标记。把整个页面按倍数绘制——界面、文字、控件与图片一起变大或变小。「随系统」跟随系统与 DSH 给出的尺寸,其余四档分别是 0.8x、1x、1.25x、1.5x。窗口尺寸不变,页面按缩放之后剩下的空间重新排布,所以放大档位下侧栏与对话区会窄一些、0.8x 下会宽一些;贴着输入区展开的模型、努力度与权限弹层仍与各自的按钮对齐,设置页本身也按同一倍数绘制,档位可以在这一页上直接比出来。桌面端窗口自己的三个按钮与它们所在的那一行在页面之外,尺寸不变。
|
|
25
|
+
|
|
26
|
+
**水波纹字符背景**:「外观」页首页版面下这一项默认关闭,标题旁带「实验性」标记。打开后新会话页的背景换成一片等宽字体的数字与字母,每秒重绘两次,被缓缓漂移的云层遮住;点击页面荡开水波,波速在点击处最快、越远越慢,被波扫过的字符显现出来,波前染蓝、尾迹留灰并淡去。
|
|
27
|
+
|
|
22
28
|
**封号彩蛋**:点账号弹层顶上的账号行,打开一张仿 Claude「账号已暂停」的整页彩蛋,按「侧栏」页这一行选的语言显示,与界面语言无关。选「关闭」后账号行只显示名字,按它不再打开任何东西。
|
|
23
29
|
|
|
24
30
|
设置对话框里这一页的标题行右端有一枚 GitHub 标识,按一下在新的标签页里打开插件仓库。
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
**从远程地址打开**:宿主把它信任的地址上打开的每一个页面看作同一个使用者的页面,经局域网地址或隧道打开的页面(手机、另一台电脑)与运行 DSH 的电脑上那一页读写同一份设置,任意一边改动,另一边不需要刷新就会跟上。宿主不信任的地址上,页面连不上宿主。
|
|
27
33
|
|
|
28
34
|
**自定义品牌**:「外观」页末尾几行把你自己的品牌放到「主题风格」所选的品牌之上。「品牌名称」替换侧栏顶部的品牌文字;「标志图片」替换侧栏顶部、折叠栏、新会话页与账号行兜底头像上的标志;「文字标志」替换标志旁的名称,宽度按图片比例随高度换算,有它时不再显示品牌名称。图片收 PNG、SVG 与 WebP,单张不超过 2 MB,存在 DSH 主目录的 `dsh-claude-style/brand/` 下,也可以直接把 `mark.png`(或 `.svg`、`.webp`)与 `wordmark.png` 放进这个目录,刷新页面后生效。「图片颜色」选「原色」时图按自己的颜色显示;选「文字色」时图被当作形状,按所在位置的文字颜色上色,适合单色标志,亮色暗色下都看得清。「主色」改按钮、选中标记、链接与焦点环的颜色,按钮上的文字自动取深色或浅色;未指定时沿用所选品牌的主色,「配色」选「跟随宿主」时主色不生效。每一项留空或移除后,对应位置回到所选品牌的原样。
|
|
29
35
|
|
|
@@ -35,7 +41,7 @@
|
|
|
35
41
|
|
|
36
42
|
**左侧栏布局**:「宽松」(默认)是现在的样子;「紧凑」只把间距收小——上侧各行(新会话、插件、自动化任务,以及搜索框独立成行时的那一行)到工作区之间的空隙、工作区标题自身的上下留白、对话行的高度与行间距、两个分区之间的间隔,以及账号区内边距与它那一行的上下边距。控件的形状、字号、图标与配色都不动,因此两种布局下点得到的东西一样多。
|
|
37
43
|
|
|
38
|
-
**与其他主题插件同时使用**:「配色」与「字体」选「跟随宿主」后,本插件不再改写宿主的颜色与字体,只保留布局和控件;颜色交给 DSH 自己,或者交给同时启用的其他主题插件。例如与 [dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine) 一起用时,壁纸透过侧栏与对话区显示出来,插件自己的弹层随壁纸插件的玻璃效果变成半透明并模糊背后的画面。**与 [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux) 同时使用时**:那个插件实现了同一批聊天区交互(卷帘门、自动开合、文字淡入、文件变更行、聊天气泡动效、插入符动效),两套同时生效会互相拦点击、抢同一批按钮。所以本插件在检测到它时让位:设置页「对话」页的「聊天区动画效果」与「动效」页的「光标动画」「新文字淡入」三行控件禁用,但仍显示你自己设的值,下面另起一行用强调色注明「该选项由 dsh-chat-ux 管理」;你的设置不会被改写,卸载 dsh-chat-ux
|
|
44
|
+
**与其他主题插件同时使用**:「配色」与「字体」选「跟随宿主」后,本插件不再改写宿主的颜色与字体,只保留布局和控件;颜色交给 DSH 自己,或者交给同时启用的其他主题插件。例如与 [dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine) 一起用时,壁纸透过侧栏与对话区显示出来,插件自己的弹层随壁纸插件的玻璃效果变成半透明并模糊背后的画面。**与 [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux) 同时使用时**:那个插件实现了同一批聊天区交互(卷帘门、自动开合、文字淡入、文件变更行、聊天气泡动效、插入符动效),两套同时生效会互相拦点击、抢同一批按钮。所以本插件在检测到它时让位:设置页「对话」页的「聊天区动画效果」与「动效」页的「光标动画」「新文字淡入」三行控件禁用,但仍显示你自己设的值,下面另起一行用强调色注明「该选项由 dsh-chat-ux 管理」;你的设置不会被改写,卸载 dsh-chat-ux 之后原样生效。**与皮肤中心里的皮肤同时使用时**:皮肤中心把本插件列为可选皮肤,选中它即把整页交给本插件;换选别的皮肤时本主题整页让出,侧栏、对话、输入区与设置页一并撤下,页面由那款皮肤与宿主自己画,在皮肤中心里本插件那一行选回本主题即恢复。
|
|
39
45
|
|
|
40
46
|
**聊天区跟随**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部。补到底部走的是曲线:零散到达的字收得住尾巴,成片涌进的文字以一段稳速滑过去,再落到末尾。流式输出期间位置由宿主自己的跟随写到末尾,新长出的内容从屏幕下缘平滑滑上来,上方文字不再一帧跳上去,状态行停在原处不动;这段滑动由显卡完成,不占用页面的布局,多个会话同时输出时也不加重负担。你自己发出的消息不走这条曲线:宿主把它滚进视野的那一下照旧一步到位。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。
|
|
41
47
|
|
|
@@ -51,7 +57,7 @@
|
|
|
51
57
|
|
|
52
58
|
**文件变更行**:run_code 程序里派发出去的写入与编辑带上行尾的 `+n -m` 与可展开的改动卡片,路径可点开文件;失败与中断的行保留裁决信息。
|
|
53
59
|
|
|
54
|
-
**新文字淡入**:「动效」页的这一项管流式回答里新出现的字符。开着时它们先淡后实(约 0.12
|
|
60
|
+
**新文字淡入**:「动效」页的这一项管流式回答里新出现的字符。开着时它们先淡后实(约 0.12 秒),并按到达次序略作错开;整段一次到达的内容、几千字的突发与刚被折叠重排过的文字保持本色。两档都不带文字,各带一张预览卡,同一句样品在两张卡里逐字到达:「淡入」那张每个字落到最淡的一档再亮起来,「直接出现」那张把字一个个直接交出来,走完停一会儿再来一遍。这一项默认关闭;「动画」设为「减弱」时对话区不再淡入,两张卡各停在一帧:淡入那张末几个字停在渐淡的各档,直接出现那张是整句,卡片略变暗,行下方写明此时不生效。
|
|
55
61
|
|
|
56
62
|
**消息气泡动画**:「动效」页的这一项管自己发出去的消息落到对话里时怎么出现,自己带一个开关,关闭时这一项交回宿主(下面那两张卡片同时变灰、不能操作);两档都不带文字,各带一张预览卡,卡里是一小段只有用户气泡的对话,下面那一条在两种说法之间轮流换(一条落定、另一条接着来,走完再从头)。「在原地长出来」让气泡在自己的位置上从零长到满(约 0.32 秒,末尾轻微过冲,放大起点是气泡自己的右下角),行高与旁边的东西全程不动;「从输入框飞上来」是原来那一下:输入框那张卡片被抬起来飞到消息那一行,真消息在飞行期间藏着,落到那一行时交接。「动画」设为「减弱」时两条消息都不动,气泡直接站在它该在的位置。这一项默认「从输入框飞上来」。
|
|
57
63
|
|
|
@@ -61,7 +67,7 @@
|
|
|
61
67
|
|
|
62
68
|
**状态行动画**:「动效」页的这一项,管的是轮次进行中、对话末尾那一行文字上的动静,自己带一个开关,关闭时这一行交回宿主(它下面那两行——「精确状态行」与两张画法卡片——同时变灰、不能操作);开启后,紧跟着的「精确状态行」决定这一行说得多细:开着时写具体在做什么(正在操作的文件、命令声明的描述、推理里的原句,所以中文与英文会混着出现),关掉只写状态本身。再下面那两张画法卡片都不带文字,卡片里就是这一行自己的样子,一直在动:里面的字在两种说法之间来回换——旧的向上淡出、新的从下方升起,就是状态行换词的那套动作(「精确状态行」开着时改在三条样例之间一次一条地换:正在阅读README.md、Checking out current tree、正在思考)——画法则是默认的「扫光」:一道高光带贴着字形扫过,与宿主自己的行同一节奏;另一档「渐变流动」让文字本身流动着变色,七层径向色斑压在一条灰色渐变上,色斑绕着字框游走,同时整圈色相在转。点一张卡片立刻换过来;真实状态行的说法、换词与旁边的时间两档都一样;「动画」设为「减弱」时画法停住(扫光与渐变都不再走),说法照旧一轮一轮换,只是换成瞬间切换——不再演离开与升起那两半,预览卡与状态行在这一点上一致。
|
|
63
69
|
|
|
64
|
-
|
|
70
|
+
**对话统计信息位置**:会话的八个数字有两个去处。「收进上下文」(默认)把它们放进那枚上下文计量饼的弹层,输入卡片下方只留那枚饼;「独立成行」把其中的轮数与步数、输出速度、读入的 tokens、写回的 tokens 与缓存命中率写在输入卡片下面单独一行,末尾就是那枚计量饼。这一行里的数字接到新读数就从眼前的数连续计数到新值(每走一个步骤、流式输出期间都在动),中途再接到新读数就从当时的值接着走,切换会话时也从上一段的数字计数到新一段的;缓存命中那一截的色带只染数字与百分号,前面的字样留在这一行自己的颜色,命中率从九成的红走到 99% 的深绿,计量饼按占用自己在四成的绿到八成的红之间取色。窗口窄到这一行放不下时它会依次让位:先去缓存那截的字样,再去轮数与步数,再去计量饼旁的数字(饼留下),然后把读入与写回合成一个合计,最后把数字折叠成 k / M / B;窗口宽回来时按同一顺序退回。
|
|
65
71
|
|
|
66
72
|
**对话导航**:对话区右侧那列短横线每一轮一条,跟着你读到的位置走。鼠标碰到它,它就展开成一张列表:每一行写着开启这一轮的那条消息,正好落在它那条短横线原来的位置上——你正在读的那一轮还在原处,鼠标下面还是刚才那一轮;滚轮上下翻,点一行页面滑到那一轮,还没加载的早期对话先加载再跳;指针停在列表上时,对话区顶部的对话 / 轨迹标签照常显示。Alt+↑ / Alt+↓ 跳到上一轮或下一轮,连按会一轮一轮接着走;输入框里有草稿时这两个键留给输入框。跳到的那一轮开头会闪一条短横线。同时装着 [dsh-plugin-msg-nav](https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav) 时,Alt+↑ / Alt+↓ 留给它。
|
|
67
73
|
|
package/docs/STYLE.md
CHANGED
|
@@ -96,6 +96,8 @@ keeps where it states none of its own; `—` is a token that theme leaves unset.
|
|
|
96
96
|
| `--dsh-claude-ink-strong` | — | — | `#f5f4ef` | `#e9edf6` | `var(--dsw-alias-label-primary)` | active row ink |
|
|
97
97
|
| `--dsh-claude-session-ink` | — | — | `#8c8983` | `#8a91a0` | `var(--dsw-alias-label-secondary)` | session title at rest |
|
|
98
98
|
| `--dsh-claude-table-head` | `#f0f0ef` | `#eff3fb` | `#242320` | `#212631` | `var(--dsw-alias-bg-layer-2)` | table header row |
|
|
99
|
+
| `--dsh-claude-ripple-ink` | `#8a8a85` | `#8a92a6` | `#8c8a82` | `#8b93a7` | `var(--dsw-alias-label-secondary, #8a8a85)` | the new-conversation page's glyph field, and the wake a ripple leaves in it |
|
|
100
|
+
| `--dsh-claude-ripple-wave` | `#3b6ef0` | `#3b6ef0` | `#7fa6ff` | `#7fa6ff` | `var(--dsw-alias-link, #3b6ef0)` | the front of a ripple in the new-conversation page's glyph field |
|
|
99
101
|
| `--dsh-claude-scrollbar` | `rgba(208, 205, 193, 0.9)` | `rgba(206, 216, 233, 0.9)` | `rgba(58, 56, 51, 0.9)` | `rgba(54, 61, 75, 0.9)` | `var(--dsw-alias-border-l2)` | scrollbar thumb |
|
|
100
102
|
| `--dsh-claude-scrollbar-hover` | `rgba(143, 138, 126, 0.8)` | `rgba(129, 133, 140, 0.8)` | `rgba(107, 106, 101, 0.9)` | `rgba(104, 112, 128, 0.9)` | `var(--dsw-alias-label-caption)` | scrollbar thumb under the pointer |
|
|
101
103
|
| `--dsh-claude-link-hover` | `#a94f2f` | `#2c43b8` | `#f0a488` | `#b0c0ff` | `var(--dsw-alias-link)` | text link under the pointer |
|
|
@@ -283,6 +285,7 @@ edit the JSON, not the table.
|
|
|
283
285
|
| `--dsh-claude-duration-swap-gap` | `50ms` | the offset the words arriving start after the words leaving, so the two halves of a wording swap travel together |
|
|
284
286
|
| `--dsh-claude-duration-roll` | `160ms` | a figure's characters rolling over to new digits |
|
|
285
287
|
| `--dsh-claude-duration-move` | `200ms` | something travelling along its own track: a fold's door, the reasoning slider's knob and fill |
|
|
288
|
+
| `--dsh-claude-duration-count` | `220ms` | a session number counting to its new reading |
|
|
286
289
|
| `--dsh-claude-duration-slide` | `240ms` | the segmented controls' sliding highlight, a sidebar icon's quarter turn, the wording box taking the width of the words arriving, and streamed content sliding up from the bottom edge |
|
|
287
290
|
| `--dsh-claude-duration-fade` | `300ms` | a slow cross-fade: the theme flip, the titlebar tabs' hover reveal, the reasoning knob's glow, a placeholder handing its place to what it stood for |
|
|
288
291
|
| `--dsh-claude-duration-bounce` | `350ms` | a switch's knob travelling across with its double bounce |
|
|
@@ -434,7 +437,7 @@ the shell itself. What it carries is described under "Context popover" below.
|
|
|
434
437
|
| background | `var(--dsw-alias-bg-overlay)`; dark `#1e1e1d` |
|
|
435
438
|
| border | `1px solid var(--dsw-alias-border-l1)`; dark the same stroke, which the dark ladder makes a highlight. The edge stays the card's own border: the box the placement reads and the opening animation scales keeps the paint path it has always had, and no stroke is drawn inside it |
|
|
436
439
|
| radius | 12px |
|
|
437
|
-
| shadow | `0 8px 24px rgba(20,20,19,.12), 0 2px 6px rgba(20,20,19,.08)`; dark
|
|
440
|
+
| shadow | `0 8px 24px rgba(20,20,19,.12), 0 2px 6px rgba(20,20,19,.08)`; dark `0 8px 28px rgba(0,0,0,.65), 0 2px 8px rgba(0,0,0,.45)` |
|
|
438
441
|
| padding | 6px |
|
|
439
442
|
| layout | flex column, `gap: 6px`; a list body stacks its rows 3px apart |
|
|
440
443
|
| z-index | 99999, above the host's own menus (1100) |
|
|
@@ -572,6 +575,38 @@ is open, so the position is handed over in two custom properties on the card
|
|
|
572
575
|
pass that stamps it) which `features/hero-menu/hero-menu.css` reads with
|
|
573
576
|
`!important`; that declaration outranks the host's plain inline value.
|
|
574
577
|
|
|
578
|
+
## Context meter · 上下文计量
|
|
579
|
+
|
|
580
|
+
**The trigger is a pie.** Where the host draws a ring of two circles, the meter
|
|
581
|
+
draws two sectors on one centre: the share taken in the colour its occupancy fell
|
|
582
|
+
on, the rest of the plate in the quiet tone beside it. The smaller share keeps
|
|
583
|
+
the box's radius (8px) and the larger one steps in by up to 1.3px — half the
|
|
584
|
+
lift — so a lopsided split reads as the smaller part standing out to the edge,
|
|
585
|
+
15% and 85% mirror each other, and an even split is two half discs of one radius;
|
|
586
|
+
the step eases to nothing as the split comes even. The seam is one width, 1.2px,
|
|
587
|
+
shared between two strokes by the split: the occupied sector's stroke runs from
|
|
588
|
+
the whole width at nothing taken to nothing at everything taken, the plate's is
|
|
589
|
+
the mirror, and each is half the width at the even split. Each sector is cut by
|
|
590
|
+
the stroke around the other's path, so the seam follows the whole boundary — both
|
|
591
|
+
radii, the outer arc and the apex — and the two edges move with the split as the
|
|
592
|
+
reading crosses the middle. The part that stands out is painted last: the plate
|
|
593
|
+
above the even split, the reading's colour below it. The pie is 16px across, one
|
|
594
|
+
pixel more than the ring's 14px cell on each side, and concentric with it; the
|
|
595
|
+
ring keeps its cell and is hidden while the pie stands, so the trigger's layout
|
|
596
|
+
and the room the composer keeps for it are the host's. The occupied sector takes
|
|
597
|
+
the reading's own colour (the occupancy ramp, below), the plate the quiet tone
|
|
598
|
+
beside it.
|
|
599
|
+
|
|
600
|
+
**The line of numbers.** On its own line under the card, each figure is plain
|
|
601
|
+
text in the line's type (13px / 500, tabular figures), not a run of per-character
|
|
602
|
+
spans: a reading that moves is chased from the value on show, closing about two
|
|
603
|
+
thirds of the distance every 73ms and the rest within 220ms, a reading that lands
|
|
604
|
+
mid-count becomes the new destination, and another session's numbers are chased
|
|
605
|
+
from the ones on show too. Only the cache share's figure and the percent sign
|
|
606
|
+
after it wear the band; the words before them keep the line's tone. A card too
|
|
607
|
+
narrow drops figures in a fixed order, and the widest step folds each token
|
|
608
|
+
figure into k / M / B.
|
|
609
|
+
|
|
575
610
|
## Search · 搜索
|
|
576
611
|
|
|
577
612
|
**Sidebar box.** The box takes the brand's place in the logo row while the
|
|
@@ -874,4 +909,8 @@ plays its reaction.
|
|
|
874
909
|
features share (the popover card and rows, the sliding highlight) are in
|
|
875
910
|
`packages/client/src/shared/`. The host selector discipline and the style checks the build
|
|
876
911
|
runs are in `docs/adr/` (D3, D9, D30).
|
|
912
|
+
- The page's scale (settings › General) is the `zoom` the theme sheet puts on the body, so a
|
|
913
|
+
length written into the page is read in a smaller space than the one a bounding rect is
|
|
914
|
+
measured in: code that turns a measured box into a written length goes through
|
|
915
|
+
`packages/client/src/shared/page-zoom.ts`.
|
|
877
916
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|