dsh-claude-style 0.10.4 → 0.10.6
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 +118 -4
- package/LICENSE +9 -0
- package/README.en.md +35 -1
- package/README.md +34 -0
- package/docs/STYLE.md +110 -35
- package/docs/architecture.md +71 -21
- package/host/harness-home.js +21 -0
- package/host/hdsl.js +3 -14
- package/host/index.js +5 -12
- package/host/routes.js +234 -313
- package/host/settings.js +69 -156
- package/host/usage.js +39 -68
- package/lib/client.js +19437 -12294
- package/lib/model-descriptions.json +189 -25
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,120 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
4
4
|
|
|
5
|
+
## [0.10.6] - 2026-10-05
|
|
6
|
+
|
|
7
|
+
[中文](#cn-0.10.6) | [English](#en-0.10.6)
|
|
8
|
+
|
|
9
|
+
<h3 id="cn-0.10.6">新增功能</h3>
|
|
10
|
+
|
|
11
|
+
- **聊天气泡动效**:提交消息的那一下,输入卡片原样浮起一份,一边飞一边把多余的收掉——工具栏左右两组贴着最近的角缩小、淡出,描边与阴影跟着形状收回,草稿里的字跟着变窄的形状一行一行重新排——落地时正好就是那条真实气泡;真实气泡在飞行期间藏着,落定后原位出现。设置页的「动画效果」选了「减弱」、两端不在同一屏、或起点读不到(快捷键与程序化提交)时都不飞;页面切到后台时另有定时器兜底,藏起来的消息一定会放出来。与对话区其他动画一起合并在设置页「对话」页的「聊天区动画效果」开关里,默认开启。
|
|
12
|
+
- **文件变更行**:从 run_code 程序里派发出去的写入与编辑按直接调用的样子显示——行尾带 `+n -m`,展开是改动卡片,路径可点开文件;失败与中断的行保留裁决信息、不再给路径链接,状态另有给读屏的说明。改动内容无法从参数推出的调用保留系统的输入 / 输出卡片。与对话区其他动画一起合并在设置页「对话」页的「聊天区动画效果」开关里,默认开启。
|
|
13
|
+
- **新到的文字先淡后实**:流式回答里新出现的字符从两成不透明度开始,约 0.12 秒内坐实到它自己的颜色,并按到达次序略作错开,读起来像文字正被写下。整段一次到达的内容(切会话、翻历史)、一次几千字的突发、以及刚被折叠重排过的文字都保持本色;主线程忙不过来时它自己让路,闲下来再继续。与对话区其他动画一起合并在设置页「对话」页的「聊天区动画效果」开关里,默认开启。
|
|
14
|
+
- **折叠不再瞬间切换,展开体像卷帘门一样拉下来**:读者点开或收起一行(工具卡片、思考行、命令卡片)或一个过程组时,高度逐帧变化,下方内容被真的推开或收回。门只走读者看得见的那一段,两千像素的展开体和两万像素的展开体在眼前的速度一样;展开体里是多张卡片时(代码卡片加输出卡片)整扇门一起走,不会先挤没能缩的那一张。主线程卡住时门停一下再接着走,不会跳变;读者自己滚动离开底部之后,收尾不会把他拽回去。它与其他对话区动画一起挂在「聊天区动画效果」这个开关上(默认开启),关掉后读者点开收起恢复系统原来的瞬开瞬收。
|
|
15
|
+
- **思考行与过程组自动开合**:模型还在思考时思考行自动开着,思考停下就收回去;运行中的过程组自动展开,这一段过程结束再收起,组体展开时组头的标签仍带实时细节的流光。读者自己按过的行或组,在当时的阶段里不再被改动;「详细」与「完全展开」两档不收纳组体,插件不碰它们。与对话区其他动画一起合并在设置页「对话」页的「聊天区动画效果」开关里,默认开启。
|
|
16
|
+
- **输入框插入符动效**:输入框里的光标改由插件自己绘制,移动时带一段位移过渡;提问卡片的作答框与排队消息的行内编辑框同样覆盖。设置页的「对话」页新增三档:每一格(默认,连打字也滑)、只在移动时(方向键与点击才滑,打字瞬时)、关闭(完全不动手,用浏览器自己的光标)。任何一次测量失败都会把原生光标还回来,不会出现光标看不见的情况。
|
|
17
|
+
- **聊天区跟随交给系统自己的跟随,封顶的工作过程不再掉队**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者现在被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部,最新两行不再长期悬在下方。补到底部是按曲线走完的:零散到达的字收得住尾巴,一次涌进上百个 token 那样的厚块则以一段恒定速度滑过去,再落到末尾——流式输出时新加的一行把上文顶起来是平滑的,不再几十像素一下地跳。流式输出期间主滚动条的跟随也交给同一条曲线:系统原来是把末尾一帧写到位,现在这段位移由插件接管并滑过去;输出很快时最新几行会短暂拖在屏幕下缘之外,流一停就滑到位。读者自己发出的消息不受这条曲线影响:宿主把新消息滚进视野的那一下照旧一步到位,插件在消息到达前后短暂让开。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。与对话区其他动画一起合并在设置页「对话」页的「聊天区动画效果」开关里,默认开启。
|
|
18
|
+
- **与 dsh-chat-ux 共存**:本机同时装着 [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux) 时,上面这几项整体让位——那个插件实现了同一批交互,两套同时生效会互相拦点击、抢同一批按钮、往宿主同一个座位键位按同一优先级注册。设置页的「对话」页把「聊天区动画效果」与「输入框插入符动效」两行的控件禁用,控件本身仍显示你自己设的值,下面另起一行用强调色写明「该选项由 dsh-chat-ux 管理」;你的设置不会被改写,那个插件中途装卸也照常跟随。它不在时这些交互按本插件自己的开关运行。
|
|
19
|
+
|
|
20
|
+
### 体验优化
|
|
21
|
+
|
|
22
|
+
- **权限菜单在窗口上方放不下时改为在控件下方展开**:权限分段控件的卡片固定朝上展开,窗口很矮时它的上缘顶出屏幕外,最上面几项点不到。现在上方容不下整张卡片时,它在控件下方展开。
|
|
23
|
+
- **上述动效跟随「动画效果」设置**:卷帘门过渡、聊天气泡动效、新文字淡入、插入符的滑动与闪烁、组头的流光此前只认系统的「减少动态效果」:设置页选「减弱」关不掉它们,选「总是」在系统开着减弱时也照样不动。现在它们读的是设置页解析出的那一档。
|
|
24
|
+
|
|
25
|
+
### 问题修复
|
|
26
|
+
|
|
27
|
+
- **「更多模型」的二级弹层在指针离开后收拢**:指针从「更多模型」挪到一级列表的模型行上之后,二级弹层在宽限期结束后收起,一级弹层保持不动。修复前只要指针还在一级弹层里它就永远挂着,遮住一级列表。
|
|
28
|
+
- **模型选择器打开二级弹层的瞬间即定位**:此前打开动作先定位后标记打开,而定位只认已标记打开的卡片,于是二级弹层沿用上一次的位置(连同上一次的窗口宽度算出的坐标),要等下一次指针事件才可能被纠正。现在先标记打开再定位,每次打开都落在当前位置。
|
|
29
|
+
- **插入符拆除后在途的那一帧不再落笔**:瞬落一帧之后恢复过渡属性的那次补写走的是一处未登记的帧,插件拆除时取消不到它,时机凑巧时它会在拆除之后对已收回的图层写入一次。现在这帧与队列帧一样登记在案,拆除时一并取消,回调也不再越过拆除线。
|
|
30
|
+
- **「文件变更行」的开关此前不起作用**:关掉它之后,run_code 程序里派发出去的写入与编辑仍然按新的样式显示。现在关掉即交还系统原来的行,打开即时接管,不需要刷新页面。
|
|
31
|
+
- **拖入附件后,输入区工具栏打开的面板不再被附件区域遮住**:附件存在时,从输入区工具栏按钮打开的面板(模型选择、思考强度等)中间被上方那块附件区域盖住一大截,只在卡片上方和输入框下方各露出一条边,面板里的行点不到。现在这类面板完整显示。
|
|
32
|
+
- **侧栏账号区因故障停用后,设置快捷键不再失灵**:插件的侧栏账号区出错退役后,按 Ctrl+,(macOS 为 ⌘,,网页版宿主为 Ctrl+Alt+,)什么都不打开。现在按键交还宿主,宿主自己的设置快捷键照常打开设置。
|
|
33
|
+
|
|
34
|
+
### 其他变更
|
|
35
|
+
|
|
36
|
+
- **昵称与封号页语言只存在设置里**:早先在宿主半边不认这两个字段时存进浏览器本地的值,会在打开页面后写进插件设置,本地那份随后删除;此后两项与其他设置一样只保存在宿主的设置表单里。
|
|
37
|
+
|
|
38
|
+
<h3 id="en-0.10.6">New Features</h3>
|
|
39
|
+
|
|
40
|
+
- **Send flight**: on submission the composer card lifts as it is and sheds what is extra on the way — the toolbar's two groups shrink and fade into their nearest corners, the hairline and shadow shrink with the shape, the words in the draft re-flow into the narrowing shape a line at a time — landing exactly on the real bubble, which hides while the flight is up and reappears in place when it lands. Nothing flies when the animation choice is Reduced, when the two ends are not on one screen, or when the origin cannot be read (a shortcut or a programmatic submission); a timer releases a hidden message if the page is in the background. It rides the Chat-area animations switch on the settings page's Conversation tab, on by default.
|
|
41
|
+
- **File change rows**: a write or edit dispatched from inside a run_code program is shown like a directly called one — the row carries the `+n -m` tail, expands into the diff card and its path opens the file; a failed or interrupted row keeps its verdict, drops the path link and announces its state to a screen reader. A call whose changed text cannot be derived from its arguments keeps the host's IN/OUT card. It rides the Chat-area animations switch on the settings page's Conversation tab, on by default.
|
|
42
|
+
- **New text fades in**: characters arriving in a streaming answer start at a fifth opacity and settle to their own colour in about 0.12 s, staggered slightly by arrival order, so the text reads as being written. A block arriving whole (a session switch, a page of history), a burst of thousands of characters and text that just reflowed from a fold all stay solid; when the main thread is too busy the fade gives way and resumes once it is free. It rides the Chat-area animations switch on the settings page's Conversation tab, on by default.
|
|
43
|
+
- **Folds no longer snap: a body rolls down like a door**: opening or closing a row (a tool card, a thinking row, a command card) or a process group now 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 a two-thousand-pixel body and a twenty-thousand-pixel one move at the same speed in front of him; a body holding several cards (a code card plus an output card) rolls as one door rather than squeezing away the card that can shrink. A stalled main thread does not make it jump — the door pauses and carries on — and a reader who scrolled away from the bottom is not pulled back when the fold settles. It rides the Chat-area animations switch together with the entrance fade of an expanded body (on by default); with that switch off, a reader's own press snaps open and shut the way the host does it.
|
|
44
|
+
- **Thinking rows and process groups open and close by themselves**: 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, its header keeping the live-detail sweep while the body is open. A row or group the reader pressed himself keeps what he chose for that phase, and the Detailed and Fully expanded tiers — which do not cap a body — are never touched. It rides the Chat-area animations switch on the settings page's Conversation tab, on by default.
|
|
45
|
+
- **Composer caret motion**: the composer's text caret is drawn by the plugin and glides between positions; a question card's answer box and a queued message's inline editor are covered as well. The Conversation tab gains a three-way choice — Every move (the default, typing included), Explicit moves (an arrow key or a click glides, a keystroke lands instantly) and Off. A measurement that fails hands the native caret back, so a caret is never lost.
|
|
46
|
+
- **The chat area's scroll goes back to the host's own follow, and a capped piece of work no longer lags behind**: at the structural moments — a thinking row folding, a tool call row arriving — a reader sitting at the bottom is now 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, so the last two lines no longer hang below the fold. Catching up runs on a curve: a trickle of characters settles softly, and a thick burst — a hundred-odd tokens arriving at once — glides at one steady speed before landing, so while text streams a new line pushes the text above it up smoothly instead of in forty-pixel steps. While content streams, the main scroller's follow runs along the same curve: where the host wrote its end in one frame, that displacement is now taken over and walked, so with a fast stream the newest lines trail just below the fold and slide into place once it stops. A message the reader sends is not affected by that curve: the host's scroll to bring it into view lands at once, and the plugin stands down around the arrival. Once the reader scrolls away from the bottom himself, the plugin stays out of it until he returns. It rides the Chat-area animations switch on the settings page's Conversation tab, on by default.
|
|
47
|
+
- **Coexisting with dsh-chat-ux**: with [dsh-chat-ux](https://github.com/alm-allen/dsh-chat-ux) installed on the same machine these effects stand down whole — that plugin implements the same interactions, and two copies intercept each other's clicks, press the same controls and register the same seat key at the same priority. The settings page's Conversation tab disables the Chat-area animations and Composer caret motion rows while each one goes on showing the value you set, with a line underneath in the accent colour reading "Managed by dsh-chat-ux"; your settings are not rewritten, and the hand-over follows that plugin being loaded or removed mid-session. With it gone they run on this plugin's own switches as usual.
|
|
48
|
+
|
|
49
|
+
### Improvements
|
|
50
|
+
|
|
51
|
+
- **The permission menu opens below the control when it does not fit above**: the permission control's card always unfolded upward, so in a short window its top edge ran off-screen and the first rows could not be clicked. It now opens below the control when the card does not fit above.
|
|
52
|
+
- **Those animations follow the Animation setting**: the rolling door, the send flight, the token fade, the caret's glide and blink and the header's live-detail sweep used to read the system's reduced-motion query alone, so Reduced on the settings page did not stop them and Always did nothing while the system asked for reduced motion. They now read the resolved choice.
|
|
53
|
+
|
|
54
|
+
### Bug Fixes
|
|
55
|
+
|
|
56
|
+
- **The More-models card folds once the pointer leaves**: moving the pointer from the More-models cell onto a model row of the first level now folds the second level after the grace, the first level staying put. Before, it hung open as long as the pointer stayed anywhere in the first level, covering its list.
|
|
57
|
+
- **The model picker places its second level at the moment it opens**: the open path used to place the card before marking it open, and the placement only reads cards marked open — so the card kept its previous position (with coordinates computed for the previous window width) until some later pointer event corrected it. It is marked open first and placed after, so every open lands on the current position.
|
|
58
|
+
- **The caret's teardown no longer leaves a frame that still draws**: the one-off frame that hands the transition back after an instant landing was untracked, so the teardown could not cancel it and, given the right timing, it fired after the teardown and wrote into a layer that had already been released. It is tracked like the queue's frame now — cancelled with the rest, and its callback stands down past the teardown.
|
|
59
|
+
- **The File change rows switch did nothing**: with it off, a write or edit dispatched from inside a run_code program still drew the new row. Off now hands the host's own row back and on takes it over, without a reload.
|
|
60
|
+
- **A panel opened from the composer's toolbar is no longer covered by the attachment area**: with an attachment in the composer, a panel opened from a toolbar button — the model picker, the reasoning-effort slider — lost its middle to the attachment area above it and showed only a strip above the card and another below the input box, so none of its rows could be clicked. Such panels now draw in full.
|
|
61
|
+
- **The settings shortcut keeps working after the sidebar account area is switched off by a fault**: once the plugin's sidebar account area failed and retired, Ctrl+, (⌘, on macOS, Ctrl+Alt+, in the web host) opened nothing. The keys now go back to the host, and the host's own settings shortcut opens the settings as usual.
|
|
62
|
+
|
|
63
|
+
### Chores
|
|
64
|
+
|
|
65
|
+
- **The nickname and the account-hold page's language live in the settings alone**: a value kept in the browser's local storage while the host half did not know these fields yet is written into the plugin settings when the page opens, and the local copy is removed afterwards; from then on both are saved in the host's settings form like every other setting.
|
|
66
|
+
|
|
67
|
+
**Full Changelog**: [v0.10.5...v0.10.6](https://github.com/Nwflower/dsh-claude-style/compare/v0.10.5...v0.10.6)
|
|
68
|
+
|
|
69
|
+
## [0.10.5] - 2026-10-04
|
|
70
|
+
|
|
71
|
+
[中文](#cn-0.10.5) | [English](#en-0.10.5)
|
|
72
|
+
|
|
73
|
+
<h3 id="cn-0.10.5">新增功能</h3>
|
|
74
|
+
|
|
75
|
+
- **配色与字体可以交给宿主,与壁纸等主题插件一起使用**:插件以前总是改写宿主的颜色与字体,并在侧栏、对话区刷上实色底,和 dsh-wallpaper-engine 这类同样改写宿主颜色的主题插件同时启用时,壁纸被盖住,谁的颜色生效还取决于加载先后。设置页新增「配色」与「字体」两项,各有「Claude」与「跟随宿主」两档,默认仍是 Claude。选「跟随宿主」后,插件不再改写宿主的颜色或字体,也不再给侧栏、对话区刷底色,只保留布局和控件;插件自己画的弹层、卡片与选择器改用宿主的颜色,同时启用壁纸插件时随它的玻璃效果变成半透明,弹层还会模糊背后的画面以保证文字清楚。选 Claude 时外观与以前完全一致。
|
|
76
|
+
- **接管宿主界面的功能都能单独关闭**:权限分段控件、侧栏搜索、进行中 / 已归档视图、轮次状态行与对话 / 轨迹标签条以前没有开关,不想要其中一项就只能停用整个插件。现在每一项都有自己的开关,关闭后宿主原来的界面立刻回来,再打开立刻生效,都不需要刷新页面。
|
|
77
|
+
- **设置页分为五个分页**:设置项以前排成一整列。现在顶部的分页条把它们分进「通用」「外观」「输入区」「侧栏」「对话」五页;「快捷供应商」紧跟在「重绘模型选择器」下面、两项之间不画分隔线,模型选择器关闭时变灰不可操作,「出现位置」在吉祥物关闭时同样变灰。
|
|
78
|
+
- **吉祥物可以单独选择,像素螃蟹也随智能体的工作换动画**:吉祥物以前由品牌决定,螃蟹只站在工作台首页,只会偶尔掏出电脑敲一阵代码。现在设置页的「吉祥物」可选「跟随品牌」(默认,Claude 品牌下是螃蟹、DeepSeek 品牌下是 Deepy)、「螃蟹」「Deepy」或「关闭」,「出现位置」可选只在首页,或首页与对话页都出现(默认)。螃蟹和 Deepy 一样站在两种首页版面与对话页的输入区上沿,随工作状态换动画:思考时头顶冒出思考泡泡,写回答与调用工具时敲电脑,三个会话同时工作时戴上安全帽,子代理运行时戴耳机或挥手指挥,等你操作时头顶亮起感叹号,压缩上下文时被压扁,完成时蹦跳,失败时双眼打叉、发抖,闲置一分钟后睡着,有动作时惊醒;闲着时偶尔东张西望、挥挥钳子,或者掏出电脑敲一阵代码。点它的左半边或右半边会被戳得往一侧躲,连点四下会被挠痒,按住拖动会被拎起来。螃蟹的帧图随插件内联,约 20 KB。
|
|
79
|
+
|
|
80
|
+
### 体验优化
|
|
81
|
+
|
|
82
|
+
- **设置项说明改为只说行为**:设置页十项的说明以前夹带设计缘由(进度圈为什么不停、彩蛋页为什么不跟随界面语言),动辄两三行。现在每条说明只说这一项改什么、各档分别是什么效果;「修改品牌标识」「重绘设置弹层」等动宾式或与其他条目不一致的标题一并统一为名词短语。
|
|
83
|
+
- **Windows 桌面端的顶栏不再是一条单独的色带**:顶栏以前刷着侧栏的颜色,横贯整个窗口,右上角最小化、最大化、关闭三个按钮还托在一块同色的矩形上,打开设置时周围都被遮罩盖暗,只有这块矩形不变。现在顶栏透明,侧栏和主界面各自通到窗口顶端,两者之间的分隔线从顶到底连成一条,主界面左上角的圆角去掉;三个按钮直接落在页面上,打开设置时随页面一起变暗,悬停高亮照常。macOS 与 Web 端不变。
|
|
84
|
+
|
|
85
|
+
### 问题修复
|
|
86
|
+
|
|
87
|
+
- **小鲸鱼不再把阴影画在目标、待办与排队卡片上**:DeepSeek 品牌下,小鲸鱼被叠在输入卡片上方的目标、待办与排队卡片顶起时,它身下阴影的末端落在那张卡片的最上缘。现在小鲸鱼抬高 3 像素,阴影落在卡片上,卡片上不再压着一道暗色。
|
|
88
|
+
- **侧栏搜索框与它下面的按钮等高、间距一致,桌面端也不再被顶栏盖住**:搜索框以前比「新会话」「插件」这些行高出 4 像素,与它们相隔也只有 4 像素,排在这一列里比其余各行都松。现在搜索框与各按钮同为 28 像素高,与「新会话」的间隔为 6 像素,与各按钮之间的间隔相同;Windows 桌面端那一行为此少抬高 4 像素,搜索框整块落在顶栏下方,不再被截去上缘。
|
|
89
|
+
- **模型选择器右端不再被上下文计量环压住**:在「轨迹」或「上下文」标签页停留后切换对话,模型选择器最右端的档位文字会落在计量环上,并一直保持到上下文数字再次变化;现在回到对话页就恢复两者的间距。
|
|
90
|
+
|
|
91
|
+
### 其他变更
|
|
92
|
+
|
|
93
|
+
- **设置的保存字段新增九项**:插件的设置表单新增 `palette`、`typeface`、`mascot`、`mascotScope`、`permissionsControl`、`workspaceView`、`sidebarSearch`、`turnStatus`、`viewTabs`。宿主半边是旧版本时(更新插件后没有重启宿主),这几项改动保存不下来,重启宿主后恢复正常。
|
|
94
|
+
|
|
95
|
+
<h3 id="en-0.10.5">New Features</h3>
|
|
96
|
+
|
|
97
|
+
- **Colours and typefaces can be left to the host, so the skin works alongside wallpaper and other theme plugins**: the plugin always rewrote the host's colours and fonts and painted solid canvases under the sidebar and the conversation, so next to a theme plugin that rewrites the same colours, such as dsh-wallpaper-engine, the wallpaper was covered and whose colours won depended on load order. The settings page adds Colours and Typefaces, each with Claude and Follow the host; Claude stays the default. Under Follow the host the plugin rewrites neither the host's colours nor its fonts and paints no canvas under the sidebar or the conversation, keeping only its layout and controls; its own popovers, cards and pickers take the host's colours, turn translucent with a wallpaper plugin's glass, and blur what lies behind them so their text stays readable. Under Claude the look is exactly as before.
|
|
98
|
+
- **Every feature that takes over the host's interface can be switched off on its own**: the permission control, the sidebar search, the In progress / Archived view, the turn status line and the Chat / Trajectory tabs had no switch, so dropping one meant disabling the whole plugin. Each now has its own switch; off brings the host's original back at once, on brings the feature back at once, with no reload either way.
|
|
99
|
+
- **The settings page is split into five tabs**: the settings used to run down one column. A tab strip at the top now sorts them into General, Appearance, Composer, Sidebar and Conversation; Quick providers sits right under Redraw the model picker with no divider between the two, and greys out while the picker is off, as Where it appears does while the mascot is off.
|
|
100
|
+
- **The mascot is chosen on its own, and the pixel crab follows the agent's work too**: the brand used to decide the mascot, and the crab stood on the Studio home page alone, now and then pulling out its laptop to type. The settings page's Mascot now offers Follow the brand (the default: the crab under Claude, Deepy under DeepSeek), Crab, Deepy or Off, and Where it appears offers the home page alone or the home page and conversations (the default). Like Deepy, the crab stands on the composer of both home layouts and of the conversation, and changes its animation with the work: a thought bubble while the model thinks, typing on its laptop while it writes and calls tools, a hard hat with three sessions at work, headphones or conducting while subagents run, an exclamation mark while it waits on you, squashed while the context is compacted, hopping when a turn finishes, crossed eyes and a shake when something fails, asleep after a quiet minute and startled awake at the next move; between jobs it now and then looks around, waves a claw, or pulls out its laptop to type for a while. A click on its left or right half pokes it aside, four quick clicks tickle it, and pressing it and pulling lifts it. The crab's sheets ride the bundle, about 20 KB.
|
|
101
|
+
|
|
102
|
+
### Improvements
|
|
103
|
+
|
|
104
|
+
- **Settings descriptions now state behavior only**: the ten settings rows used to mix design rationale into their descriptions (why the progress ring never stops, why the easter egg ignores the interface language) and ran two to three lines each. Every description now says only what the setting changes and what each option does; verb-form or inconsistent titles such as the brand and sidebar-footer rows are unified to noun phrases.
|
|
105
|
+
- **The Windows titlebar is no longer a band of its own**: the caption row was painted in the sidebar colour across the whole window, and the minimize, maximize and close buttons sat on a block of that colour, which stayed bright while the settings mask darkened everything around it. The row is transparent now: the sidebar and the main area each run to the top of the window, the divider between them runs top to bottom in one line, and the main area loses its rounded top-left corner; the three buttons sit on the page itself, dim with it under the settings mask, and keep their hover highlight. macOS and the web build are unchanged.
|
|
106
|
+
|
|
107
|
+
### Bug Fixes
|
|
108
|
+
|
|
109
|
+
- **Deepy no longer paints its shadow across the goal, todo and queue cards**: under the DeepSeek brand, when the goal, todo or queue cards pushed the whale up off the composer card, the tail of the shadow under it landed on the top edge of that card. The whale now sits 3px higher: the shadow rests on the card instead of a dark band being stamped across it.
|
|
110
|
+
- **The sidebar search box matches the height and the rhythm of the rows under it, and no longer hides under the desktop titlebar**: the box stood 4px taller than New session, Plugins and the rows below them, and sat 4px from New session, which left the top of the list looser than the rest of it. The box is 28px like those rows now, 6px above New session, the same step the rows take among themselves; on the Windows Desktop that row rises 4px less, which keeps the whole box below the titlebar instead of cutting its top edge.
|
|
111
|
+
- **The right end of the model trigger no longer sits under the context meter**: after a spell on the Trajectory or Context tab, switching conversations brought the right end of the model trigger under the occupancy ring, and it stayed there until the reading moved again; coming back to the conversation now restores the clearance between the two.
|
|
112
|
+
|
|
113
|
+
### Chores
|
|
114
|
+
|
|
115
|
+
- **Nine new stored settings**: the plugin's settings form gains `palette`, `typeface`, `mascot`, `mascotScope`, `permissionsControl`, `workspaceView`, `sidebarSearch`, `turnStatus` and `viewTabs`. With an older host half still running (the plugin updated without restarting the host), changes to these do not save until the host restarts.
|
|
116
|
+
|
|
117
|
+
**Full Changelog**: [v0.10.4...v0.10.5](https://github.com/Nwflower/dsh-claude-style/compare/v0.10.4...v0.10.5)
|
|
118
|
+
|
|
5
119
|
## [0.10.4] - 2026-10-03
|
|
6
120
|
|
|
7
121
|
[中文](#cn-0.10.4) | [English](#en-0.10.4)
|
|
@@ -199,7 +313,7 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
199
313
|
|
|
200
314
|
### 体验优化
|
|
201
315
|
|
|
202
|
-
- **像素螃蟹改用 Claude Code 的原版动画**:工作台首页输入卡片上的螃蟹原来是按 Claude Code 的样子手绘的十一个姿势;现在换成 Claude Code
|
|
316
|
+
- **像素螃蟹改用 Claude Code 的原版动画**:工作台首页输入卡片上的螃蟹原来是按 Claude Code 的样子手绘的十一个姿势;现在换成 Claude Code 自己的敲代码动画,逐帧照搬(43 帧、每帧 80 毫秒,约 3.4 秒):眨眼、掏出笔记本电脑放到卡片边沿、跳一下侧过身敲一阵键盘、收起电脑转回正面,像素边缘清晰。电脑仍用随主题变化的灰色,触发方式(点击、指针移开、闲置时隔二三十秒自己来一次,减少动态效果时只认点击)不变。
|
|
203
317
|
- **对话中输入框的发送键改成 Claude Code 的回车图标**:原来是等宽字体里的「↵」字符,有内容时变成陶土橙;现在是按 Claude Code 画的回车箭头(上沿一小段、沿右侧向下、再沿底边向左到箭头),线条清晰,输入框有内容时用正文墨色,空着时仍是浅灰。
|
|
204
318
|
- **桌面端侧栏的品牌行上移 10px**:桌面端的侧栏从 40px 高的标题栏下方开始,品牌标志因此比 Web 端低出一截;现在品牌行(连同其下的新会话、插件与会话列表)上移 10px,悬停时换上的搜索框仍整个露在标题栏下方,与标题栏里的收起按钮也不重叠。Web 端不变。
|
|
205
319
|
- **用量面板的倍数趣味行从二十九本书扩到六十五本**:书单补入《黄色壁纸》《变形记》《化身博士》《野性的呼唤》《时间机器》《绿野仙踪》《黑暗之心》《浮士德》《螺丝在拧紧》《伊索寓言》《彼得·潘》《君主论》《隐形人》《安徒生童话》《世界大战》《善恶的彼岸》《白牙》《沉思录》《格林童话》《格列佛游记》《瓦尔登湖》《鲁滨逊漂流记》《神曲》《包法利夫人》《查拉图斯特拉如是说》《奥德赛》《双城记》《远大前程》《理想国》《罪与罚》《利维坦》《安娜·卡列尼娜》《卡拉马佐夫兄弟》《堂吉诃德》《基督山伯爵》《悲惨世界》,长度都是全文以 o200k_base 分词器实测的值(英文原著或通行英译本,《浮士德》为德文原文)。书单仍从《道德经》排到《追忆似水年华》,用量越过的书更密,趣味行落到的那本书离实际用量更近。
|
|
@@ -216,7 +330,7 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
216
330
|
|
|
217
331
|
### Improvements
|
|
218
332
|
|
|
219
|
-
- **The pixel crab plays Claude Code's own animation**: the crab on the Studio home page's composer card used to be eleven hand-drawn poses after Claude Code's; it now plays Claude Code's own
|
|
333
|
+
- **The pixel crab plays Claude Code's own animation**: the crab on the Studio home page's composer card used to be eleven hand-drawn poses after Claude Code's; it now plays Claude Code's own laptop animation frame for frame (43 frames of 80 ms, about 3.4 s) — a blink, a laptop pulled out onto the card's edge, a hop into a side-on stance to type away, the laptop put away as it turns back — with crisp pixel edges. The laptop keeps its theme-following grey, and what sets it off (a click, the pointer leaving it, on its own every half minute or so, only a click under reduced motion) is unchanged.
|
|
220
334
|
- **The in-conversation composer's send button uses Claude Code's return glyph**: it used to be the "↵" character from the monospace font, turning clay once there was text; it is now Claude Code's drawn return arrow (a short stub along the top, down the right side, back along the bottom to the arrowhead) in crisp strokes, in the body ink once the box holds text and still pale grey while it is empty.
|
|
221
335
|
- **The desktop sidebar's brand row sits 10px higher**: the desktop sidebar starts below the 40px titlebar, which left the brand mark lower than on the web; the brand row (and the New session, Plugins and session list below it) now rises 10px, with the search box that takes its place on hover still wholly below the titlebar and clear of the collapse button there. The web build is unchanged.
|
|
222
336
|
- **The usage panel's yardstick line grows from twenty-nine to sixty-five books**: the list adds The Yellow Wallpaper, Metamorphosis, The Strange Case of Dr Jekyll and Mr Hyde, The Call of the Wild, The Time Machine, The Wonderful Wizard of Oz, Heart of Darkness, Faust, The Turn of the Screw, Aesop's Fables, Peter Pan, The Prince, The Invisible Man, Andersen's Fairy Tales, The War of the Worlds, Beyond Good and Evil, White Fang, Meditations, Grimms' Fairy Tales, Gulliver's Travels, Walden, Robinson Crusoe, The Divine Comedy, Madame Bovary, Thus Spoke Zarathustra, The Odyssey, A Tale of Two Cities, Great Expectations, The Republic, Crime and Punishment, Leviathan, Anna Karenina, The Brothers Karamazov, Don Quixote, The Count of Monte Cristo and Les Misérables, each sized by feeding its full text to the o200k_base tokenizer (the English original or the standard English translation; Faust in the German original). The list still runs from Tao Te Ching to In Search of Lost Time; with the books set closer together, the one the line lands on sits nearer the real usage.
|
|
@@ -331,7 +445,7 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
331
445
|
- **两套首页版面,设置页随时切换**:新增「首页版面」设置项。**经典**沿用居中大标题加输入卡片;**工作台**把标题移到左上角并固定为一句「What's up next, 用户名?」(无衬线小字,与品牌标记同一行),输入框改用对话内的单行样式贴住窗口底部、上方一行细边框上下文胶囊,标题与一块 480px 窄栏用量面板贴着输入框左缘排布——概览页签是六个数字格(会话数、消息数、Token 总量、活跃天数、高峰时段、最常用模型)与 26 周按天热力图(等分列方格、蓝色数据色阶);模型页签是每天一根按模型颜色自下而上堆叠的柱子,下面跟一份模型排行(色块、模型名、输入与输出、占比,超过六行折成「再显示 N 个」,展开后末尾是「收起」),柱与色块共用同一套按名次取色的蓝色色阶;右上角的「全部 / 30 天 / 7 天」范围切换过滤数字格(含高峰时段)、趣味行与模型排行,热力图与柱状图保持自身窗口;所选范围内的用量超过一本书时,热力图下方出现倍数趣味行:书从《动物农场》到《追忆似水年华》共十一本,每次回到新会话页随机换一本,范围内用量还不到这本书时退到已经超过的最长那本。面板只在新会话页出现,进入对话后自动消失。
|
|
332
446
|
- **用量数据在本机汇总**:新增只读路由 `GET /dsh-claude-style/usage`(与用户名路由同一同源护栏)。装了 `dsh-cost-meter` 时直接读它的账本缓存(只读),否则读本机会话日志自行汇总,并按日志文件增量缓存——冷启动首次约两秒,之后每次启动约 3 毫秒。两种来源都给出每个模型的四类 token 与每天按模型拆分的 token(`models` 与 `days[].models`),模型页签的柱状图与排行读它们;账本按「提供方:模型」记账,同一模型经不同提供方的用量合成一行。账本不记小时,读账本时其余数字先出,高峰时段随后由本机会话日志按天算出补上。汇总不可用(旧宿主半边或汇总失败)时,面板改用宿主会话列表自带的投影值出数。
|
|
333
447
|
- **面板先画骨架再填数**:数字到达前先画好外框、占位数字、空热力格与模型行的占位条,到达后只替换文字、格子颜色与条长,整个版面不跳动;取不到数据的格子画破折号,不画零。
|
|
334
|
-
- **输入卡片上的像素螃蟹**:工作台版面的新会话页上(经典版面没有),输入卡片上沿靠右站着 Claude Code 的像素螃蟹。点它一下、指针从它身上移开时、以及页面开着时每隔 25–45 秒,它照 Claude Code
|
|
448
|
+
- **输入卡片上的像素螃蟹**:工作台版面的新会话页上(经典版面没有),输入卡片上沿靠右站着 Claude Code 的像素螃蟹。点它一下、指针从它身上移开时、以及页面开着时每隔 25–45 秒,它照 Claude Code 的样子敲一次代码:半转身眨眼,掏出笔记本电脑放到卡片边上,侧身敲一会儿键盘,收起电脑转回正面,约三秒;系统要求减少动态效果时(例如 Windows 关掉了「在 Windows 中显示动画」),只有点它才播放。只有螃蟹本身接收指针,电脑挥动的空白处不挡点击。
|
|
335
449
|
- **热力图的日期提示**:指针停在热力图的某一天上,立刻浮出 Claude Code 样式的深色提示,写着日期和当天的消息数(如「9月9日 — 15,955」);靠两端的几列提示贴着格子外沿,不会伸出面板。会话列表兜底来源没有按天的消息数,此时提示写当天的 Token。概览的数字格同时改用 Claude Code 的叫法:消息数、Token 总量、最常用模型(模型名不加粗)。
|
|
336
450
|
- **经典首页的问候更多了**:经典版面的大标题不再每个时段只有一句,早上、午间、下午、晚上、深夜各有一组问候,另有几句不分时段;每次回到新会话页随机换一句,同一次停留里不会跳动。
|
|
337
451
|
- **接入 HDSL 启动器的账号信息**:由 HDSL 启动的实例,昵称与头像会优先取启动器里的账号。昵称按「自定义昵称 → 官方账号昵称 → HDSL 昵称 → 上次探测到的系统用户名 → 系统用户名 → `User`」回退,头像按「官方账号头像 → HDSL 头像 → Claude 徽标」回退。宿主半边新增两条只读私有路由,与用户名路由同级过宿主请求栅栏:`GET /dsh-claude-style/hdsl` 回账号元数据(不含头像文件的绝对路径),`GET /dsh-claude-style/hdsl-skin.png` 回头像图片。契约版本读不到或不认识时整组忽略;头像文件被删除时回落到徽标。
|
|
@@ -341,7 +455,7 @@ All notable changes to `dsh-claude-style` are documented here, newest first.
|
|
|
341
455
|
- **Two home layouts, switchable in the settings page**: a new Home layout preference. **Classic** keeps the centered headline over the composer card; **Studio** pins the greeting to the top left as one fixed line ("What's up next, <user>?", in the sans UI face on the brand mark's line), docks the composer in the conversation's single-line form at the window's bottom edge with a row of hairline context chips above it, and sets the greeting and a 480px usage panel against the composer's left edge — an Overview tab with six stat cells (sessions, messages, total tokens, active days, peak hour, favorite model) and a twenty-six-week per-day heat grid of square cells in equal columns, and a Models tab stacking each day's per-model tokens into one bar over a ranked model list (swatch, model name, input and output, share; past six rows it folds behind a "show more" row, and the open list ends in a "show less" row), both reading the same rank-ordered blue ramp. The All / 30d / 7d range pills filter the tiles (the peak hour included), the multiplier line and the model list while the grid and the chart keep their own windows, and once the picked range's total passes one book a multiplier line appears under the grid — eleven books from Animal Farm to In Search of Lost Time, a fresh one drawn each time the new-conversation page comes back, stepping down to the longest book the range has passed when it has not reached the drawn one. The panel appears on the new-conversation page only and steps away once a session is open.
|
|
342
456
|
- **The usage numbers are folded locally**: a new read-only route, `GET /dsh-claude-style/usage`, behind the same same-origin fence as the username route. With `dsh-cost-meter` installed it reads that plugin's ledger cache (read-only); otherwise the host half folds the local session logs itself and caches the result incrementally per log file — about two seconds on the first cold pass, about 3 ms per start afterwards. Both sources answer each model's four token buckets and each day's per-model tokens (`models` and `days[].models`), which the Models tab's chart and ranking read; the ledger books usage per provider and model, and one model served by several providers is one row. The ledger keeps no hours, so with it the other figures land first and the peak hour follows a moment later, folded per day from the local session logs. When the fold cannot answer (an older host half or a failed pass), the panel falls back to the projection block each host session row carries.
|
|
343
457
|
- **The panel draws its skeleton before its numbers**: the frame, number placeholders, an empty heat grid and stand-in share bars come first; arriving values replace only the text, the cell colours and the bar lengths, so nothing shifts. A figure no source can answer is a dash, never a zero.
|
|
344
|
-
- **A pixel crab on the composer card**: on the new-conversation page of the Studio layout (the Classic layout has none), Claude Code's pixel crab stands on the composer card's top edge near its right end. When it is clicked, when the pointer leaves it, and every 25–45 seconds while the page is in view, it plays Claude Code's
|
|
458
|
+
- **A pixel crab on the composer card**: on the new-conversation page of the Studio layout (the Classic layout has none), Claude Code's pixel crab stands on the composer card's top edge near its right end. When it is clicked, when the pointer leaves it, and every 25–45 seconds while the page is in view, it plays Claude Code's laptop routine — a half turn and a wink, a laptop brought out onto the card's edge, a spell of typing side-on, and the laptop put away as it turns back, about three seconds; with reduced motion requested (Windows' "Show animations in Windows" turned off, for one) only a click plays it. Only the crab itself takes the pointer, so the room the laptop swings through never blocks a click.
|
|
345
459
|
- **Day tips on the heat grid**: resting the pointer on a day of the heat grid shows Claude Code's dark tip at once, with the date and that day's messages ("Sep 9 — 15,955"); over the columns at either end the tip lines up with the cell's outer edge and stays inside the panel. The session list's fallback has no per-day message count, and its tips name the day's tokens instead. The Overview tiles take Claude Code's names as well: Messages, Total tokens and Favorite model (the model name at regular weight).
|
|
346
460
|
- **More greetings on the classic home page**: the classic headline no longer has one line per time of day — morning, midday, afternoon, evening and night each have a pool, plus a few lines for any hour; a fresh line is drawn each time the new-conversation page comes back and holds still while you stay.
|
|
347
461
|
- **HDSL launcher accounts are picked up**: an instance started by HDSL prefers the launcher's account for both the nickname and the picture. The nickname falls back through the custom nickname → the signed-in account's name → the HDSL account name → the last probed system user → the system user → `User`; the picture through the account's avatar → the HDSL avatar → the Claude mark. The host half gains two read-only private routes behind the same request fence as the username route: `GET /dsh-claude-style/hdsl` answers the account metadata (never the avatar file's absolute path) and `GET /dsh-claude-style/hdsl-skin.png` answers the image. A contract version that is missing or unknown voids the whole group, and a deleted avatar file falls back to the mark.
|
package/LICENSE
CHANGED
|
@@ -39,4 +39,13 @@ owners.
|
|
|
39
39
|
are JetBrains Mono, distributed under the SIL Open Font License
|
|
40
40
|
(`fonts/OFL.txt`). They may be redistributed with this plugin.
|
|
41
41
|
|
|
42
|
+
Crab artwork notice: the pixel crab (Clawd) is a character of Anthropic, and
|
|
43
|
+
all rights in it remain with Anthropic. `src/assets/mascot/crab-laptop-body.png`
|
|
44
|
+
and `src/assets/mascot/crab-laptop-ink.png` are frames of Claude Code's own
|
|
45
|
+
animation; the sheets under `src/assets/mascot/crab/` are drawn by this project
|
|
46
|
+
after that character (by `scripts/draw-crab.py`, which carries the drawings).
|
|
47
|
+
These files, and their copies inlined into `lib/client.js`, are **not** covered
|
|
48
|
+
by the MIT license above. This plugin is an unofficial fan work, not affiliated
|
|
49
|
+
with or endorsed by Anthropic.
|
|
50
|
+
|
|
42
51
|
|
package/README.en.md
CHANGED
|
@@ -33,7 +33,7 @@ The settings page's Brand mark row switches between the Claude and DeepSeek pale
|
|
|
33
33
|
</tr>
|
|
34
34
|
</table>
|
|
35
35
|
|
|
36
|
-
> Light mode pairs an ivory canvas `#FCFCFB` with a pale sidebar `#FBFBF9`; dark mode uses warm black `#141413`. Ember orange `#D97757` is the single action accent across both canvases, and Claude Code's pixel crab stands on the
|
|
36
|
+
> Light mode pairs an ivory canvas `#FCFCFB` with a pale sidebar `#FBFBF9`; dark mode uses warm black `#141413`. Ember orange `#D97757` is the single action accent across both canvases, and Claude Code's pixel crab stands on the composer on the home page and in conversations alike.
|
|
37
37
|
|
|
38
38
|
### DeepSeek
|
|
39
39
|
|
|
@@ -67,6 +67,38 @@ The settings page's Brand mark row switches between the Claude and DeepSeek pale
|
|
|
67
67
|
|
|
68
68
|
> The workspaces, sessions, usage figures and nickname in the screenshots are sample data.
|
|
69
69
|
|
|
70
|
+
## Settings
|
|
71
|
+
|
|
72
|
+
The settings page appears both in the settings dialog (the "Claude Style" tab) and on the plugin page, in five tabs:
|
|
73
|
+
|
|
74
|
+
| Tab | Settings |
|
|
75
|
+
|---|---|
|
|
76
|
+
| General | Username, Animation, Open popovers on hover, Account-hold easter egg language |
|
|
77
|
+
| Appearance | Brand mark, Colours, Typefaces, Mascot, Where it appears |
|
|
78
|
+
| Composer | Composer restyle, Home layout, Redraw the model picker (with Quick providers under it), Redraw the permission control |
|
|
79
|
+
| Sidebar | Collapse the sidebar settings area, Sidebar search, In progress / Archived view |
|
|
80
|
+
| Conversation | Turn status line, Chat-area animations, Composer caret motion, Chat / Trajectory tabs |
|
|
81
|
+
|
|
82
|
+
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. The conversation area's animations — the follow, the automatic folding with its rolling door, the text fade, the file change rows and the send flight — share one Chat-area animations switch; the caret keeps its own three-way choice.
|
|
83
|
+
|
|
84
|
+
**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 and Composer caret motion rows on the settings page's Conversation 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.
|
|
85
|
+
|
|
86
|
+
**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.
|
|
87
|
+
|
|
88
|
+
**Automatic folding**: 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.
|
|
89
|
+
|
|
90
|
+
**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.
|
|
91
|
+
|
|
92
|
+
**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.
|
|
93
|
+
|
|
94
|
+
**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.
|
|
95
|
+
|
|
96
|
+
**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 rides the Chat-area animations switch, together with the entrance fade of an expanded body.
|
|
97
|
+
|
|
98
|
+
**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 Conversation tab offers Every move (the default), Explicit moves and Off.
|
|
99
|
+
|
|
100
|
+
**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.
|
|
101
|
+
|
|
70
102
|
## Fonts
|
|
71
103
|
|
|
72
104
|
> **Important: the Anthropic fonts are not bundled with the npm package.** They are available for download in this repository under [`fonts/`](fonts/). You can either install them on your system, or skip the install entirely — drop the two `.ttf` files into the plugin package's `fonts/` directory and the host will serve them as webfonts (the files are identical, so the result is the same). Either way, refresh or restart the web UI for the fonts to take effect.
|
|
@@ -121,6 +153,8 @@ Keep only one theme enabled at a time. dsh ≥ 0.1.7 is required, and a restart
|
|
|
121
153
|
|
|
122
154
|
The animation frames of Deepy the pixel whale come from the Deepy whale theme pack drawn by calmly-eating-bugs ([@wp3171216237](https://github.com/wp3171216237)), and ship with the plugin by the author's permission. Many thanks to the author! GIFs of all 20 animations, contributed by the author, are in [showcase/gifs/](showcase/gifs/).
|
|
123
155
|
|
|
156
|
+
The pixel crab (Clawd) is a character of Anthropic, and all rights in it remain with Anthropic. Its laptop animation is taken from Claude Code; the animations of its other states are drawn by this project after that character. The crab's frames are not covered by the MIT license (see [LICENSE](LICENSE)). This plugin is an unofficial fan work, not affiliated with or endorsed by Anthropic.
|
|
157
|
+
|
|
124
158
|
## Related projects
|
|
125
159
|
|
|
126
160
|
> Running several themes at once? Try [dsh-skin-manager](https://github.com/xiaoyangcheng84-svg/dsh-skin-manager) — it switches between all installed themes from a single settings page.
|
package/README.md
CHANGED
|
@@ -65,6 +65,38 @@
|
|
|
65
65
|
> </tr>
|
|
66
66
|
> </table>
|
|
67
67
|
|
|
68
|
+
## 设置
|
|
69
|
+
|
|
70
|
+
设置页同时出现在设置对话框(「Claude Style」标签页)与插件页,分为五个分页:
|
|
71
|
+
|
|
72
|
+
| 分页 | 设置项 |
|
|
73
|
+
|---|---|
|
|
74
|
+
| 通用 | 用户名、动画效果、悬停展开弹层、封号彩蛋语言 |
|
|
75
|
+
| 外观 | 品牌标识、配色、字体、吉祥物、出现位置 |
|
|
76
|
+
| 输入区 | 输入区重绘范围、首页版面、重绘模型选择器(及其下的快捷供应商)、重绘权限控件 |
|
|
77
|
+
| 侧栏 | 折叠侧栏设置区、侧栏搜索、进行中 / 已归档视图 |
|
|
78
|
+
| 对话 | 轮次状态行、聊天区动画效果、输入框插入符动效、对话 / 轨迹标签条 |
|
|
79
|
+
|
|
80
|
+
每一项接管宿主界面的功能都有自己的开关,关闭后宿主原来的界面原样回来,不需要刷新页面。对话区的那几项动画(跟随、自动开合与卷帘门、新文字淡入、文件变更行、聊天气泡动效)合成一个「聊天区动画效果」开关,插入符动效仍是自己的三档。
|
|
81
|
+
|
|
82
|
+
**与其他主题插件同时使用**:「配色」与「字体」选「跟随宿主」后,本插件不再改写宿主的颜色与字体,只保留布局和控件;颜色交给 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 之后原样生效。
|
|
83
|
+
|
|
84
|
+
**聊天区跟随**:思考行收起、工具调用行出现这些结构时刻,贴着底部的读者被交还给系统自己的跟随,内容成片到达时不再停在离底部几十像素的地方;「标准」与「简洁」档里封顶的过程组(思考与工具输出收在一个带滚动条的组体里)同样补到底部。补到底部走的是曲线:零散到达的字收得住尾巴,成片涌进的文字以一段稳速滑过去,再落到末尾。流式输出期间主滚动条的新内容也沿这条曲线推进,不再一帧写到底;输出很快时最新几行会短暂拖在屏幕下缘之外,流一停就滑到位。你自己发出的消息不走这条曲线:宿主把它滚进视野的那一下照旧一步到位。读者自己滚动离开底部之后,插件不再插手,直到他自己回到底部。
|
|
85
|
+
|
|
86
|
+
**思考与过程自动开合**:模型还在思考时思考行开着,思考停下就收回去;运行中的过程组自动展开,这一段结束再收起。读者自己按过的行或组在当时的阶段里不再被改动。
|
|
87
|
+
|
|
88
|
+
**聊天气泡动效**:提交消息时输入卡片原样浮起、一路收成那条气泡,草稿里的字跟着形状重新排,落地正好接上真实的消息行。
|
|
89
|
+
|
|
90
|
+
**文件变更行**:run_code 程序里派发出去的写入与编辑带上行尾的 `+n -m` 与可展开的改动卡片,路径可点开文件;失败与中断的行保留裁决信息。
|
|
91
|
+
|
|
92
|
+
**新文字淡入**:流式回答里新出现的字符先淡后实(约 0.12 秒),并按到达次序略作错开;整段一次到达的内容、几千字的突发与刚被折叠重排过的文字保持本色。
|
|
93
|
+
|
|
94
|
+
**卷帘门过渡**:点开或收起一行(工具卡片、思考行、命令卡片)以及过程组时,高度逐帧变化,下方内容被真的推开或收回;门只走读者看得见的那一段,内容再长也是同一速度,多张卡片的展开体整扇门一起走。它与展开体的入场淡入一起挂在「聊天区动画效果」这个开关上。
|
|
95
|
+
|
|
96
|
+
**输入框插入符动效**:输入框里的光标由插件自己绘制,移动时滑过去;提问卡片的作答框与排队消息的行内编辑框同样覆盖。设置页的「对话」页有三档:每一格(默认)、只在移动时、关闭。
|
|
97
|
+
|
|
98
|
+
**吉祥物**:输入框上沿站着一只像素小伙伴,随智能体的工作状态换动画(思考、写回答与调用工具、多个会话同时工作、子代理、等你操作、压缩上下文、完成、失败、睡着)。「跟随品牌」在 Claude 品牌下是像素螃蟹,在 DeepSeek 品牌下是小鲸鱼 Deepy,也可以固定选一个或者关闭;「出现位置」决定它只在新会话页出现,还是新会话页和对话页都出现。
|
|
99
|
+
|
|
68
100
|
## 字体
|
|
69
101
|
|
|
70
102
|
> 本插件使用的字体如下。
|
|
@@ -120,6 +152,8 @@ dsh plugin --profile web add dsh-claude-style # npm 包(推
|
|
|
120
152
|
|
|
121
153
|
像素小鲸鱼 Deepy 的动画帧图来自 calmly-eating-bugs([@wp3171216237](https://github.com/wp3171216237))绘制的 Deepy 小鲸鱼主题包。
|
|
122
154
|
|
|
155
|
+
像素螃蟹(Clawd)是 Anthropic 的角色形象,相关权利归 Anthropic 所有。螃蟹掏出电脑敲代码的动画取自 Claude Code,其余各个状态的动画由本项目按这一形象绘制。螃蟹的帧图不适用 MIT 许可(见 [LICENSE](LICENSE))。本插件是非官方的爱好者作品,与 Anthropic 没有关联,也未获其认可。
|
|
156
|
+
|
|
123
157
|
## 友链
|
|
124
158
|
|
|
125
159
|
> 想把 Claude Code / Codex 等外部代理的会话历史导入 DSH 接着聊?推荐作者的另一个插件 [dsh-chat-import](https://github.com/Nwflower/dsh-chat-import)。
|
package/docs/STYLE.md
CHANGED
|
@@ -65,11 +65,68 @@ Two fills are palette-specific rather than carried over from the dark base:
|
|
|
65
65
|
in light) and `--dsw-alias-button-elevated-fill` (a surface above the canvas in
|
|
66
66
|
light, a raised gray in dark).
|
|
67
67
|
|
|
68
|
+
## Two palettes · 两套配色归属
|
|
69
|
+
|
|
70
|
+
The Colours and Typefaces rows each choose who paints: **Claude** (the default)
|
|
71
|
+
or **Follow the host**. Every rule that writes a host token carries the Claude
|
|
72
|
+
gate in its selector — `%%PALETTE_CLAUDE%%` for colours, `%%TYPEFACE_CLAUDE%%`
|
|
73
|
+
for `--dsw-font-*` — and so does every rule that paints the skin's canvas onto
|
|
74
|
+
the host's frame (`<html>`, `<body>`, `#root`, the sidebar and conversation
|
|
75
|
+
columns); the build refuses an ungated one. Under "follow the host" those rules
|
|
76
|
+
drop out: the host's own tokens stand, or another theme plugin's, such as a
|
|
77
|
+
wallpaper plugin that clears the canvas and turns the overlays to glass.
|
|
78
|
+
|
|
79
|
+
The skin's own surfaces read only its private tokens and host tokens. Under the
|
|
80
|
+
host palette each private token is an alias of a host token, so those surfaces
|
|
81
|
+
follow whoever paints the host's. A new private colour token is written into
|
|
82
|
+
both the Claude blocks and the host block (the build checks the host block
|
|
83
|
+
covers every one). Cards take the host's overlay layer rather than its canvas:
|
|
84
|
+
a plugin that clears the canvas still gives its overlays a readable fill, and the
|
|
85
|
+
shared popover card blurs what lies behind it (`blur(16px) saturate(1.4)`).
|
|
86
|
+
|
|
87
|
+
| Private token | Host alias | Use |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `--dsh-claude-canvas` | `--dsw-alias-bg-base` | the page canvas, the search box |
|
|
90
|
+
| `--dsh-claude-sidebar-canvas` | `--dsw-specific-sidebar-fill` | the sidebar |
|
|
91
|
+
| `--dsh-claude-raised` | `--dsw-alias-bg-overlay` | popovers, menus (dark) |
|
|
92
|
+
| `--dsh-claude-card` | `--dsw-alias-bg-overlay` | cards on the canvas in light and raised in dark: the account popover, the search palette |
|
|
93
|
+
| `--dsh-claude-chip` | `--dsw-specific-selector` | segmented control and switch at rest |
|
|
94
|
+
| `--dsh-claude-hover-bg` | `--dsw-alias-interactive-bg-hover` | hover wash |
|
|
95
|
+
| `--dsh-claude-inline-code-bg` / `-fg` | `--dsw-alias-markdown-inline-code` / `--dsw-alias-label-primary` | inline code |
|
|
96
|
+
| `--dsh-claude-link` / `-underline` / `-hover` | `--dsw-alias-link` (underline at 60%) | markdown links |
|
|
97
|
+
| `--dsh-claude-ink-strong` / `--dsh-claude-session-ink` | `--dsw-alias-label-primary` / `--dsw-alias-label-secondary` | active row ink, session title at rest |
|
|
98
|
+
| `--dsh-claude-table-head` | `--dsw-alias-bg-layer-2` | table header row |
|
|
99
|
+
| `--dsh-claude-scrollbar` / `-hover` | `--dsw-alias-border-l2` / `--dsw-alias-label-caption` | scrollbar thumb |
|
|
100
|
+
| `--dsh-claude-inverse-fill` / `-ink` | `--dsw-alias-interactive-bg-hover` / `--dsw-alias-label-primary` | the model picker's group label (an inverted chip under Claude, a hover-plate chip under the host) |
|
|
101
|
+
| `--dsh-claude-logo-ink` | `--dsw-alias-label-primary` | sidebar brand art |
|
|
102
|
+
|
|
103
|
+
Under the host typeface the skin's own faces fall back to the host's:
|
|
104
|
+
`--dsh-claude-font-serif`, `-prose` and `-brand` to `--dsw-font-family` (the host
|
|
105
|
+
carries no serif), `--dsh-claude-font-code` to `--ds-font-family-code`.
|
|
106
|
+
|
|
107
|
+
Two colours stay whoever paints: the reasoning slider's violet top rung
|
|
108
|
+
(`--dsh-claude-apex*`) and the account-hold page, which reproduces a Claude
|
|
109
|
+
screen. Translucent neutral hover tints and the usage panel's data colours stay
|
|
110
|
+
literal; they read on any canvas. Every other colour that paints a surface, a
|
|
111
|
+
text, a border or an accent reads a token.
|
|
112
|
+
|
|
113
|
+
## Windows titlebar · 桌面顶栏
|
|
114
|
+
|
|
115
|
+
On the Windows desktop the 40px caption row has no colour of its own: the
|
|
116
|
+
sidebar and the conversation run to the window's top edge, each in its own
|
|
117
|
+
fill (`--dsh-claude-sidebar-canvas`, `--dsh-claude-canvas`), and the sidebar's
|
|
118
|
+
1px `--dsw-alias-border-l1` hairline runs with them from the top edge to the
|
|
119
|
+
bottom. The conversation column and the fullscreen file panel lose the host's
|
|
120
|
+
16px top-left corner, so the hairline meets them straight. The three window
|
|
121
|
+
buttons sit on the page itself: no block of their own behind them, and they dim
|
|
122
|
+
with a modal's mask like everything else. Their hover plate is the system's, a
|
|
123
|
+
tint of the button glyph's colour.
|
|
124
|
+
|
|
68
125
|
## Typography
|
|
69
126
|
|
|
70
|
-
- **Serif display** — headings / editorial statements (`--
|
|
127
|
+
- **Serif display** — headings / editorial statements (`--dsh-claude-font-serif`).
|
|
71
128
|
- **Sans UI** — chrome, body (`--dsw-font-family`).
|
|
72
|
-
- **Mono** — code, technical labels (`--
|
|
129
|
+
- **Mono** — code, technical labels (`--dsh-claude-font-code`).
|
|
73
130
|
|
|
74
131
|
|
|
75
132
|
## Shapes
|
|
@@ -248,7 +305,7 @@ Its horizontal place is the one thing the skin takes over. ui-chat hangs the
|
|
|
248
305
|
panel from the anchor's LEFT edge and only then clamps it into the viewport
|
|
249
306
|
(`useStatDialog`, align `start`), so a trigger at the end of the composer row
|
|
250
307
|
leaves the panel against the window's right margin instead of under the ring.
|
|
251
|
-
`features/
|
|
308
|
+
`features/context-stats/session-stats.js` reads the meter's right edge and the
|
|
252
309
|
panel's own layout width — `offsetWidth`, not its rect: the entrance scales the
|
|
253
310
|
box, and a transformed rect is two per cent narrower than the one that settles —
|
|
254
311
|
and writes `--dsh-claude-context-panel-left` with the mark that turns it on;
|
|
@@ -257,7 +314,7 @@ host's inline value. The reading is re-taken when the panel's box changes (a
|
|
|
257
314
|
`ResizeObserver`) and when the viewport moves (`reposition('viewport')`).
|
|
258
315
|
|
|
259
316
|
What the skin appends to it is the session's numbers
|
|
260
|
-
(`features/
|
|
317
|
+
(`features/context-stats/session-stats.js`), read from the host's `sessionStats`
|
|
261
318
|
and `tokenUsage` projections — the same durable whole-log values the host's own
|
|
262
319
|
pills render — never by opening the host's stat dialogs. The labels and the
|
|
263
320
|
duration / token templates come from the host's `chat` locale namespace, so the
|
|
@@ -466,41 +523,59 @@ placeholder, a zero day draws the grid's own base tone.
|
|
|
466
523
|
|
|
467
524
|
## The composer crab · 输入卡片上的螃蟹
|
|
468
525
|
|
|
469
|
-
|
|
470
|
-
the
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
526
|
+
Claude Code's pixel crab is the mascot under the Claude brand (or when picked in
|
|
527
|
+
the Mascot row). It stands where Deepy does — the composer card's top edge on
|
|
528
|
+
both home layouts, the input area or the panel that replaces its card in a
|
|
529
|
+
conversation (unless Where it appears keeps it to the home page) — and follows
|
|
530
|
+
the same states with the same keys. It is drawn on a 52×36 grid of cells at 2px
|
|
531
|
+
a cell, crisp (`pixelated`, 104×72px): feet on the bottom row, on the edge of
|
|
532
|
+
what it stands on; the right claw four cells in from the grid's right edge, so
|
|
533
|
+
it stands 8px inside the card's right edge, where the 18px corner starts to
|
|
534
|
+
round, and the four spare cells take a lean, a note or a sparkle. The resting
|
|
535
|
+
crab — shell 16×12 cells, claws 4×4, eyes 2×2, four legs 2×4 — is 48×32px
|
|
536
|
+
(columns 24–47, rows 20–35) and only it takes the pointer. The shell is the clay
|
|
537
|
+
accent `#d97757` in both themes, the side-on back `#b9603f`, the eyes `#141413`;
|
|
538
|
+
the props (the laptop, the thought bubble, letters, notes, the hard hat) are an
|
|
539
|
+
ink mask filled with the tertiary label ink. Every frame lasts 80ms, Claude
|
|
540
|
+
Code's pace. Its laptop frames are Claude Code's own routine; the rest are drawn
|
|
541
|
+
by `scripts/draw-crab.py` after the same character. With the animation choice
|
|
542
|
+
resolved to "reduced" each state holds its still frame; a click or a pull still
|
|
543
|
+
plays its reaction.
|
|
544
|
+
|
|
545
|
+
| State | Animation | Still frame |
|
|
546
|
+
|---|---|---|
|
|
547
|
+
| idle, every 20–40 s a look around, a claw wave or Claude Code's whole laptop routine | `idle`, `idle-look`, `idle-wave`, `idle-laptop` | 0 |
|
|
548
|
+
| the model reasons or has not answered: eyes up to a thought bubble | `thinking` | 18 |
|
|
549
|
+
| the model writes or tools run: 1 / 2 / 3+ sessions at work (typing / headphones / typing in a hard hat) | `typing` / `music` / `building` | 0 / 0 / 0 |
|
|
550
|
+
| subagents running: 1 / 2+ (headphones / conducting) | `music` / `conducting` | 0 / 0 |
|
|
551
|
+
| a compaction runs: squashed | `compacting` | 3 |
|
|
552
|
+
| an approval, a question or a plan review waits: an exclamation mark | `notification` | 0 |
|
|
553
|
+
| a tool call or a turn failed (4.8 s): crossed eyes, a shake | `error` | 4 |
|
|
554
|
+
| a turn or a compaction finished (5.2 s): hops, claws up | `happy` | 3 |
|
|
555
|
+
| a quiet minute / the next pointer move or key | `sleeping` / `waking` | 0 / 11 |
|
|
556
|
+
| a click on the left / right half, four quick clicks, a pull | `poke-left` / `poke-right`, `tickle`, `drag` | 0 |
|
|
485
557
|
|
|
486
558
|
## Deepy · 小鲸鱼
|
|
487
559
|
|
|
488
|
-
Under the DeepSeek brand
|
|
489
|
-
Deepy theme pack: a 52×52 grid of logical pixels drawn at 2px a pixel (a 104px
|
|
560
|
+
Under the DeepSeek brand (or when picked in the Mascot row) the mascot is
|
|
561
|
+
Deepy, the pixel whale of the Deepy theme pack: a 52×52 grid of logical pixels drawn at 2px a pixel (a 104px
|
|
490
562
|
square), its ground line — row 48.5, the middle of its shadow — on the top edge
|
|
491
|
-
of what it stands on
|
|
492
|
-
over
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
card
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
a
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
563
|
+
of what it stands on. Every sheet's crop box reaches 3px past that ground line,
|
|
564
|
+
and the whale paints over the host's cards, so its box is lifted by those 3px:
|
|
565
|
+
the sprite's last row lands on the card's top edge, and the shadow's tail stays
|
|
566
|
+
off the card instead of being stamped across it. Its box is 8px in from the
|
|
567
|
+
right end of the card it stands over. On the home page that is the composer card
|
|
568
|
+
(both layouts); in a conversation it is the whole input area, and the panel that
|
|
569
|
+
replaces the card while the reader is asked for something (those panels start
|
|
570
|
+
6–8px above their card). Every frame lasts 50ms. The sheets carry five device
|
|
571
|
+
pixels to a logical pixel and are scaled down smoothly, so the whale stays crisp
|
|
572
|
+
from 1× to 2× screens without `image-rendering: pixelated`, which would drop
|
|
573
|
+
rows on a downscale. The body is Deepy's blue `#4E6FFF` with a navy `#142660`
|
|
574
|
+
outline and a white belly in both themes; on the dark canvas the outline and the
|
|
575
|
+
soft shadow recede and the blue body carries the shape. Only the resting body
|
|
576
|
+
(columns 12–44, rows 30–48) takes the pointer. With the animation choice
|
|
577
|
+
resolved to "reduced" each state holds its still frame; a click or a pull still
|
|
578
|
+
plays its reaction.
|
|
504
579
|
|
|
505
580
|
| State | Animation | Still frame |
|
|
506
581
|
|---|---|---|
|