dsh-claude-style 0.14.2 → 0.15.0-dev.22
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 +57 -3
- package/README.en.md +2 -2
- package/README.md +1 -1
- package/docs/FEATURES.en.md +2 -2
- package/docs/FEATURES.md +2 -2
- package/docs/SETTINGS.en.md +15 -11
- package/docs/SETTINGS.md +15 -11
- package/docs/STYLE.md +39 -14
- package/lib/assets/1a999a7d3c24.js.br +0 -0
- package/lib/assets/550eb2fb99aa.js.br +0 -0
- package/lib/assets/6947faba7fb6.js.br +0 -0
- package/lib/assets/840442766089.js.br +0 -0
- package/lib/assets/manifest.json +16 -16
- package/lib/client.js +11 -11
- package/lib/host/settings.js +8 -5
- package/lib/model-descriptions.json +59 -11
- package/package.json +1 -1
- package/lib/assets/320343f862cd.js.br +0 -0
- package/lib/assets/3b91bf51db72.js.br +0 -0
- package/lib/assets/92f87e9d3a60.js.br +0 -0
- package/lib/assets/fdd63e5ce50d.js.br +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,15 +4,57 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
-
[
|
|
7
|
+
## [0.15.0] - 2026-10-15
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
[中文](#cn-0.15.0) | [English](#en-0.15.0)
|
|
10
10
|
|
|
11
|
+
<h3 id="cn-0.15.0">新增功能</h3>
|
|
12
|
+
|
|
13
|
+
- 设置页「动效」页新增「新文字淡入」一行:流式回答里新出现的字符是否先淡后实(约 0.12 秒)由它决定,两档各带一张预览卡,同一句样品在卡里逐字到达,「淡入」那张每个字先落到最淡的一档再亮起来,「直接出现」那张把字一个个直接交出来;这一项默认关闭,关闭时新到的字符立即是本色。
|
|
14
|
+
- 设置页「动效」页新增「消息气泡动画」一行:自己发的消息落到对话里时怎么出现由它决定,两张卡片各演各的——「在原地长出来」让气泡在自己的位置上从零长到满(只改大小,旁边的东西不动),「从输入框飞上来」是原来那一下,输入框卡片被抬到消息那一行。默认仍是飞上来。
|
|
15
|
+
- 设置页「输入区」页「重绘模型选择器」下面多一项「模型描述」,默认开启:开着时一级列表的每个模型名下面写一行说明,关掉后每一行只剩模型名。
|
|
16
|
+
|
|
17
|
+
### 体验优化
|
|
18
|
+
|
|
19
|
+
- 侧栏里对话的状态标记换了一副样子:正在进行的对话不再转圈,改成一盏呼吸的灰灯,实心圆点每 2.4 秒从半亮到全亮一个来回,位置与大小都不动;空闲对话的空心圆与它同样 6px,圈线是 1px 发丝、颜色更淡,两枚标记只靠实心与空心区分,已归档列表里的那枚空心圆跟着一起改,两栏的标题仍从同一处开始。设置的「动画效果」选「减弱」时灯停在最亮的那一帧。
|
|
20
|
+
- 设置页「动效」页「光标动画」的两张预览卡改成逐字打出 `Hello World!`,光标跟着这行字往前走:打字期间一直亮着,打完停住才按原生节奏闪,与真光标一致——真光标每移动一次就把闪的节奏从头开始,打字时看不到它灭。两档的分别在于光标怎么到达下一个位置:「开」的那张滑过去,「关」的那张直接跳过去。
|
|
21
|
+
- 设置页「动效」页里,状态行与消息气泡动画各自得到一个开关,原先统管这两者的「聊天区动画效果」不再管它们;两张画法卡片移到各自开关下面,作为不带标题与说明的子选项,与开关之间不再有分隔线,开关关闭时置灰。「聊天区动画效果」改名为「聊天区滚动动画」并搬到「动效」页,只管跟随末尾、行与过程组的开合、文件操作行这三样。
|
|
22
|
+
- 设置页的「状态行描述」从「对话」页搬到「动效」页,落在状态行动画的开关与它的画法卡片之间,改名「精确状态行」并由分段控件改成开关:开着时状态行写具体在做什么,关掉只写状态本身,早先存下的「简洁 / 精确」照旧读得出来;开着时预览卡轮换的三条样例改成「正在阅读README.md」「Checking out current tree」「正在思考」。
|
|
23
|
+
- 状态行换词时不再空一拍:旧词向上淡出、模糊的同时,新词从下方升入,两段动画重叠着走完,整次换词收在 0.2 秒内,途中行里始终有字,计时仍贴着词尾。
|
|
24
|
+
- 每趟刷新少做整份文档的查找:侧栏搜索的位置与宿主搜索按钮、工作区分区的标题、输入区的首屏阶段标记都改为记住上一次的答案,宿主没有换掉那个元素就不再重新查找。同一条流式回答期间量了同一个回合:整份文档的查找从 2792 次降到 2026 次,其中查不到任何东西的从 1516 次降到 1351 次。
|
|
25
|
+
- 状态行开头的加载点现在跟着这一轮在做什么换动作:模型思考时三颗点照旧弹跳,这一轮改去写回答或调用工具时它们各沿一条直线来回——三条直线彼此相差 120°、其中一条反着走,球在两端最大、过中点最小,去程与回程一样长;两套动作之间不硬切:旧的那一列各自淡出、新的那一列各自淡入,每颗球都在自己动作里的那一拍上开始——跳球从落地回弹那一刻开始淡出、到最高点淡完,从最高点开始淡入、到落地淡完;走路从线的一端开始淡出、到中点淡完,从中点开始淡入、到另一端淡完,没有哪颗球被挪到别的动作的位置上;一个动作站满 2 秒才允许下一套接手,这段时间里来了又走的状态不打扰它。
|
|
26
|
+
|
|
27
|
+
### 问题修复
|
|
28
|
+
|
|
29
|
+
- 侧边栏的工作区名字过长时让位给行尾的悬停操作(名字以省略号收尾),工作区菜单与新建会话两个按钮始终留在栏内并可点击。
|
|
11
30
|
- 侧栏品牌标识悬停时不再浮出一块陶土色底板:它此前被列在「发送」按钮这类填充式 CTA 的规则里,靠一条按类名匹配的排除条件才没被填色;排除条件换掉之后,悬停底色落到了品牌按钮上。品牌按钮从这两条规则里移出,它的外观由自己那条规则给全,深色下也不再多出一块底板。
|
|
31
|
+
- 工作区树模式下,行的层级缩进回来了:每一层比它的上一层再向右让出 `depth * 12px`,扁平列表与按工作区分组的列表都保持原来的 6px。
|
|
32
|
+
- 侧栏收起成图标栏后,「进行中 / 已归档」控件与已归档列表随分区标题一起离开页面,宿主自己的分区按钮留在原处;侧栏重新展开时两者照旧回来。
|
|
33
|
+
- 「停止生成」按钮里的方块在任何显示缩放下都落在圆环正中:125% 与 150% 这类非整数缩放下,它不再偏出半个像素。
|
|
34
|
+
|
|
35
|
+
<h3 id="en-0.15.0">New Features</h3>
|
|
12
36
|
|
|
13
|
-
|
|
37
|
+
- The Motion tab gains a New-text fade row, deciding whether the characters arriving in a streaming answer start faint and settle over about 0.12 s; its two cards each hold the same sample line arriving character by character, the Fade in card landing each character at its faintest step before it brightens and the Appears at once card handing each one over as it is. The row ships off, and with it off arriving characters are solid at once.
|
|
38
|
+
- The Motion tab gains a Message bubble animation row, deciding how a message the reader sends arrives in the conversation: its two cards each show their own answer, Grows into its place taking the bubble from nothing at its own corner while nothing beside it moves, and Flies up from the composer carrying the answer that was already there. The row ships on the flight.
|
|
39
|
+
- The Composer tab gains a Model descriptions switch under Redraw the model picker, on by default: while it is on each model in the picker's first level carries a line under its name saying what the model is, and off leaves every row with the model's name alone.
|
|
40
|
+
|
|
41
|
+
### Improvements
|
|
14
42
|
|
|
43
|
+
- A conversation's status mark in the sidebar is drawn differently: a running conversation breathes instead of spinning, a lit grey dot whose light rises from half to full and back once every 2.4 seconds while it neither moves nor changes size, and an idle conversation keeps a hollow circle of the same 6px with a 1px hairline stroke in the quieter neutral, so the two marks differ by fill alone; the archived list's circle follows them and both lists still start their titles at the same place. Under the Animation setting's Reduced the light holds its brightest frame.
|
|
44
|
+
- On the Motion tab's Composer caret motion row, both preview cards now type `Hello World!` out character by character with the caret following the line: it stays lit for the whole time the line is being typed and blinks on the native cycle once the line stands, matching the drawn caret, which restarts its blink on every move and is therefore never seen dark while typing. The two cards differ in how the caret reaches each new place: it glides there, or arrives at once.
|
|
45
|
+
- On the Motion tab the waiting line and the message bubble animation each carry a switch of their own, and the chat-area switch no longer governs either of them; the preview cards stand under their switch as a sub-option that carries no title or description and no dividing line from the switch, and greys out while the switch is off. The chat-area switch is now Chat-area scrolling animation, moved to the Motion tab, and governs following the end, rows and groups folding, and the file operation rows.
|
|
46
|
+
- The Waiting-line detail row moves from the Conversation tab to the Motion tab, standing between the waiting line's switch and its paint cards: it is now Precise status line and an on/off switch, where on writes the specifics of a moment and off the bare states alone, with a value an earlier build stored as Simple or Precise still reading; with it on, the preview card takes turns between three samples: 正在阅读README.md, Checking out current tree and 正在思考.
|
|
47
|
+
- The status line hands its wording over without standing empty in between: the words leaving fade and blur upward while the ones arriving rise from below, the two halves travelling together and the change done inside 0.2 s, with words in the line throughout and the clock still sitting right after them.
|
|
48
|
+
- A pass now re-reads fewer things across the whole document: the sidebar search's box and the host's search button, the workspace section's label and the composer's hero-phase marker are all kept from the pass before while the host has not replaced the element. Measured over one streaming turn: document-wide queries fall from 2792 to 2026, and those that match nothing from 1516 to 1351.
|
|
49
|
+
- The loader at the head of the status line now changes with what the turn is doing: the three dots bounce while the model thinks, and once the turn writes or works they each walk a line of their own — 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, going out and coming back over the same stretch of time; 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 2 s before the next may take it over, so a state that comes and goes inside that stretch leaves it standing.
|
|
50
|
+
|
|
51
|
+
### Bug Fixes
|
|
52
|
+
|
|
53
|
+
- A workspace name too long for the sidebar now yields to the hover actions at the end of its row (the label ends in an ellipsis), so the workspace menu and the new-session button stay inside the column and stay clickable.
|
|
15
54
|
- The sidebar brand mark no longer floats a clay plate under the pointer: it was listed among the filled CTAs beside the Send button, kept unpainted only by an exclusion written against a host class name, and once that exclusion went the hover fill landed on the brand button. The brand button leaves those two rules; its look comes from its own rule alone, and the dark theme no longer gains a plate either.
|
|
55
|
+
- In the workspace tree a row's level indentation is back: each level stands `depth * 12px` further right than its parent, while the flat list and the group-by-workspace list keep the 6px they have today.
|
|
56
|
+
- With the sidebar collapsed to its icon rail, the In progress / Archived control and the archived list leave the page along with the section's heading, so the host's own section buttons stay clear; both return when the sidebar is wide again.
|
|
57
|
+
- The square inside the Stop button sits centred in its ring at every display scaling: at fractional scalings such as 125% and 150% it no longer lands half a pixel off.
|
|
16
58
|
|
|
17
59
|
## [0.14.2] - 2026-10-15
|
|
18
60
|
|
|
@@ -23,11 +65,23 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
23
65
|
- 端到端通道让每个场景声明的浏览器开关真正生效:远端设置走查改用一台带名字映射(`--host-resolver-rules`)的浏览器,不论整条通道是否共用一个浏览器都跑到底。
|
|
24
66
|
- 重要性台账记下两种判定都算数的记录(`either`):一行只在某一帧里存在,或由宿主的运行平台决定画不画,这一趟抓到与否都算数,检查不再要求把它划掉;台账同时按云端与本机两次判定重算。
|
|
25
67
|
|
|
68
|
+
<<<<<<< HEAD
|
|
26
69
|
<h3 id="en-0.14.2">Improvements</h3>
|
|
70
|
+
=======
|
|
71
|
+
### 问题修复
|
|
72
|
+
|
|
73
|
+
- 侧边栏的工作区名字过长时让位给行尾的悬停操作(名字以省略号收尾),工作区菜单与新建会话两个按钮始终留在栏内并可点击。
|
|
74
|
+
|
|
75
|
+
<h3 id="en-unreleased">Improvements</h3>
|
|
76
|
+
>>>>>>> f25e6c0 (fix(sidebar): 工作区名字过长时不再把行尾按钮挤出栏外)
|
|
27
77
|
|
|
28
78
|
- The end-to-end lane honours the browser switches a scenario declares: the remote-settings walk opens its page under the mapped name whether or not the lane shares one browser between scenarios.
|
|
29
79
|
- The importance ledger records the rows the walk cannot decide either way (`either`) — a row that lives inside one animation frame, or one the host's own platform decides to draw: whether this run catches it is right both ways, so the check no longer asks for it to be struck. The list is recomputed from the cloud run and this machine's run together.
|
|
30
80
|
|
|
81
|
+
### Bug Fixes
|
|
82
|
+
|
|
83
|
+
- A workspace name too long for the sidebar now yields to the hover actions at the end of its row (the label ends in an ellipsis), so the workspace menu and the new-session button stay inside the column and stay clickable.
|
|
84
|
+
|
|
31
85
|
## [0.14.1] - 2026-10-15
|
|
32
86
|
|
|
33
87
|
[中文](#cn-0.14.1) | [English](#en-0.14.1)
|
package/README.en.md
CHANGED
|
@@ -77,8 +77,8 @@ What the plugin does and what each setting changes is documented: [Features](doc
|
|
|
77
77
|
|
|
78
78
|
| Font | Used for | File |
|
|
79
79
|
|---|---|---|
|
|
80
|
-
| Anthropic Sans Web Text | Interface / UI | [`packages/assets/src/fonts/anthropic/AnthropicSansWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/
|
|
81
|
-
| Anthropic Serif Web Text | Conversation body / Markdown | [`packages/assets/src/fonts/anthropic/AnthropicSerifWebText.ttf`](https://github.com/Nwflower/dsh-claude-style/raw/
|
|
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
|
+
| 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
82
|
|
|
83
83
|
To enable the Anthropic fonts, choose one of the following:
|
|
84
84
|
|
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ dsh plugin --profile web add dsh-claude-style # npm 包(推
|
|
|
86
86
|
|
|
87
87
|
## 字体
|
|
88
88
|
|
|
89
|
-
> **重要:Anthropic 没有对其字体进行公开发行,[`点击此处可以查看`](https://github.com/Nwflower/dsh-claude-style/
|
|
89
|
+
> **重要:Anthropic 没有对其字体进行公开发行,[`点击此处可以查看`](https://github.com/Nwflower/dsh-claude-style/tree/master/packages/assets/src/fonts/anthropic),请自行下载,仅供学习或研究用途**。
|
|
90
90
|
|
|
91
91
|
Anthropic 字体启用(二选一):
|
|
92
92
|
|
package/docs/FEATURES.en.md
CHANGED
|
@@ -24,8 +24,8 @@ What each feature does and where its switch lives; the six tabs, their rows and
|
|
|
24
24
|
- **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
25
|
- **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 main scroller's own follow is walked along that curve too rather than written to the end in a single frame — with a fast stream the newest lines trail just below the fold and slide into place once it stops. 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
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
|
-
- **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, cut past 32 characters); 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, cut past 40 characters); and reasoning carrying an English present-continuous clause hands the line the model's own words ("Checking the file is true": from the participle to that clause's end, cut past 40 characters, a negated clause and reasoning in another language passed over, and "Thinking…" where there is none). 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. 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 dots in the accent in force, each rising and flattening as it leaves the floor,
|
|
28
|
-
- **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.
|
|
27
|
+
- **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, cut past 32 characters); 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, cut past 40 characters); and reasoning carrying an English present-continuous clause hands the line the model's own words ("Checking the file is true": from the participle to that clause's end, cut past 40 characters, a negated clause and reasoning in another language passed over, and "Thinking…" where there is none). 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. 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
|
+
- **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
29
|
- **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.
|
|
30
30
|
- **Send flight**: On submission the composer card lifts and narrows into the bubble as it travels, the flying copy carrying the bubble's colour from its first frame and its words re-flowing into the shape; it meets the message row, where the real bubble shows underneath and the flying copy fades out, so the words sharpen into place.
|
|
31
31
|
- **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.
|
package/docs/FEATURES.md
CHANGED
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
- **对话导航**:对话区右侧那列短横线每一轮一条,跟着你读到的位置走。鼠标碰到它,它就展开成一张列表:每一行写着开启这一轮的那条消息,正好落在它那条短横线原来的位置上——你正在读的那一轮还在原处,鼠标下面还是刚才那一轮;滚轮上下翻,点一行页面滑到那一轮,还没加载的早期对话先加载再跳;指针停在列表上时,对话区顶部的对话 / 轨迹标签照常显示。Alt+↑ / Alt+↓ 跳到上一轮或下一轮,连按会一轮一轮接着走;输入框里有草稿时这两个键留给输入框。跳到的那一轮开头会闪一条短横线。同时装着 [dsh-plugin-msg-nav](https://github.com/SherUnlocked-4869/dsh-plugin-msg-nav) 时,Alt+↑ / Alt+↓ 留给它。
|
|
25
25
|
- **聊天区跟随**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部。补到底部走的是曲线:零散到达的字收得住尾巴,成片涌进的文字以一段稳速滑过去,再落到末尾。流式输出期间主滚动条的新内容也沿这条曲线推进,不再一帧写到底;输出很快时最新几行会短暂拖在屏幕下缘之外,流一停就滑到位。你自己发出的消息不走这条曲线:宿主把它滚进视野的那一下照旧一步到位。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。
|
|
26
26
|
- **自动开合与卷帘门**:模型还在思考时思考行开着,思考停下就收回去;运行中的过程组自动展开,这一段结束再收起。读者自己按过的行或组在当时的阶段里不再被改动。开着的那段思考停在一个跟着它长高的窗口里:窗口先是和文本一样高,长到推理能到的最大高度就停在那里,只有到了这一刻文字才一档一档往上走两行,走到最新一行就停住,上下边缘渐隐,也不再往下推整列对话;推理一停,窗口撤下,读者打开这一行读到的是完整文本,「动画」为「减弱」时不设这个窗口。过程组的标题改写成这一组装了什么:「执行 2 次思考,调用 1 次工具」,没有的项不写,数字随内容增加逐位滚动,这一段还在进行时整行带着宿主那样的扫光;放不下整句时改用「思考×2 · 工具×1」,位置宽回来再换回整句,控件的可访问名字始终是整句。点开或收起一行(工具卡片、思考行、命令卡片)以及过程组时,高度逐帧变化,下方内容被真的推开或收回;门只走读者看得见的那一段,内容再长也是同一速度,多张卡片的展开体整扇门一起走。
|
|
27
|
-
- **模型正在做什么的那一行**:轮次进行中,对话末尾那一行不再是固定的「深度求索中,用时 N 秒 ···」,而是写出这一轮此刻在做的事:「正在思考」「正在准备工具调用」「正在调用工具」「正在写回答」,后面跟着这一轮已用的时间(用宿主自己的单位)。三种状态说的是具体的东西:调用在跑时写出它操作的文件(「正在读取 app.js」「正在编辑 notes.md」「正在写入 out.txt」,只取文件名,名字过长截到 32 字);命令调用在参数里声明了这条命令做什么(宿主要求声明),这一行把它原样写出(「Regenerate the changelog」:只取第一行,超过 40 字截断);推理正文里出现英文进行时从句时把模型自己那句话写出来(「Checking the file is true」:从动词截到这一句的句末符号,超过 40 字截断,否定的句子与不是英文的推理都不取,取不到就回到「正在思考」)。「对话」页的「状态行描述」选「简洁」时这些具体内容都不读,只说状态本身;选「精确」(默认)照旧。这一行跟着宿主自己的发布走,调用刚开始跑就被读到;每种说法写上之后锁住 1 秒,这一秒里状态再换也不动,锁一过就直接写当时最新的状态(中间来过的那些不补演),因此一个轮次里状态换得再快,这一行也只一秒换一次;被锁跨过去的调用说法不在此列——一次读完的小文件调用会在锁一过先补上它,再轮到当时的状态。说法换掉时旧的向上淡出、新的从下方升起(来自 transitions.dev 的「Text states swap」);说法盒子换宽度时,旁边的计时随之滑到新位置,不做两次跳变;一直读不出状态时这一行说这个品牌自己的那一个词,与模型思考时说的同一个:Claude 品牌下是「正在思考」,DeepSeek 品牌下是宿主自己的「深度求索中」,不因为读不出状态而换一次说法;模型连续 10 秒没有开口时,计时后面多一枚「暂未响应」:它从左下方滑上这一行,同时从无到有弹出来,模型一开口就缩回消失。这一行带扫光(「动效」页可换成让文字本身流动着变色的那一档);宿主的小鲸鱼是 DeepSeek 自己的形象,Claude
|
|
28
|
-
-
|
|
27
|
+
- **模型正在做什么的那一行**:轮次进行中,对话末尾那一行不再是固定的「深度求索中,用时 N 秒 ···」,而是写出这一轮此刻在做的事:「正在思考」「正在准备工具调用」「正在调用工具」「正在写回答」,后面跟着这一轮已用的时间(用宿主自己的单位)。三种状态说的是具体的东西:调用在跑时写出它操作的文件(「正在读取 app.js」「正在编辑 notes.md」「正在写入 out.txt」,只取文件名,名字过长截到 32 字);命令调用在参数里声明了这条命令做什么(宿主要求声明),这一行把它原样写出(「Regenerate the changelog」:只取第一行,超过 40 字截断);推理正文里出现英文进行时从句时把模型自己那句话写出来(「Checking the file is true」:从动词截到这一句的句末符号,超过 40 字截断,否定的句子与不是英文的推理都不取,取不到就回到「正在思考」)。「对话」页的「状态行描述」选「简洁」时这些具体内容都不读,只说状态本身;选「精确」(默认)照旧。这一行跟着宿主自己的发布走,调用刚开始跑就被读到;每种说法写上之后锁住 1 秒,这一秒里状态再换也不动,锁一过就直接写当时最新的状态(中间来过的那些不补演),因此一个轮次里状态换得再快,这一行也只一秒换一次;被锁跨过去的调用说法不在此列——一次读完的小文件调用会在锁一过先补上它,再轮到当时的状态。说法换掉时旧的向上淡出、新的从下方升起(来自 transitions.dev 的「Text states swap」);说法盒子换宽度时,旁边的计时随之滑到新位置,不做两次跳变;一直读不出状态时这一行说这个品牌自己的那一个词,与模型思考时说的同一个:Claude 品牌下是「正在思考」,DeepSeek 品牌下是宿主自己的「深度求索中」,不因为读不出状态而换一次说法;模型连续 10 秒没有开口时,计时后面多一枚「暂未响应」:它从左下方滑上这一行,同时从无到有弹出来,模型一开口就缩回消失。这一行带扫光(「动效」页可换成让文字本身流动着变色的那一档);宿主的小鲸鱼是 DeepSeek 自己的形象,Claude 品牌下它让位给本插件自己的加载点:三枚 4px 圆点用当时生效的主题色,模型思考时它们照旧弹跳(各自弹起 8 像素、离地时压扁,半秒一次,第二枚与第三枚分别错开五分之二与五分之三个周期),这一轮改成写回答或调用工具时换另一套走法——三颗点各沿一条直线来回,三条直线彼此相差 120°、其中一条反着走,球在两端最大、过中点最小,一个来回 1.25 秒、去程与回程一样长;两套走法之间不硬切:旧的那一列各自淡出、新的那一列各自淡入,每颗球都在自己动作里的那一拍上开始——跳球从落地回弹那一刻开始淡出、到最高点淡完,从最高点开始淡入、到落地淡完;走路从线的一端开始淡出、到中点淡完,从中点开始淡入、到另一端淡完,没有哪颗球被挪到别的动作的位置上;一个动作站满 2 秒才允许下一套接手,这段时间里来了又走的状态不打扰它;其余品牌下宿主的鲸鱼尾照旧,读屏播报也照旧;说法比这一行放得下的宽度更长时,它在这个宽度上截断并画省略号,计时与徽标留在原处;「动画」设为「减弱」时说法直接换掉,不做上面那三段。只要对话还在跟随末尾,这一行就停在输入框上方,不断追加的内容不再带着它上下移动;读者自己往回翻看时它照常随内容走。同一内容容器内,第三方插件隐藏宿主文案并提供可见替代文字时,主题等待行自动让位;接管结束后恢复,其他聊天动效继续运行。
|
|
28
|
+
- **新文字淡入**:流式回答里新出现的字符先淡后实,并按到达次序略作错开;整段一次到达的内容、几千字的突发与刚被折叠重排过的文字保持本色。设置页的「动效」页有「淡入」与「直接出现」两档,各带一张预览卡,默认「直接出现」。
|
|
29
29
|
- **文件操作行**:一个文件的读取、编辑与写入带着行尾的 `+n -m`、可展开的改动卡片或读取窗口,路径可点开文件;同一个文件在同一个过程组里的多次调用读成一行,行首的图标与标题跟着最后一次操作换新,行尾的数字是这些改动的累计值、随每次改动到达逐位翻页,展开这一行读到全部改动(只被读取过时读到这一次读取的窗口);失败与中断的行保留裁决信息。
|
|
30
30
|
- **聊天气泡动效**:提交消息时输入卡片浮起、一路收成那条气泡:飞行的这一份从第一帧就是气泡的颜色,草稿里的字跟着形状重新排,最后接上真实的消息行——真实气泡在下面先显示出来,飞行的那份淡出,文字逐渐变清晰。
|
|
31
31
|
- **输入框插入符动效**:输入框里的光标由插件自己绘制,移动时滑过去;提问卡片的作答框与排队消息的行内编辑框同样覆盖。设置页的「动效」页有开与关两档,各带一张预览卡。
|
package/docs/SETTINGS.en.md
CHANGED
|
@@ -10,14 +10,14 @@ The settings page appears both in the settings dialog (the "Claude Style" tab) a
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| General | Theme style, Username, Open popovers on hover |
|
|
12
12
|
| Appearance | Colours, Typefaces, Home layout, Mascot, Where it appears, Brand name, Brand mark, Wordmark, Image colours, Accent colour |
|
|
13
|
-
| Composer | Composer restyle, Redraw the model picker (with Quick providers and the Peak rate meter under it), Redraw the permission control |
|
|
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
|
-
| Conversation | Conversation navigator,
|
|
16
|
-
| Motion | Animation, Waiting-line animation (Highlight sweep / Colour wash), Composer caret motion (On / Off) |
|
|
15
|
+
| Conversation | Conversation navigator, Conversation statistics position (Inside the context popover / On its own line), Chat / Trajectory tabs, Header in the title bar |
|
|
16
|
+
| Motion | Animation, Chat-area scrolling animation (Following the end / Rows and groups folding / File operation rows), Waiting-line animation (a switch, with a Precise status line switch and two cards under it: Highlight sweep / Colour wash), Composer caret motion (On / Off), New-text fade (Fade in / Appears at once), Message bubble animation (a switch, with two cards under it: Grows into its place / Flies up from the composer) |
|
|
17
17
|
|
|
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.
|
|
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
|
-
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 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.
|
|
20
|
+
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
21
|
|
|
22
22
|
**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
23
|
|
|
@@ -27,13 +27,15 @@ In the settings dialog, this page's heading row ends with a GitHub mark; pressin
|
|
|
27
27
|
|
|
28
28
|
**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
29
|
|
|
30
|
+
**Model descriptions**: in the redrawn model menu's first level each model's name carries a line under it saying what that model is. The line comes from the copy table shipped with the plugin, matched by name pattern, and a model the table does not match keeps its name alone; the More models level carries no such line, since that list is every provider's full catalog and reads better as names. Off leaves every row with the model's name alone and the rest of the picker as it is.
|
|
31
|
+
|
|
30
32
|
**Peak rate meter**: every row of the model menu carries the rate in force for that model right now. Peak, off-peak and a dated promotion each get their own mark, the colour separates expensive from cheap, and the multiplier is followed by how long it lasts; hovering the badge prints the whole judgement and what it becomes. The judgement is made from each provider's own published schedule in that provider's own time zone: outside the weekday windows, and on weekends and public holidays in full, the rate is off-peak, and a window crossing midnight belongs to the day it starts. A model with no schedule published carries no badge. The schedules are one snapshot in the public [offpeakclock.com](https://offpeakclock.com) catalog: the host half — not the page — fetches it, keeps a copy on disk and refreshes it every 24 hours, and judges by the copy shipped in the package when it cannot be reached.
|
|
31
33
|
|
|
32
34
|
**Sidebar search**: with Sidebar search on, the sidebar carries a search box whose palette finds sessions (titles and content), projects, plugins, Skills and shortcuts; picking a content hit lands the page on the turn holding that message, paging that turn's records in first on a long history. Search box style places it: Cover the brand (the default) puts it in the brand row, standing over the brand while the pointer is anywhere over the sidebar and giving the brand back when the pointer leaves; Standalone gives it a row of its own under the brand row, shown always; Icon draws no box of the plugin's, keeping DSH's own search button where the host draws it and taking only its click over, so pressing it opens this plugin's palette. The content match reads your own messages and the model's answers alone: injected context, the Skill catalog and reasoning never reach the results.
|
|
33
35
|
|
|
34
36
|
**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.
|
|
35
37
|
|
|
36
|
-
**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
|
|
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.
|
|
37
39
|
|
|
38
40
|
**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 main scroller's own follow is walked along that curve too rather than written to the end in a single frame — with a fast stream the newest lines trail just below the fold and slide into place once it stops. 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.
|
|
39
41
|
|
|
@@ -43,19 +45,21 @@ In the settings dialog, this page's heading row ends with a GitHub mark; pressin
|
|
|
43
45
|
|
|
44
46
|
**Counted process headers**: a process group's header says what the group holds, in place of the host's list of activities — "2 thoughts, 1 tool call". Empty figures are left out, each number rolls 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 (a narrow window, a narrow row) falls back to the compact figures, `Thinking×2 · Tools×1`, and takes the sentence back when the room returns; the control's accessible name is the sentence either way.
|
|
45
47
|
|
|
46
|
-
**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. Two 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, cut past 32 characters), and reasoning carrying an English present-continuous clause hands the line the model's own words ("Checking the file is true": from the participle to that clause's end, cut past 40 characters, a negated clause and reasoning in another language passed over, and "Thinking…" where there is none). 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. A wording that changes runs transitions.dev's "Text states swap": the old one blurs and fades upward
|
|
48
|
+
**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. Two 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, cut past 32 characters), and reasoning carrying an English present-continuous clause hands the line the model's own words ("Checking the file is true": from the participle to that clause's end, cut past 40 characters, a negated clause and reasoning in another language passed over, and "Thinking…" where there is none). 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. A wording that changes runs transitions.dev's "Text states swap": the old one blurs and fades upward while the new one rises from below, the two travelling together and the change over in about 0.2 s, and the box takes the arriving wording's width in one move, so the clock beside it travels to its new place (about 0.24 s) 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. The line sweeps, 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 and 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 neither half of the swap. 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.
|
|
47
49
|
|
|
48
50
|
**Send flight**: on submission the composer card lifts as it is and narrows into the bubble as it travels, its words re-flowing into the shape, landing on the message row: the real bubble shows underneath and the flying copy fades out, so the words sharpen into place.
|
|
49
51
|
|
|
50
52
|
**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.
|
|
51
53
|
|
|
52
|
-
**New text fades in**: characters arriving in a streaming answer 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.
|
|
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 both cards hold the whole line and the conversation stops fading as well.
|
|
55
|
+
|
|
56
|
+
**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.
|
|
53
57
|
|
|
54
|
-
**A rolling door for folds**: 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. It switches with Chat-area
|
|
58
|
+
**A rolling door for folds**: 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. It switches with Chat-area scrolling animation, together with the entrance fade of an expanded body.
|
|
55
59
|
|
|
56
|
-
**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 a preview card carrying no text: on
|
|
60
|
+
**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 a preview card carrying no text: the card types `Hello World!` out character by character with the caret following the line, lit for the whole time it is being typed and blinking on the native cycle once the line stands — the drawn caret restarts its blink on every move, so a reader typing never sees it dark. The two answers differ in how the caret reaches each new place: on glides there, off arrives at once the way the host's own caret does.
|
|
57
61
|
|
|
58
|
-
**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:
|
|
62
|
+
**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.
|
|
59
63
|
|
|
60
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 ring opens and leaves only the ring 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 ring itself at the end. A figure on that line re-enters character by character whenever it moves (every step, and all through a streaming answer), and the cache share and the ring each take their own colour band: the share runs from red in the nineties to dark green at 99%, the occupancy from green at two fifths to 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 ring (the ring 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.
|
|
61
65
|
|
package/docs/SETTINGS.md
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| 通用 | 主题风格、用户名、悬停展开弹层 |
|
|
12
12
|
| 外观 | 配色、字体、首页版面、吉祥物、出现位置、品牌名称、标志图片、文字标志、图片颜色、主色 |
|
|
13
|
-
| 输入区 |
|
|
13
|
+
| 输入区 | 输入区重绘范围、重绘模型选择器(及其下的模型描述、快捷供应商与峰谷电表)、重绘权限控件 |
|
|
14
14
|
| 侧栏 | 折叠侧栏设置区(及其下的封号彩蛋:关闭 / 中文 / English)、侧栏搜索、搜索框样式、进行中 / 已归档视图、面板悬浮卡片、左侧栏布局(宽松 / 紧凑) |
|
|
15
|
-
| 对话 |
|
|
16
|
-
| 动效 |
|
|
15
|
+
| 对话 | 对话导航、对话统计信息位置(收进上下文 / 独立成行)、对话 / 轨迹标签条、会话标题进入顶栏 |
|
|
16
|
+
| 动效 | 动画效果、聊天区滚动动画(跟随末尾 / 行与过程组的开合 / 文件操作行)、状态行动画(一个开关,下面依次是「精确状态行」开关与两张卡:扫光 / 渐变流动)、光标动画(开 / 关)、新文字淡入(淡入 / 直接出现)、消息气泡动画(一个开关,下面两张卡:在原地长出来 / 从输入框飞上来) |
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
每一项接管宿主界面的功能都有自己的开关,关闭后宿主原来的界面原样回来,不需要刷新页面。「聊天区滚动动画」管的是对话区里随内容滚动的那三样——跟随末尾、行与过程组的开合、文件操作行——开启时播放本插件的这一套,关闭后这三样交回宿主,宿主自己的做法也一并回来;「动效」页里的状态行动画与消息气泡动画各自带一个开关,不再跟它一起走,光标动画与新文字淡入也照旧各自有开与关两档。
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
有几项只在另一项打开时起作用,那一项关闭时它们变灰、不能操作,仍显示你设的值,说明下面写明在等哪一项:「重绘模型选择器」(连同模型描述、快捷供应商与峰谷电表)和「重绘权限控件」画在重绘后的输入区里,输入区重绘范围选「关闭」时变灰;「对话统计信息位置」只在输入区重绘覆盖对话页(「仅对话」或「全部」)时起作用;「封号彩蛋」从账号弹层打开,「折叠侧栏设置区」关闭时一起变灰。「会话标题进入顶栏」只作用于 Windows 桌面端的窗口,在别的页面(浏览器、macOS 窗口)里同样变灰,仍显示你设的值。
|
|
21
21
|
|
|
22
22
|
**封号彩蛋**:点账号弹层顶上的账号行,打开一张仿 Claude「账号已暂停」的整页彩蛋,按「侧栏」页这一行选的语言显示,与界面语言无关。选「关闭」后账号行只显示名字,按它不再打开任何东西。
|
|
23
23
|
|
|
@@ -27,13 +27,15 @@
|
|
|
27
27
|
|
|
28
28
|
**自定义品牌**:「外观」页末尾几行把你自己的品牌放到「主题风格」所选的品牌之上。「品牌名称」替换侧栏顶部的品牌文字;「标志图片」替换侧栏顶部、折叠栏、新会话页与账号行兜底头像上的标志;「文字标志」替换标志旁的名称,宽度按图片比例随高度换算,有它时不再显示品牌名称。图片收 PNG、SVG 与 WebP,单张不超过 2 MB,存在 DSH 主目录的 `dsh-claude-style/brand/` 下,也可以直接把 `mark.png`(或 `.svg`、`.webp`)与 `wordmark.png` 放进这个目录,刷新页面后生效。「图片颜色」选「原色」时图按自己的颜色显示;选「文字色」时图被当作形状,按所在位置的文字颜色上色,适合单色标志,亮色暗色下都看得清。「主色」改按钮、选中标记、链接与焦点环的颜色,按钮上的文字自动取深色或浅色;未指定时沿用所选品牌的主色,「配色」选「跟随宿主」时主色不生效。每一项留空或移除后,对应位置回到所选品牌的原样。
|
|
29
29
|
|
|
30
|
+
**模型描述**:重绘后的模型菜单一级列表里,每个模型名下面写一行说明,讲这个模型是什么。说明按名字模式从随包附带的文案表里取,表里没有对上的模型只写名字;「更多模型」那一层不写说明,那里是各家供应商的完整目录,只留模型名更好认。关闭后每一行只剩模型名,选择器其余部分照旧。
|
|
31
|
+
|
|
30
32
|
**峰谷电表**:模型菜单的每一行标出该模型此刻的倍率。峰价、谷价与限时活动三种状态各有自己的图标,颜色区分贵与便宜,倍数后面跟着距离切换还有多久;鼠标停在徽章上,悬停提示写出此刻的完整判定与切换后的状态。判定按各家供应商自己发布的作息表与自己的时区做,工作日窗口之外、周末与法定节假日整日都算谷价,跨零点的窗口归它开始的那一天。没有任何作息表的模型不显示徽章。作息表是公开目录 [offpeakclock.com](https://offpeakclock.com) 里的一份快照,由宿主半边(而不是页面)取一次、在本机留一份缓存并按 24 小时刷新;连不上时按插件包里带的那份判定。
|
|
31
33
|
|
|
32
34
|
**侧栏搜索**:开启后侧栏里多一个搜索框,打开的面板能找会话(标题与内容)、项目、插件、Skill 与快捷键;点开一条内容命中,页面落到那条消息所在的一轮,历史很长时先把这一轮的记录翻页读进来。「搜索框样式」决定它站在哪里:「覆盖品牌」(默认)把它放进品牌行,指针移到侧栏上时它盖过品牌,指针移开再把品牌让回来;「独立」在品牌行下方给它自己一行,一直显示;「图标」不画插件自己的搜索框,让 DSH 自己的搜索按钮留在原处,只把单击接管过来,点它打开的是本插件的面板。内容匹配只认你发出的消息与模型的回答,注入的环境提示、Skill 目录与推理过程都不进结果。
|
|
33
35
|
|
|
34
36
|
**左侧栏布局**:「宽松」(默认)是现在的样子;「紧凑」只把间距收小——上侧各行(新会话、插件、自动化任务,以及搜索框独立成行时的那一行)到工作区之间的空隙、工作区标题自身的上下留白、对话行的高度与行间距、两个分区之间的间隔,以及账号区内边距与它那一行的上下边距。控件的形状、字号、图标与配色都不动,因此两种布局下点得到的东西一样多。
|
|
35
37
|
|
|
36
|
-
**与其他主题插件同时使用**:「配色」与「字体」选「跟随宿主」后,本插件不再改写宿主的颜色与字体,只保留布局和控件;颜色交给 DSH 自己,或者交给同时启用的其他主题插件。例如与 [dsh-wallpaper-engine](https://github.com/elysia395/dsh-wallpaper-engine) 一起用时,壁纸透过侧栏与对话区显示出来,插件自己的弹层随壁纸插件的玻璃效果变成半透明并模糊背后的画面。**与 [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux)
|
|
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 之后原样生效。
|
|
37
39
|
|
|
38
40
|
**聊天区跟随**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部。补到底部走的是曲线:零散到达的字收得住尾巴,成片涌进的文字以一段稳速滑过去,再落到末尾。流式输出期间主滚动条的新内容也沿这条曲线推进,不再一帧写到底;输出很快时最新几行会短暂拖在屏幕下缘之外,流一停就滑到位。你自己发出的消息不走这条曲线:宿主把它滚进视野的那一下照旧一步到位。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。
|
|
39
41
|
|
|
@@ -43,19 +45,21 @@
|
|
|
43
45
|
|
|
44
46
|
**过程组标题上的计数**:过程组的标题不再只写「执行了命令,已读取文件,已调用工具等」,而是写这一组装了什么,例如「执行 2 次思考,调用 1 次工具」;没有的项不写,数字随内容增加逐位滚动,这一段还在进行时整行带着与宿主同样的扫光。这一行放不下整句时(窗口窄、过程组所在的行窄)改用简洁写法「思考×2 · 工具×1」,位置宽回来再换回整句;控件的可访问名字始终是整句。
|
|
45
47
|
|
|
46
|
-
**模型正在做什么的那一行**:轮次进行中,对话末尾那一行不再是固定的「深度求索中,用时 N 秒 ···」,而是写出这一轮此刻在做的事:「正在思考」「正在准备工具调用」「正在调用工具」「正在写回答」,后面跟着这一轮已用的时间(用宿主自己的单位)。两种状态说的是具体的东西:调用在跑时写出它操作的文件(「正在读取 app.js」「正在编辑 notes.md」「正在写入 out.txt」,只取文件名,名字过长截到 32 字),推理正文里出现英文进行时从句时把模型自己那句话写出来(「Checking the file is true」:从动词截到这一句的句末符号,超过 40 字截断,否定的句子与不是英文的推理都不取,取不到就回到「正在思考」)。这一行跟着宿主自己的发布走,调用刚开始跑就被读到;每种说法写上之后锁住 1
|
|
48
|
+
**模型正在做什么的那一行**:轮次进行中,对话末尾那一行不再是固定的「深度求索中,用时 N 秒 ···」,而是写出这一轮此刻在做的事:「正在思考」「正在准备工具调用」「正在调用工具」「正在写回答」,后面跟着这一轮已用的时间(用宿主自己的单位)。两种状态说的是具体的东西:调用在跑时写出它操作的文件(「正在读取 app.js」「正在编辑 notes.md」「正在写入 out.txt」,只取文件名,名字过长截到 32 字),推理正文里出现英文进行时从句时把模型自己那句话写出来(「Checking the file is true」:从动词截到这一句的句末符号,超过 40 字截断,否定的句子与不是英文的推理都不取,取不到就回到「正在思考」)。这一行跟着宿主自己的发布走,调用刚开始跑就被读到;每种说法写上之后锁住 1 秒,这一秒里状态再换也不动,锁一过就直接写当时最新的状态(中间来过的那些不补演),因此一个轮次里状态换得再快,这一行也只一秒换一次;被锁跨过去的调用说法不在此列——一次读完的小文件调用会在锁一过先补上它,再轮到当时的状态。说法换掉时旧的向上淡出、新的从下方升起,两段重叠着一同走完(整次约 0.2 秒,来自 transitions.dev 的「Text states swap」);说法盒子换宽度时,旁边的计时随之滑到新位置(约 0.24 秒),不做两次跳变;一直读不出状态时这一行说这个品牌自己的那一个词,与模型思考时说的同一个:Claude 品牌下「正在思考」,DeepSeek 品牌下宿主自己的「深度求索中」;模型连续 10 秒没有开口时,计时后面多一枚「暂未响应」。这一行带扫光;宿主的小鲸鱼是 DeepSeek 自己的形象,Claude 品牌下它让位给本插件自己的加载点:三枚 4px 圆点用当时生效的主题色,模型思考时它们照旧弹跳(各自弹起 8 像素并在离地时压扁,半秒一次,第二枚与第三枚分别错开五分之二与五分之三个周期),这一轮改成写回答或调用工具时换另一套走法——三颗点各沿一条直线来回,三条直线彼此相差 120°、其中一条反着走,球在两端最大、过中点最小,一个来回 1.25 秒、去程与回程一样长;两套走法之间不硬切:旧的那一列各自淡出、新的那一列各自淡入,每颗球都在自己动作里的那一拍上开始——跳球从落地回弹那一刻开始淡出、到最高点淡完,从最高点开始淡入、到落地淡完;走路从线的一端开始淡出、到中点淡完,从中点开始淡入、到另一端淡完,没有哪颗球被挪到别的动作的位置上;一个动作站满 2 秒才允许下一套接手,这段时间里来了又走的状态不打扰它;其余品牌下宿主的鲸鱼尾照旧,读屏播报也照旧;说法比这一行放得下的宽度更长时,它在这个宽度上截断并画省略号,计时与徽标留在原处;「动画」设为「减弱」时说法直接换掉,不做上面那两段。只要对话还在跟随末尾,这一行就停在输入框上方,不断追加的内容不再带着它上下移动;读者自己往回翻看时它照常随内容走。
|
|
47
49
|
|
|
48
50
|
**聊天气泡动效**:提交消息时输入卡片原样浮起、一路收成那条气泡,草稿里的字跟着形状重新排,落地正好接上真实的消息行:真实气泡在下面先显示出来,飞行的那份淡出,文字逐渐变清晰。
|
|
49
51
|
|
|
50
52
|
**文件变更行**:run_code 程序里派发出去的写入与编辑带上行尾的 `+n -m` 与可展开的改动卡片,路径可点开文件;失败与中断的行保留裁决信息。
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
**新文字淡入**:「动效」页的这一项管流式回答里新出现的字符。开着时它们先淡后实(约 0.12 秒),并按到达次序略作错开;整段一次到达的内容、几千字的突发与刚被折叠重排过的文字保持本色。两档都不带文字,各带一张预览卡,同一句样品在两张卡里逐字到达:「淡入」那张每个字落到最淡的一档再亮起来,「直接出现」那张把字一个个直接交出来,走完停一会儿再来一遍。这一项默认关闭;「动画」设为「减弱」时两张卡都停在整句上,对话区也不再淡入。
|
|
55
|
+
|
|
56
|
+
**消息气泡动画**:「动效」页的这一项管自己发出去的消息落到对话里时怎么出现,自己带一个开关,关闭时这一项交回宿主(下面那两张卡片同时变灰、不能操作);两档都不带文字,各带一张预览卡,卡里是一小段只有用户气泡的对话,下面那一条在两种说法之间轮流换(一条落定、另一条接着来,走完再从头)。「在原地长出来」让气泡在自己的位置上从零长到满(约 0.32 秒,末尾轻微过冲,放大起点是气泡自己的右下角),行高与旁边的东西全程不动;「从输入框飞上来」是原来那一下:输入框那张卡片被抬起来飞到消息那一行,真消息在飞行期间藏着,落到那一行时交接。「动画」设为「减弱」时两条消息都不动,气泡直接站在它该在的位置。这一项默认「从输入框飞上来」。
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
**卷帘门过渡**:点开或收起一行(工具卡片、思考行、命令卡片)以及过程组时,高度逐帧变化,下方内容被真的推开或收回;门只走读者看得见的那一段,内容再长也是同一速度,多张卡片的展开体整扇门一起走。它与展开体的入场淡入一起由「聊天区滚动动画」开关。
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
**输入框插入符动效**:输入框里的光标由插件自己绘制,移动时滑过去;提问卡片的作答框与排队消息的行内编辑框同样覆盖。设置页的「动效」页有开与关两档,各带一张预览卡,都不带文字:卡里逐字打出 `Hello World!`,光标跟着这行字往前走,打字期间一直亮着,打完停住才按原生节奏闪(真光标每移动一次就把闪的节奏从头开始,所以打字时看不到它灭)。两档的分别在于光标怎么到达下一个位置:「开」的那张滑过去,「关」的那张与宿主自己的光标一样直接跳过去。
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
**状态行动画**:「动效」页的这一项,管的是轮次进行中、对话末尾那一行文字上的动静,自己带一个开关,关闭时这一行交回宿主(它下面那两行——「精确状态行」与两张画法卡片——同时变灰、不能操作);开启后,紧跟着的「精确状态行」决定这一行说得多细:开着时写具体在做什么(正在操作的文件、命令声明的描述、推理里的原句,所以中文与英文会混着出现),关掉只写状态本身。再下面那两张画法卡片都不带文字,卡片里就是这一行自己的样子,一直在动:里面的字在两种说法之间来回换——旧的向上淡出、新的从下方升起,就是状态行换词的那套动作(「精确状态行」开着时改在三条样例之间一次一条地换:正在阅读README.md、Checking out current tree、正在思考)——画法则是默认的「扫光」:一道高光带贴着字形扫过,与宿主自己的行同一节奏;另一档「渐变流动」让文字本身流动着变色,七层径向色斑压在一条灰色渐变上,色斑绕着字框游走,同时整圈色相在转。点一张卡片立刻换过来;真实状态行的说法、换词与旁边的时间两档都一样;「动画」设为「减弱」时画法停住(扫光与渐变都不再走),说法照旧一轮一轮换,只是换成瞬间切换——不再演离开与升起那两半,预览卡与状态行在这一点上一致。
|
|
59
63
|
|
|
60
64
|
**对话统计信息位置**:会话的八个数字有两个去处。「收进上下文」(默认)把它们放进那个计量环的弹层,输入卡片下方只留圆环;「独立成行」把其中的轮数与步数、输出速度、读入的 tokens、写回的 tokens 与缓存命中率写在输入卡片下面单独一行,末尾就是那个计量环。这一行里的数字一有变化就逐个字符重新入场(每走一个步骤、流式输出期间都在动),缓存命中率与圆环按各自的无极色阶取色:命中率从九成的红走到 99% 的深绿,占用从四成的绿走到八成的红。窗口窄到这一行放不下时它会依次让位:先去缓存那截的字样,再去轮数与步数,再去圆环旁的数字(环留下),然后把读入与写回合成一个合计,最后把数字折叠成 k / M / B;窗口宽回来时按同一顺序退回。
|
|
61
65
|
|
package/docs/STYLE.md
CHANGED
|
@@ -204,7 +204,7 @@ and scrolls to its end.
|
|
|
204
204
|
11px, the permission and workspace segments' 7px, the view tabs' 5px, the
|
|
205
205
|
peak-rate and file pills' 999px.
|
|
206
206
|
- Borders: 1px warm hairline. The same host copies keep their own stroke: the
|
|
207
|
-
|
|
207
|
+
inline composer's 1.6px stop square.
|
|
208
208
|
- Spacing: 4 px rhythm.
|
|
209
209
|
- Bottom edge: the transcript never fades behind the composer by shadow. The
|
|
210
210
|
composer seat paints an opaque `var(--dsw-alias-bg-base)` bar across its own
|
|
@@ -238,13 +238,14 @@ edit; the build refuses a time or a curve written anywhere else.
|
|
|
238
238
|
slider).
|
|
239
239
|
- The swap, its gap and the roll of a figure's digits come from the transitions
|
|
240
240
|
this skin ports; `THIRD_PARTY_NOTICES.md` names each one.
|
|
241
|
-
- Loop periods are separate from durations: a sweep, a pulse, a blink, a
|
|
241
|
+
- Loop periods are separate from durations: a sweep, a pulse, a blink, a breath.
|
|
242
242
|
- Open: a menu growing out of its trigger, a dialog out of the centre, a
|
|
243
243
|
settings page sliding in — the transitions.dev surfaces, settling on their own
|
|
244
244
|
curve and closing on the exit duration.
|
|
245
245
|
- The presets these tokens feed live in `packages/client/src/shared/motion.css`:
|
|
246
246
|
a surface arriving or leaving, a menu growing out of its trigger, a plain
|
|
247
|
-
fade, one half of a wording swap, the placeholder
|
|
247
|
+
fade, one half of a wording swap, the pulse a placeholder and the sidebar's
|
|
248
|
+
ongoing light share, and the two paints
|
|
248
249
|
the waiting line's words can wear (a highlight band and a colour wash). A
|
|
249
250
|
feature that needs its own effect reads the tokens and keeps its own
|
|
250
251
|
keyframes.
|
|
@@ -258,11 +259,12 @@ edit the JSON, not the table.
|
|
|
258
259
|
| `--dsh-claude-duration-instant` | `80ms` | the composer caret following the insertion point |
|
|
259
260
|
| `--dsh-claude-duration-feedback` | `120ms` | a control answering hover, press or focus: its colour, background, border, shadow, or a small turn or slide of its own parts |
|
|
260
261
|
| `--dsh-claude-duration-reveal` | `120ms` | content entering the chat area: an opened row's body, and each streamed piece of the answer |
|
|
262
|
+
| `--dsh-claude-duration-enter` | `320ms` | one message the reader sends growing into its row, and the same growth on the Motion tab's card |
|
|
261
263
|
| `--dsh-claude-duration-surface` | `150ms` | a floating surface or a group of controls appearing: popover cards, menus, panels, the search dialog, a toast, a strip fading in |
|
|
262
264
|
| `--dsh-claude-duration-exit` | `120ms` | a surface leaving on the reader's dismissal: a menu or a dialog closing, the overtime badge leaving |
|
|
263
265
|
| `--dsh-claude-duration-open` | `250ms` | a surface growing out of its anchor: a menu out of its trigger, a full-window dialog out of the centre, a settings page sliding in, the overtime badge sliding onto its line |
|
|
264
266
|
| `--dsh-claude-duration-swap` | `150ms` | each half of a wording swap: the old words leaving, the new ones arriving |
|
|
265
|
-
| `--dsh-claude-duration-swap-gap` | `50ms` | the
|
|
267
|
+
| `--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 |
|
|
266
268
|
| `--dsh-claude-duration-roll` | `160ms` | a figure's characters rolling over to new digits |
|
|
267
269
|
| `--dsh-claude-duration-move` | `200ms` | something travelling along its own track: a fold's door, the reasoning slider's knob and fill |
|
|
268
270
|
| `--dsh-claude-duration-slide` | `240ms` | the segmented controls' sliding highlight (D20), a sidebar icon's quarter turn, and the wording box taking the width of the words arriving |
|
|
@@ -273,28 +275,37 @@ edit the JSON, not the table.
|
|
|
273
275
|
| `--dsh-claude-duration-pop` | `500ms` | something popping into place: a changed digit of the session numbers, the overtime badge's own pill |
|
|
274
276
|
| `--dsh-claude-duration-rise` | `500ms` | a line of the home greeting rising into place |
|
|
275
277
|
| `--dsh-claude-duration-stagger` | `70ms` | how far behind the piece before it a staggered piece starts: the last two popping digits, the greeting's second line |
|
|
278
|
+
| `--dsh-claude-period-dot-orbit` | `2400ms` | one turn of the waiting line's loader dots that swap corners: four quarter-turns of the two pairs, which leaves every dot where it started |
|
|
279
|
+
| `--dsh-claude-period-dot-rotate` | `10s` | how long one of the waiting line's loader motions stands before another takes its place, the next one picked so a motion never follows itself |
|
|
276
280
|
| `--dsh-claude-duration-reduced` | `0.01ms` | every skin animation and transition under the Reduced animation choice (D26) |
|
|
277
281
|
| `--dsh-claude-period-host-sweep` | `1500ms` | one pass of the highlight band across the waiting line's words and a running process group's header |
|
|
278
282
|
| `--dsh-claude-period-preview-swap` | `4000ms` | one turn of the settings page's waiting-line preview: one wording standing, leaving, and standing again |
|
|
283
|
+
| `--dsh-claude-period-preview-reveal` | `4000ms` | one turn of the settings page's new-text fade preview: the sample arriving character by character, then standing before the next wipe |
|
|
284
|
+
| `--dsh-claude-period-preview-caret` | `4000ms` | one turn of the settings page's caret preview: the sample line typed out, then standing whole before the next turn |
|
|
285
|
+
| `--dsh-claude-period-preview-enter` | `2600ms` | one turn of the Motion tab's message-entrance card: one message arriving, standing, and giving way to the next |
|
|
279
286
|
| `--dsh-claude-period-wash-hue` | `4000ms` | one turn of the hue rotation the waiting line's colour wash runs through |
|
|
280
287
|
| `--dsh-claude-period-wash-drift` | `5000ms` | one orbit of the colour washes around the waiting line's glyph box |
|
|
281
288
|
| `--dsh-claude-period-pulse` | `1600ms` | a placeholder breathing while its numbers are computed |
|
|
282
289
|
| `--dsh-claude-period-flash` | `1450ms` | one flash of the reasoning slider's top-rung matrix |
|
|
283
290
|
| `--dsh-claude-period-blink` | `1000ms` | one blink of the composer caret |
|
|
284
|
-
| `--dsh-claude-period-
|
|
291
|
+
| `--dsh-claude-period-breathe` | `2400ms` | one breath of the sidebar's ongoing-conversation light |
|
|
285
292
|
| `--dsh-claude-period-landed` | `1400ms` | the mark on the turn the conversation navigator landed on |
|
|
286
293
|
| `--dsh-claude-period-hold` | `840ms` | how long the reasoning window's text stands between two steps |
|
|
287
294
|
| `--dsh-claude-period-dot-bounce` | `500ms` | one bounce of the waiting line's loader dots under the Claude brand, and the period each dot's own start is measured against |
|
|
295
|
+
| `--dsh-claude-period-dot-line` | `1250ms` | one round trip of the waiting line's loader dots along their own lines, the motion the dots take while the turn is not thinking |
|
|
288
296
|
| `--dsh-claude-ease-standard` | `ease` | feedback and surfaces: the default curve |
|
|
289
297
|
| `--dsh-claude-ease-out` | `ease-out` | something arriving and settling: a fold's door, content entering the chat area, the landing mark |
|
|
298
|
+
| `--dsh-claude-ease-enter` | `cubic-bezier(0.34, 1.3, 0.64, 1)` | a message the reader sends growing into its row: the slight overshoot as it takes its full size |
|
|
290
299
|
| `--dsh-claude-ease-in-out` | `ease-in-out` | something that leaves and returns, or swaps in place: wording swaps, pulses, flashes |
|
|
291
300
|
| `--dsh-claude-ease-glide` | `cubic-bezier(0.22, 0.61, 0.36, 1)` | travel along a track: the sliding highlight, the reasoning slider, the search dialog's entrance, the reasoning window's step, the wording box's width |
|
|
292
301
|
| `--dsh-claude-ease-roll` | `cubic-bezier(0.4, 0, 0.2, 1)` | digits rolling over: the file rows' tail and the process group header's counts |
|
|
293
302
|
| `--dsh-claude-ease-spring` | `cubic-bezier(0.34, 1.45, 0.64, 1)` | a small overshoot as something lands: the session numbers' digits and the overtime badge popping in, a switch's knob bouncing past its end |
|
|
294
303
|
| `--dsh-claude-ease-settle` | `cubic-bezier(0.22, 1, 0.36, 1)` | a surface or a page settling into place out of its anchor: menus and dialogs opening and closing, a settings page sliding, the overtime badge sliding onto its line, the greeting's lines rising |
|
|
295
304
|
| `--dsh-claude-ease-host-sweep` | `steps(48, end)` | the band across the waiting line's words and a running process group's header |
|
|
305
|
+
| `--dsh-claude-ease-damped-out` | `cubic-bezier(0.33, 1, 0.68, 1)` | a loader dot slowing into the end of its line: the damping the line motion carries, so a dot dwells at its turning point before it comes back |
|
|
306
|
+
| `--dsh-claude-ease-damped-in` | `cubic-bezier(0.32, 0, 0.67, 0)` | a loader dot leaving the end of its line and gathering speed towards the middle |
|
|
296
307
|
| `--dsh-claude-distance-nudge` | `4px` | the short offset a surface rises from, and a small row's wording swap travels |
|
|
297
|
-
| `--dsh-claude-distance-travel` | `8px` | the waiting line's wording swap, the distance a popping digit comes from, a settings page's slide, the overtime badge's sideways slide |
|
|
308
|
+
| `--dsh-claude-distance-travel` | `8px` | the waiting line's wording swap, the distance a popping digit comes from, a settings page's slide, the overtime badge's sideways slide, and both directions of the waiting line's loader dots: the lift off their floor and the reach along their own lines |
|
|
298
309
|
| `--dsh-claude-distance-rise` | `12px` | how far below its place a line of the home greeting starts, and the overtime badge's upward slide |
|
|
299
310
|
| `--dsh-claude-blur-soft` | `2px` | the blur words, digits and badges pass through while they swap or pop in, and a placeholder passes through as it hands its place over |
|
|
300
311
|
| `--dsh-claude-blur-enter` | `3px` | the blur a settings page or a line of the home greeting passes through as it slides or rises in |
|
|
@@ -302,6 +313,7 @@ edit the JSON, not the table.
|
|
|
302
313
|
| `--dsh-claude-scale-dropdown` | `0.97` | the scale a menu grows from out of its trigger |
|
|
303
314
|
| `--dsh-claude-scale-dropdown-exit` | `0.99` | the scale a menu shrinks to while it fades on closing |
|
|
304
315
|
| `--dsh-claude-scale-dialog` | `0.96` | the scale a full-window dialog grows from and returns to |
|
|
316
|
+
| `--dsh-claude-scale-dot-mid` | `0.55` | how small a loader dot is while it crosses the middle of its line; at either end it is the dot's own size, so the line motion never draws a dot larger than the bouncing one |
|
|
305
317
|
| `--dsh-claude-timing-feedback` | `var(--dsh-claude-duration-feedback) var(--dsh-claude-ease-standard)` | shorthand: a control's state change, written after the property in a transition |
|
|
306
318
|
| `--dsh-claude-timing-surface` | `var(--dsh-claude-duration-surface) var(--dsh-claude-ease-standard)` | shorthand: a surface appearing, written after the property or the keyframes' name |
|
|
307
319
|
<!-- /generated:motion -->
|
|
@@ -599,10 +611,23 @@ transition, since the press hands the whole page to the other side.
|
|
|
599
611
|
The host's running row, its divider and its live region stay as the host draws
|
|
600
612
|
them. Its whale tail is DeepSeek's own character, so under the Claude brand the
|
|
601
613
|
skin hides it and leads the line with its own loader: three 4px dots of the
|
|
602
|
-
accent in force in an 18 × 14 box, resting on the floor,
|
|
603
|
-
|
|
604
|
-
the
|
|
605
|
-
|
|
614
|
+
accent in force in an 18 × 14 box, resting on the floor, and the motion they
|
|
615
|
+
play follows what the turn is doing (`features/chat-wait/wait-loader.ts`). While
|
|
616
|
+
the model thinks they bounce — each rising the skin's 8px and flattening against
|
|
617
|
+
the floor as it leaves, half a second a bounce with the second dot starting two
|
|
618
|
+
fifths of the period behind the first and the third three fifths. While the turn
|
|
619
|
+
writes or works they leave that bounce and walk three lines through one point,
|
|
620
|
+
120° apart with the second line run the other way: each dot is a damped simple
|
|
621
|
+
harmonic along its own line, the whole line taken in 1.25s, dwelling at either
|
|
622
|
+
end at the dot's own size and shrinking to 0.55 as it crosses the middle, so no
|
|
623
|
+
frame of the line motion draws a dot larger than the bouncing one. The two never
|
|
624
|
+
cut: the lane leaving fades each of its dots out over one of its own legs,
|
|
625
|
+
starting where that motion next turns back — off the floor for a bounce, off a
|
|
626
|
+
far end for a walk — and the lane arriving fades each of its dots in over one of
|
|
627
|
+
its own legs, starting where that motion next carries it, so no dot is ever moved
|
|
628
|
+
to a pose its motion does not carry; a motion stands for 2s before the next may
|
|
629
|
+
take it over. Under the
|
|
630
|
+
other brands the host's whale stands. The host's own
|
|
606
631
|
shimmering words step aside for the skin's line beside it: the wording in the
|
|
607
632
|
secondary label at 14px on a 24px line,
|
|
608
633
|
the turn's clock 8px later in the caption at 13px with tabular figures, and the
|
|
@@ -614,10 +639,10 @@ resting the last third of it, in the host's shimmer tint — or a colour wash, t
|
|
|
614
639
|
seven radial washes of `packages/client/src/shared/motion.css` over a grey ramp,
|
|
615
640
|
orbiting the glyph box (5s an orbit while the hue turns a full circle over 4s),
|
|
616
641
|
which is the effect transitions.dev ships as its Pro gradient text. A wording that
|
|
617
|
-
changes runs the
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
642
|
+
changes runs both halves of the swap at once and is over in 0.2s: the old one
|
|
643
|
+
leaves upward with a 2px blur while the new one, parked one gap, enters from 4px
|
|
644
|
+
below; under Reduced motion the band is left out, the wash holds its still frame,
|
|
645
|
+
and the wording is written at once. The Motion tab's preview cards
|
|
621
646
|
wear these same two paints (`packages/client/src/features/settings/settings.css`)
|
|
622
647
|
and take turns between a state word and the host's own word for a wait, so a card
|
|
623
648
|
shows the wording swap as well as the paint.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|