dsh-any-background 0.3.3 → 0.3.4
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/README.md +15 -15
- package/README.zh.md +15 -15
- package/lib/client.js +233 -26
- package/lib/client.js.map +1 -1
- package/lib/index.js +11 -1
- package/package.json +12 -18
- package/lib/invariant.js +0 -8
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-any-background?color=4d6bfe"></a>
|
|
5
5
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm monthly downloads" src="https://img.shields.io/npm/dm/dsh-any-background?color=4d6bfe"></a>
|
|
6
6
|
<a href="https://github.com/Tkingxiao/dsh-any-background/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/npm/l/dsh-any-background?color=4d6bfe"></a>
|
|
7
|
-
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="Supported DSH versions: 0.1.5-rc.2 ~ 0.2.
|
|
7
|
+
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="Supported DSH versions: 0.1.5-rc.2 ~ 0.2.1-alpha.1 and above" src="https://img.shields.io/badge/DSH-0.1.5--rc.2%20~%200.2.1--alpha.1%2B-4d6bfe" /></a>
|
|
8
8
|
<a href="https://github.com/topics/dsh-better-sidebar"><img alt="Plugin ecosystem: GitHub topic dsh-better-sidebar" src="https://img.shields.io/badge/plugin%20ecosystem-topic%20dsh--better--sidebar-4d6bfe" /></a><br /><br />
|
|
9
9
|
<a href="https://github.com/Tkingxiao/dsh-any-background"><img src="https://img.shields.io/github/stars/Tkingxiao/dsh-any-background?style=social" alt="GitHub stars"></a>
|
|
10
10
|
<a href="https://dsh.directory/plugins/tkingxiao/dsh-any-background"><img src="https://dsh.directory/badges/listed.svg" alt="dsh.directory listed"></a>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
English | [中文](README.zh.md)
|
|
14
14
|
|
|
15
|
-
A **DeepSeek Harness** appearance plugin: custom theme color, background wallpaper (image / video / algorithmically generated), and fine-grained per-surface opacity & blur controls. Compatible with **DSH 0.1.5-rc.2 through
|
|
15
|
+
A **DeepSeek Harness** appearance plugin: custom theme color, background wallpaper (image / video / algorithmically generated), and fine-grained per-surface opacity & blur controls. Compatible with **DSH 0.1.5-rc.2 through `0.2.1-alpha.1` — and every host release above it** (official-Sidebar UI such as the "Theme" card enables itself where the host exposes the Sidebar registry extension point, and is skipped silently where it does not).
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -91,6 +91,16 @@ A **DeepSeek Harness** appearance plugin: custom theme color, background wallpap
|
|
|
91
91
|
|
|
92
92
|
## Changelog (latest two releases)
|
|
93
93
|
|
|
94
|
+
### v0.3.4 (Two new host lines: `0.2.0-rc.2` and `0.2.1-alpha.1`)
|
|
95
|
+
|
|
96
|
+
- **A sticky menu group heading got its own token on `0.2.0-rc.2`** (`--dsw-alias-menu-group-header-fill`, replacing `ModelSelect`'s `.groupTitle{background:var(--dsw-specific-menu)}`), so the model list's heading follows the card / header opacity slider and the picked theme color again instead of sitting on the faded menu as an untinted, near-opaque band. This is the first patch line that needed two folders — rc.1 and rc.2 are the same prerelease channel with different facts — so its folder is named for the build.
|
|
97
|
+
- **The turn-event row now fades in its own color**: since rc.2 it fills from `--dsw-alias-turn-trigger-bg` (dark mode points that at the interactive-hover fill, not the code-block one). The plugin reads the same chain the host writes, fallback included, so a newer host takes its new color, an older one takes the code-block color, and no release test enters the styling code.
|
|
98
|
+
- **DSH `0.2.1-alpha.1` is supported**: `design-platform.css`, `MenuGroup` and `MenuSurface` are byte-identical to rc.2, and the new `shell.bottom` strip paints `--dsw-alias-bg-base` — the main-background token — so the existing slider already owns it.
|
|
99
|
+
- **Small host releases no longer need a plugin release**: `engines.dsh`, the six gated `@deepseek-ai/dsh-*` peers and `dsh.compatibility` now close with `|| 0.2.1-alpha.1 || >=0.1.7-alpha.1` — the umbrella has no upper bound. From `0.1.7-rc.1` the host disables any plugin whose peer ranges do not name the running release, and a range that runs out is a wall in front of a plugin that would have kept working: an uncapped range hands a future 0.2.x or 0.3.x build the closest verified adapter plus a log line saying how far from `exact` that is, and the worst a wrong guess can cost is one slider not fading a surface it no longer recognizes. Installing on a new host still needs a `dsh web` restart — the peer check runs while the profile is composed.
|
|
100
|
+
- **The cards that take the composer seat now frost with the input blur.** Approval, plan review and the question composer render *beside* `[data-composer-card]` and fill from the same `--dsw-specific-input-major`, so they faded with the input slider while the blur slider had nothing to act on — the card you are meant to read went straight onto the wallpaper. They now get the capsule's `::before` underlay, gated on a non-zero blur so the plugin still adds no stacking context for free, and the answer field joins the input group's stroke and placeholder bindings. The anchors (`[data-approval-key]`, `[data-plan-review-key]`, `[data-question-key]`) are unchanged from `0.1.5-rc.2` through `0.2.1-alpha.1`, so this is a range-wide binding in shared host facts, not a per-version one.
|
|
101
|
+
- **The `invariant` companion is gone** (`lib/invariant.js`, its `exports` entry, its `@deepseek-ai/dsh-invariants` peer): nothing ever loaded it, and `0.2.1-alpha.1` deletes that package.
|
|
102
|
+
- **The settings page's stylesheet now carries the plugin tag the other sheets have.** Through rc.2 the host's module system claimed *any* untagged `<style>` present while a plugin materialized and deleted it if that plugin failed; `0.2.1-alpha.1` narrowed the claim to the tags a factory added itself. Tagged, the sheet is safe on both.
|
|
103
|
+
|
|
94
104
|
### v0.3.3 (Menu paint per release, DSH 0.2.0-rc.1 supported)
|
|
95
105
|
|
|
96
106
|
- **The card and header sliders drive menus on `0.1.7-rc.2` again.** That build moved a menu's fill and frost onto a child layer and turned `--dsw-specific-menu` into an alias, so the token the plugin had always been writing was no longer read by anything on a menu. Which tokens a menu paints from, and which layer does the frosting, is now a fact each version folder supplies instead of an assumption baked into shared code.
|
|
@@ -99,16 +109,6 @@ A **DeepSeek Harness** appearance plugin: custom theme color, background wallpap
|
|
|
99
109
|
- **The plugin page's loading skeleton** gets the same frosted card as the list it stands in for.
|
|
100
110
|
- Installing on a 0.2.0 host needs a `dsh web` restart: since `0.1.7-rc.1` the host decides whether a plugin loads from its peer ranges, and a release it does not name is disabled before a single module is imported.
|
|
101
111
|
|
|
102
|
-
### v0.3.2 (Produced artifacts fully bound, 0.1.7-rc.2 loads again)
|
|
103
|
-
|
|
104
|
-
- **The produced slider now covers every artifact 0.1.7 renders**: tool-detail cards, turn-event rows, diff blocks, the changed-files card, inline `code` frost and the hover preview window — that last one portals its card to `<body>`, which is why no slider reached it before.
|
|
105
|
-
- **Code-card headers follow the theme again** instead of staying a pale slab that ignored the slider.
|
|
106
|
-
- **dsh-better-sidebar's workbench now belongs to the produced slider**; the panel row means only the host's own right Sidebar.
|
|
107
|
-
- **One artifact card no longer answers to two sliders** — its root reads the produced slider's own raw layer token.
|
|
108
|
-
- **The composer stops carrying a stacking context once its blur returns to 0.**
|
|
109
|
-
- **antd confirm dialogs are no longer mistaken for the settings panel**: they inherited its surface colour, frost and outline group, because the old selector only asked for the three ARIA attributes antd also emits.
|
|
110
|
-
- **`0.1.7-rc.2` loads again, and later 0.1.x builds with it**: `engines.dsh`, the seven `@deepseek-ai/dsh-*` peers and `dsh.compatibility` now close with `|| 0.1.7-rc.2 || >=0.1.7-alpha.1 <0.2.0-alpha.0` — a bare `>=0.1.7` would match no prerelease build at all.
|
|
111
|
-
|
|
112
112
|
## Installation
|
|
113
113
|
|
|
114
114
|
### Method 1: npm install (Recommended)
|
|
@@ -151,14 +151,14 @@ pnpm dsh web
|
|
|
151
151
|
|
|
152
152
|
## Compatibility
|
|
153
153
|
|
|
154
|
-
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness) 0.1.5-rc.2 ~
|
|
155
|
-
- **Isolated per-version adaptation**: the release is resolved on the Node half from the app manifest the process was composed from (`ctx.profileContext.installAnchor`, with the launcher's on-disk layout behind it — the client context exposes no version) and, once handed down through the `read` RPC, is routed only by the front-layer adapter — `src/host-compat/` detects and buckets channels, while `src/client/host-compat/versions/` holds **one folder per
|
|
154
|
+
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness) 0.1.5-rc.2 ~ `0.2.1-alpha.1`, and everything above it with it** — `engines.dsh`, the six gated `@deepseek-ai/dsh-*` `peerDependencies` and `dsh.compatibility.dsh` name the `0.1.5-rc` / `0.1.6-alpha` builds this plugin was checked against one by one — those have to be listed, since the umbrella starts above them — keep naming every build it has since diffed (`0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-alpha.1`) for the record, and close with an uncapped `>=0.1.7-alpha.1`, so every 0.1.7, 0.2 and later release loads. The uncapped umbrella is the deliberate choice: from `0.1.7-rc.1` the host enforces exactly this peer list — a release it does not name is disabled before a single module is imported — so a range that runs out is a wall in front of a plugin that would have gone on working. An unseen release gets the closest verified adapter plus a log line saying how far from `exact` that is, and the worst a stale guess can cost is one slider no longer fading a surface the host has since moved; a version check that failed closed would have cost the whole plugin. `dsh.compatibility.dshReleases` records which builds were checked and how: `0.1.7-rc.1` / `0.1.7-rc.2`, `0.2.0-rc.1` / `0.2.0-rc.2` and `0.2.1-alpha.1` were checked by diffing their tags, the builds before them hands-on. That enforcement still means a `dsh web` restart when the plugin is installed or updated — the check runs while the profile is composed, not when the plugin is updated — but the uncapped umbrella is what spares a machine that has already moved to a newer host from needing a plugin release or a manual exact-version exemption (`dsh plugin allow-version`) first. The host release is resolved on the Node half at runtime, and features that depend on a specific host release channel (the right Sidebar's panel blur, the official Sidebar's "Theme" card) enable themselves only where the corresponding host structure exists; everything else behaves identically across the range.
|
|
155
|
+
- **Isolated per-version adaptation**: the release is resolved on the Node half from the app manifest the process was composed from (`ctx.profileContext.installAnchor`, with the launcher's on-disk layout behind it — the client context exposes no version) and, once handed down through the `read` RPC, is routed only by the front-layer adapter — `src/host-compat/` detects and buckets channels, while `src/client/host-compat/versions/` holds **one folder per set of verified facts** (`v0-1-5-rc-2-3` / `v0-1-6-alpha-1-2` / `v0-1-7-alpha-1-2-rc-1` / `v0-1-7-rc-2` / `v0-2-0-rc-1` / `v0-2-0-rc-2` / `v0-2-1-alpha-1` / `unknown`), each describing that version's panel mechanics, header slot keys, plugin-page shape and where a menu's paint lives. A folder is keyed to what its facts cover, not to the shape of the version number: `0.2.0-rc.1` and `0.2.0-rc.2` are one prerelease channel, but rc.2 renamed the token a sticky menu group heading paints from, so the line carries two folders and the newer one is named for the build that opened it. Base code just asks the adapter questions (who owns the guide surface, which layer carries the blur, which token fades a menu) and never compares version strings. Another build on a verified patch line (`0.1.6-alpha.4` against a table checked at `alpha.2`) keeps that line's adapter, and a patch line nothing was checked against clamps to the nearest one with a log line saying so — which is the arm that now serves every release above `0.2.1-alpha.1`. Only a release that will not parse at all falls into `unknown` and probes the DOM shape instead of guessing (`:has()` dual arms); supporting a new host means adding one folder and registering it.
|
|
156
156
|
- **[DSHA](https://github.com/DSH-APP/DSHA)** — DeepSeek Harness Android launcher (ROOT-free, Termux-free). Its bundled `dsh` is `0.1.5-rc.2`, inside the supported range; the mobile UI shell is provided by `dsh-web-mobile`.
|
|
157
157
|
- **[deepseek-harness-desktop](https://github.com/anywhere-labs/deepseek-harness-desktop)** — Supported
|
|
158
158
|
|
|
159
159
|
## Permissions, side effects & boundaries
|
|
160
160
|
|
|
161
|
-
- **Integration form**: official Profile Bundle — `package.json` declares `dsh.bundle.patch: ./cordis.patch.yml` (a loader insert layer), the repository ships prebuilt runtime artifacts ready to use (`lib/index.js`, `lib/
|
|
161
|
+
- **Integration form**: official Profile Bundle — `package.json` declares `dsh.bundle.patch: ./cordis.patch.yml` (a loader insert layer), the repository ships prebuilt runtime artifacts ready to use (`lib/index.js`, `lib/client.js`), and there are no install scripts, no `postinstall`, no native binaries, and no build step at install time.
|
|
162
162
|
- **Filesystem**: the server half reads and writes only inside `<dsh home>/.dsh-any-background-data/` (config JSON, wallpaper, rotation pool, video, font) and touches nothing outside it; config writes are atomic (temp file + rename). These files live on the real disk, so they are **outside generation restore — it neither captures nor rolls them back**; deleting the directory is a full plugin reset.
|
|
163
163
|
- **Network**: one outbound fetch happens only when the user pastes an http/https image or video URL and presses Apply; no telemetry, no other external calls.
|
|
164
164
|
- **Shell / native**: none. No `child_process`, no native modules, no dynamically downloaded executables.
|
package/README.zh.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm 版本" src="https://img.shields.io/npm/v/dsh-any-background?color=4d6bfe"></a>
|
|
5
5
|
<a href="https://www.npmjs.com/package/dsh-any-background"><img alt="npm 月下载量" src="https://img.shields.io/npm/dm/dsh-any-background?color=4d6bfe"></a>
|
|
6
6
|
<a href="https://github.com/Tkingxiao/dsh-any-background/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/npm/l/dsh-any-background?color=4d6bfe"></a>
|
|
7
|
-
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="支持的 DSH 版本:0.1.5-rc.2 ~ 0.2.
|
|
7
|
+
<a href="https://www.npmjs.com/package/@deepseek-ai/dsh?activeTab=versions"><img alt="支持的 DSH 版本:0.1.5-rc.2 ~ 0.2.1-alpha.1 及其上" src="https://img.shields.io/badge/DSH-0.1.5--rc.2%20~%200.2.1--alpha.1%2B-4d6bfe" /></a>
|
|
8
8
|
<a href="https://github.com/topics/dsh-better-sidebar"><img alt="插件生态:GitHub topic dsh-better-sidebar" src="https://img.shields.io/badge/%E6%8F%92%E4%BB%B6%E7%94%9F%E6%80%81-topic%20dsh--better--sidebar-4d6bfe" /></a><br /><br />
|
|
9
9
|
<a href="https://github.com/Tkingxiao/dsh-any-background"><img src="https://img.shields.io/github/stars/Tkingxiao/dsh-any-background?style=social" alt="GitHub stars"></a>
|
|
10
10
|
<a href="https://dsh.directory/plugins/tkingxiao/dsh-any-background"><img src="https://dsh.directory/badges/listed.svg" alt="dsh.directory listed"></a>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
[English](README.md) | 中文
|
|
14
14
|
|
|
15
|
-
一个 **DeepSeek Harness** 外观插件:自定义主题色、背景壁纸(图片 / 视频 / 算法动态生成),以及逐表面的透明度与模糊度控制。兼容 **DSH 0.1.5-rc.2
|
|
15
|
+
一个 **DeepSeek Harness** 外观插件:自定义主题色、背景壁纸(图片 / 视频 / 算法动态生成),以及逐表面的透明度与模糊度控制。兼容 **DSH 0.1.5-rc.2 直至 `0.2.1-alpha.1`,其上所有版本一并放行**(官方右侧栏「主题」卡片等界面按宿主是否提供右侧栏注册表扩展点自动启用,缺失时静默跳过)。
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -91,6 +91,16 @@
|
|
|
91
91
|
|
|
92
92
|
## 更新日志(只保留最近两个版本)
|
|
93
93
|
|
|
94
|
+
### v0.3.4(新增两条宿主线:`0.2.0-rc.2` 与 `0.2.1-alpha.1`)
|
|
95
|
+
|
|
96
|
+
- **`0.2.0-rc.2` 给吸顶的菜单分组标题另发了令牌**(`--dsw-alias-menu-group-header-fill`,取代 `ModelSelect` 自己的 `.groupTitle{background:var(--dsw-specific-menu)}`):模型列表的分组标题重新跟着「卡片」「顶栏选项」两组滑块与所选主题色走,不再以一条不套色、近乎不透明的白带压在淡出的菜单上。这是第一条需要两个目录的补丁行——rc.1 与 rc.2 同属一个预发布渠道却交出不同的事实——所以新目录按构建命名。
|
|
97
|
+
- **事件行改用他自己的颜色淡出**:rc.2 起该行从 `--dsw-alias-turn-trigger-bg` 取底(深色模式下这个别名指向交互态底色,不再是代码块那一层)。插件按宿主写下的链条去读,连带回退值一起,于是新构建拿新颜色、旧构建拿代码块颜色,样式代码里不引入任何版本判断。
|
|
98
|
+
- **支持 DSH `0.2.1-alpha.1`**:`design-platform.css`、`MenuGroup`、`MenuSurface` 与 rc.2 逐字节相同;新增的 `shell.bottom` 条带画的是 `--dsw-alias-bg-base`——主背景令牌——背景透明度滑块本来就管着它。
|
|
99
|
+
- **宿主小版本更新不再需要插件跟着发版**:`engines.dsh`、六个受门禁的 `@deepseek-ai/dsh-*` peer 与 `dsh.compatibility` 现在以 `|| 0.2.1-alpha.1 || >=0.1.7-alpha.1` 收尾——总括不设上界。从 `0.1.7-rc.1` 起,peer 范围没点名当前 release 的插件会被整个禁用,而一条写到头的范围等于在一款还能继续工作的插件前面砌墙:不设上界的范围会把未来的 0.2.x、0.3.x 构建交给最近的一份已核对事实,并在日志里写清它离 `exact` 有多远;猜错的最坏代价是某个滑块不再淡出它已认不出的表面。装到新宿主仍要重启 `dsh web`——peer 检查发生在 profile 组装时。
|
|
100
|
+
- **接管输入位的那几张卡片现在跟着「输入模糊」磨砂了**:审批、计划回顾与问题卡渲染在 `[data-composer-card]` 的*旁边*,却填的是同一个 `--dsw-specific-input-major`——于是它们会随输入透明度淡出,模糊滑块却对它们无事可做,正是最该看清的那张卡直接压在壁纸上。现在它们拿到输入胶囊同款 `::before` 衬底,并且和胶囊一样只在模糊值非零时挂上,零值时插件不额外制造层叠上下文;答案输入框一并接进输入组的描边与占位符绑定。三张卡的锚点(`[data-approval-key]` / `[data-plan-review-key]` / `[data-question-key]`)从 `0.1.5-rc.2` 到 `0.2.1-alpha.1` 没有变过,所以这条绑定是全范围的事实,放在共享层而不是某个版本目录里。
|
|
101
|
+
- **删掉 `invariant` 伴生入口**(`lib/invariant.js`、它的 `exports` 条目、它的 `@deepseek-ai/dsh-invariants` peer):从来没有任何一行装载它,而 `0.2.1-alpha.1` 已把这个包从宿主里移除。
|
|
102
|
+
- **设置页那份样式表补上了其它表都有的插件标记**:到 rc.2 为止,宿主的模块系统会把当时*所有*未打标的 `<style>` 判给正在装配的那个插件,并在该插件失败时把它们删掉;`0.2.1-alpha.1` 把认领范围收窄到工厂自己新增的那些。打上标记后,两种宿主都动不了它。
|
|
103
|
+
|
|
94
104
|
### v0.3.3(菜单按版本交出绘制事实,支持 DSH 0.2.0-rc.1)
|
|
95
105
|
|
|
96
106
|
- **`0.1.7-rc.2` 上「卡片」「顶栏选项」两组滑块对菜单又有效了**:那个构建把菜单的底色与磨砂移到子层,并把 `--dsw-specific-menu` 改成别名,插件一直在写的令牌在菜单上再没有别的读者。「菜单从哪些令牌取色、磨砂由哪一层承担」现在由每个版本目录各自交出,公共代码里不再留假设。
|
|
@@ -99,16 +109,6 @@
|
|
|
99
109
|
- **插件页首屏的加载骨架屏**拿到与它所代替的那张卡片列表相同的磨砂底。
|
|
100
110
|
- 装到 0.2.0 宿主上要重启 `dsh web`:从 `0.1.7-rc.1` 起宿主按 peer 范围决定插件能不能加载,没被点名的版本在导入任何模块之前就被整行禁用。
|
|
101
111
|
|
|
102
|
-
### v0.3.2(产出物表面全量绑定,0.1.7-rc.2 恢复加载)
|
|
103
|
-
|
|
104
|
-
- **产出物滑块覆盖 0.1.7 渲染的每一件产物**:工具详情卡片、事件行、diff 块、变更文件卡片、内联 `code` 磨砂,以及悬浮预览窗——它把卡片 portal 到 `<body>`,所以此前不归任何滑块管。
|
|
105
|
-
- **代码卡片的头部横幅恢复跟随主题**,不再是一块无视滑块的近白条。
|
|
106
|
-
- **dsh-better-sidebar 的工作台改由产出物滑块接管**;面板行现在只代表宿主自己的右侧栏。
|
|
107
|
-
- **一张产物卡片不再同时听两个滑块**:它的根节点改读产出物自己的原始层级令牌。
|
|
108
|
-
- **输入框模糊回到 0 之后不再残留层叠上下文。**
|
|
109
|
-
- **antd 的确认弹窗不再被当成设置面板**:它原先继承了设置表面色、磨砂与描边分组,因为旧选择器只认那三个 antd 同样会发出的 ARIA 属性。
|
|
110
|
-
- **`0.1.7-rc.2` 恢复加载,其后的 0.1.x 一并放行**:`engines.dsh`、七个 `@deepseek-ai/dsh-*` peer 与 `dsh.compatibility` 都以 `|| 0.1.7-rc.2 || >=0.1.7-alpha.1 <0.2.0-alpha.0` 收尾——只写 `>=0.1.7` 一个预发布构建都匹配不到。
|
|
111
|
-
|
|
112
112
|
## 安装
|
|
113
113
|
|
|
114
114
|
### 方式一:npm 安装(推荐)
|
|
@@ -151,14 +151,14 @@ pnpm dsh web
|
|
|
151
151
|
|
|
152
152
|
## 兼容性
|
|
153
153
|
|
|
154
|
-
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness) 0.1.5-rc.2 ~
|
|
155
|
-
- **版本适配隔离**:release 由 Node 半侧从进程自身那份 `@deepseek-ai/dsh/package.json` 读出(客户端上下文不暴露版本;`ctx.profileContext.installAnchor` 指不到时退回启动器的磁盘布局),经 `read` RPC 下发后只由前置适配层路由——`src/host-compat/` 负责探测与渠道归类,`src/client/host-compat/versions/`
|
|
154
|
+
- **[`dsh web`](https://github.com/deepseek-ai/deepseek-harness) 0.1.5-rc.2 ~ `0.2.1-alpha.1`,其上所有版本一并放行** — `engines.dsh`、六个受门禁的 `@deepseek-ai/dsh-*` 的 `peerDependencies` 与 `dsh.compatibility.dsh` 先逐一列出本插件核对过的 `0.1.5-rc` 与 `0.1.6-alpha` 各构建——总括从它们之上开始,所以这些必须写全——继续点名此后逐个 diff 过的版本(`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-alpha.1`)作为记录,最后以不设上界的 `>=0.1.7-alpha.1` 收尾,让 0.1.7、0.2 及其后的每一个 release 都能加载。不设上界是有意选的:从 `0.1.7-rc.1` 起宿主强制的正是这份 peer 列表——范围没写到的版本会在导入任何模块之前被整行禁用——一条写到头的范围等于在一款还能正常工作的插件前面砌墙。没见过的 release 会取最近的一份事实,并在日志里写清它离 `exact` 有多远;一份过期事实最坏的代价是某个滑块不再淡出宿主已经搬走的那个表面,而一道失败关闭的版本检查代价是整个插件。`dsh.compatibility.dshReleases` 记录哪些构建核对过、怎么核对的:`0.1.7-rc.1` / `0.1.7-rc.2`、`0.2.0-rc.1` / `0.2.0-rc.2` 与 `0.2.1-alpha.1` 以逐包比对 tag 核对,它们之前的构建是实测过的。这道门禁也意味着安装或更新插件后仍需重启 `dsh web`——检查发生在 profile 组装时,而不是插件更新时——但不设上界的总括,正让已经升到更新宿主的机器不再需要先等插件发版(或手工授予精确版本豁免 `dsh plugin allow-version`)。宿主版本在运行时由 Node 半侧解析,依赖特定宿主版本渠道的功能(右侧栏面板模糊、官方侧栏「主题」卡片)只在对应宿主结构存在时启用,其余功能在整个范围内表现一致。
|
|
155
|
+
- **版本适配隔离**:release 由 Node 半侧从进程自身那份 `@deepseek-ai/dsh/package.json` 读出(客户端上下文不暴露版本;`ctx.profileContext.installAnchor` 指不到时退回启动器的磁盘布局),经 `read` RPC 下发后只由前置适配层路由——`src/host-compat/` 负责探测与渠道归类,`src/client/host-compat/versions/` 下**每个事实集合一个目录**(`v0-1-5-rc-2-3` / `v0-1-6-alpha-1-2` / `v0-1-7-alpha-1-2-rc-1` / `v0-1-7-rc-2` / `v0-2-0-rc-1` / `v0-2-0-rc-2` / `v0-2-1-alpha-1` / `unknown`),各自描述该版本的面板力学、头部槽位键、插件页形状,以及菜单的底色与磨砂落在哪一层。目录按它覆盖的事实命名,不按版本号的形状:`0.2.0-rc.1` 与 `0.2.0-rc.2` 同属一个预发布渠道,但 rc.2 改了吸顶菜单分组标题取色的令牌,于是这条补丁行上并着两个目录,较新的那个按开启它的那个构建命名。底码只向适配层提问(引导页表面归谁、模糊挂在哪一层、菜单该重写哪些令牌),不比较版本字符串。同一补丁行内的其它构建(`0.1.6-alpha.4` 之于核对基准 `0.1.6-alpha.2`)用该行的档位;整条补丁行都不在已核对范围内才收边取最近的一档并写日志——`0.2.1-alpha.1` 之上的每一个 release 如今就是靠这一档加载的。只有解析不到 release 时归入 `unknown`,回退到按 DOM 形状探测(`:has()` 双臂)而不是猜一个版本;适配新宿主 = 新增一个版本目录并在注册表登记。
|
|
156
156
|
- **[DSHA](https://github.com/DSH-APP/DSHA)** — DeepSeek Harness 安卓启动器(免 ROOT、免 Termux)。其包内 dsh 为 `0.1.5-rc.2`,落在兼容范围内;移动端界面由 `dsh-web-mobile` 提供。
|
|
157
157
|
- **[deepseek-harness-desktop](https://github.com/anywhere-labs/deepseek-harness-desktop)** — 支持
|
|
158
158
|
|
|
159
159
|
## 权限、副作用与边界
|
|
160
160
|
|
|
161
|
-
- **接入形态**:官方 Profile Bundle——`package.json` 声明 `dsh.bundle.patch: ./cordis.patch.yml`(loader 插入层),仓库提交可直接使用的预构建运行时制品(`lib/index.js`、`lib/
|
|
161
|
+
- **接入形态**:官方 Profile Bundle——`package.json` 声明 `dsh.bundle.patch: ./cordis.patch.yml`(loader 插入层),仓库提交可直接使用的预构建运行时制品(`lib/index.js`、`lib/client.js`),无安装脚本、无 postinstall、无 native 二进制、安装时不执行任何构建。
|
|
162
162
|
- **文件系统**:服务端仅在 `<dsh 主目录>/.dsh-any-background-data/` 内读写(配置 JSON、壁纸、轮换池、视频、字体),不触碰该目录之外的任何路径;配置写入为原子写(临时文件 + rename)。这些文件落在真实磁盘上,**不受 generation 恢复影响,也不会被其回滚**——清除它们即彻底重置插件。
|
|
163
163
|
- **网络**:仅在用户主动粘贴 http/https 图片或视频网址并点击「应用」时发起一次出站请求下载该资源;除此之外无遥测、无外部服务调用。
|
|
164
164
|
- **Shell / native**:无。不使用 `child_process`、不加载 native 模块、不运行动态下载的二进制。
|
package/lib/client.js
CHANGED
|
@@ -999,7 +999,9 @@ window.__ModuleLoader__.load({
|
|
|
999
999
|
* a row then reports `exact` instead of `line`, and no new folder appears.
|
|
1000
1000
|
* Rows may ALSO share a patch line while carrying different channels, which is
|
|
1001
1001
|
* how a line says "the facts changed halfway through it" (`0.1.7-alpha.2` and
|
|
1002
|
-
* `0.1.7-rc.1` speak for `0.1.7-alpha`, `0.1.7-rc.2` opens `0.1.7-rc
|
|
1002
|
+
* `0.1.7-rc.1` speak for `0.1.7-alpha`, `0.1.7-rc.2` opens `0.1.7-rc`, and
|
|
1003
|
+
* `0.2.0-rc.2` opens a second answer on a line that had one — see the note on
|
|
1004
|
+
* `HostChannel` for why that row is keyed to the build).
|
|
1003
1005
|
* Adding an ADAPTER means adding a channel plus a folder in
|
|
1004
1006
|
* `client/host-compat/versions/`. */
|
|
1005
1007
|
const SUPPORTED_RELEASES = [
|
|
@@ -1026,6 +1028,14 @@ window.__ModuleLoader__.load({
|
|
|
1026
1028
|
{
|
|
1027
1029
|
channel: "0.2.0-rc",
|
|
1028
1030
|
release: "0.2.0-rc.1"
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
channel: "0.2.0-rc.2",
|
|
1034
|
+
release: "0.2.0-rc.2"
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
channel: "0.2.1-alpha",
|
|
1038
|
+
release: "0.2.1-alpha.1"
|
|
1029
1039
|
}
|
|
1030
1040
|
];
|
|
1031
1041
|
const UNKNOWN_HOST_INFO = {
|
|
@@ -1148,6 +1158,23 @@ window.__ModuleLoader__.load({
|
|
|
1148
1158
|
* PRODUCED slider (0.3.2): a conversation artifact that happens to open in a
|
|
1149
1159
|
* panel, not a page column — so it fades and frosts with the produced surfaces. */
|
|
1150
1160
|
const BETTER_SIDEBAR_PANEL = "[data-dsh-bottom-panel]";
|
|
1161
|
+
/** The cards that take the composer seat away from the input bar: approval
|
|
1162
|
+
* (`ui-approval`), plan review and the question composer (`ui-user-questions`).
|
|
1163
|
+
* They are siblings of `[data-composer-card]`, not its children — the seat
|
|
1164
|
+
* renders the elected takeover beside the fallback bar (verified per tag in
|
|
1165
|
+
* `ConversationContent.tsx` and both packages' `slots.inject('conversation.composer')`)
|
|
1166
|
+
* — and each paints the capsule's own `--dsw-specific-input-major`, from
|
|
1167
|
+
* `dsh-v0.1.5-rc.2` through `dsh-v0.2.1-alpha.1`.
|
|
1168
|
+
*
|
|
1169
|
+
* The marker sits on the wrapper, the fill on its child card:
|
|
1170
|
+
* `[data-approval-key] > div`, `[data-plan-review-key] > section`,
|
|
1171
|
+
* `[data-question-key] > section`. */
|
|
1172
|
+
const COMPOSER_TAKEOVER_CARD = "[data-approval-key]>div,[data-plan-review-key]>section,[data-question-key]>section";
|
|
1173
|
+
/** The takeover cards' free-text answer field — only the question composer has
|
|
1174
|
+
* one (approval and plan review are button rows). Form controls do not inherit
|
|
1175
|
+
* text properties, so the stroke group needs the editor spelled out; appending
|
|
1176
|
+
* a suffix to `COMPOSER_TAKEOVER_CARD` would bind to its LAST arm only. */
|
|
1177
|
+
const COMPOSER_TAKEOVER_EDITOR = "[data-question-key]>section textarea";
|
|
1151
1178
|
/** Every surface the panel opacity slider owns — the host's own right Sidebar.
|
|
1152
1179
|
* Layout-neutral token re-scope. (The dsh-better-sidebar workbench used to be
|
|
1153
1180
|
* listed here; it moved to the produced group, see `PRODUCED_RULE`.) */
|
|
@@ -1254,6 +1281,23 @@ window.__ModuleLoader__.load({
|
|
|
1254
1281
|
* `ScheduleCatalogAction`, the subagent lineage, `TeamAction`, `CordisPanel`,
|
|
1255
1282
|
* `MenuSurface` itself) — re-declaring the token reaches the frost whoever ends up
|
|
1256
1283
|
* applying it, and does not depend on any element being the painting element.
|
|
1284
|
+
*
|
|
1285
|
+
* `dsh-v0.2.0-rc.2` (npm `latest`) and `dsh-v0.2.1-alpha.1`: the layer and the frost
|
|
1286
|
+
* are the same files — `MenuSurface.tsx` and `MenuSurface.module.css` are
|
|
1287
|
+
* byte-identical to rc.1, and every `--dsw-menu-backdrop-filter` consumer is too —
|
|
1288
|
+
* but the sticky GROUP HEADING inside those menus changed owner. Through rc.1 the
|
|
1289
|
+
* only grouped menu was `ModelSelect`, whose own stylesheet painted that heading
|
|
1290
|
+
* from the menu token (`ModelSelect.module.css` `.groupTitle{position:sticky;
|
|
1291
|
+
* background:var(--dsw-specific-menu)}`), so the card slider drove it and a picked
|
|
1292
|
+
* wallpaper color tinted it. At rc.2 the rule is deleted and both grouped popups
|
|
1293
|
+
* (`ModelSelect`, `PopupSelectView`) render the new `ui-primitives/MenuGroup.tsx`,
|
|
1294
|
+
* whose heading stays transparent until `data-stuck` and then paints
|
|
1295
|
+
* `--dsw-alias-menu-group-header-fill` (light `rgba(248,249,250,.94)`, dark
|
|
1296
|
+
* `rgba(48,49,54,.94)`, declared in the `body` blocks of `design-platform.css`).
|
|
1297
|
+
* The surface did not go away — its token was RENAMED, and `ModelSelect.module.css`
|
|
1298
|
+
* is the one `--dsw-specific-menu` consumer that disappears at rc.2. Left alone, it
|
|
1299
|
+
* is the single menu element the fade no longer reaches: an untinted, near-opaque
|
|
1300
|
+
* band sitting on top of every row in the list the moment that list scrolls.
|
|
1257
1301
|
*/
|
|
1258
1302
|
/** The answer for the releases whose menus paint themselves: `0.1.5-rc`,
|
|
1259
1303
|
* `0.1.6-alpha`, `0.1.7-alpha`. The unresolved bucket is its own variant below. */
|
|
@@ -1272,6 +1316,28 @@ window.__ModuleLoader__.load({
|
|
|
1272
1316
|
fillTokens: [MENU_FILL_TOKEN, "--dsw-menu-surface-fill"],
|
|
1273
1317
|
frostDecl: (value) => `--dsw-menu-backdrop-filter:${value}`
|
|
1274
1318
|
};
|
|
1319
|
+
/** The fill the sticky group heading of a shared menu paints from — `MenuGroup`'s
|
|
1320
|
+
* own contribution to the menu's look, first emitted at `0.2.0-rc.2`. */
|
|
1321
|
+
const MENU_GROUP_HEADER_FILL_TOKEN = "--dsw-alias-menu-group-header-fill";
|
|
1322
|
+
/** The answer for `0.2.0-rc` from `0.2.0-rc.2` and for `0.2.1-alpha`: everything
|
|
1323
|
+
* `LAYERED_MENU_SURFACE` says, plus the heading `MenuGroup` renamed.
|
|
1324
|
+
*
|
|
1325
|
+
* Riding `fillTokens` rather than being left out is a decision with evidence on
|
|
1326
|
+
* both sides, so state it: the host's README calls this token "independent of the
|
|
1327
|
+
* menu material" and gives it a 94% fill while the surface layer sits at 58%/45%.
|
|
1328
|
+
* That is a choice about an OPAQUE menu. This plugin's whole product is a menu the
|
|
1329
|
+
* wallpaper shows through, and one release earlier the very same heading read the
|
|
1330
|
+
* very same token as the card it sits on — so following it keeps rc.1's contract
|
|
1331
|
+
* ("the card slider owns every layer of a menu, in the picked color") instead of
|
|
1332
|
+
* leaving an untinted stock band inside a tinted, faded card.
|
|
1333
|
+
* Compositing is on its side too: the heading stacks on the surface layer it sticks
|
|
1334
|
+
* to, so a heading and a card at the same alpha still read as a band roughly
|
|
1335
|
+
* twice-as-dense as the card (1-(1-a)²) — occluding, at the slider's level, exactly
|
|
1336
|
+
* as it did when both came from one token. */
|
|
1337
|
+
const LAYERED_MENU_SURFACE_WITH_GROUP_HEADER = {
|
|
1338
|
+
fillTokens: [...LAYERED_MENU_SURFACE.fillTokens, MENU_GROUP_HEADER_FILL_TOKEN],
|
|
1339
|
+
frostDecl: LAYERED_MENU_SURFACE.frostDecl
|
|
1340
|
+
};
|
|
1275
1341
|
/** The answer when the release could not be resolved, and neither of the two
|
|
1276
1342
|
* verified shapes can be asserted. Each half is chosen so that being on the
|
|
1277
1343
|
* wrong line costs an inert declaration rather than a wrong pixel:
|
|
@@ -1294,7 +1360,7 @@ window.__ModuleLoader__.load({
|
|
|
1294
1360
|
};
|
|
1295
1361
|
/** Session-header slot anchors present on EVERY release in range. The slot
|
|
1296
1362
|
* renderer stamps `data-slot="<key>"` unconditionally (`ui-renderer/scoped-slots.tsx`),
|
|
1297
|
-
* and all five keys are registered from 0.1.5-rc.2 through 0.2.
|
|
1363
|
+
* and all five keys are registered from 0.1.5-rc.2 through 0.2.1-alpha.1 —
|
|
1298
1364
|
* verified per tag. Adapters append the keys their own release adds. */
|
|
1299
1365
|
const BASE_HEADER_SLOT_KEYS = [
|
|
1300
1366
|
"conversation.session.header",
|
|
@@ -1337,18 +1403,18 @@ window.__ModuleLoader__.load({
|
|
|
1337
1403
|
* @module
|
|
1338
1404
|
*/
|
|
1339
1405
|
/** The wrapper carries the slide transform on this line, so it carries the blur. */
|
|
1340
|
-
function panelFragments$
|
|
1406
|
+
function panelFragments$7() {
|
|
1341
1407
|
return {
|
|
1342
1408
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1343
1409
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1344
1410
|
};
|
|
1345
1411
|
}
|
|
1346
|
-
function createAdapter$
|
|
1412
|
+
function createAdapter$7(host) {
|
|
1347
1413
|
return {
|
|
1348
1414
|
id: "0.1.5-rc.2/rc.3",
|
|
1349
1415
|
channel: "0.1.5-rc",
|
|
1350
1416
|
host,
|
|
1351
|
-
panelFragments: panelFragments$
|
|
1417
|
+
panelFragments: panelFragments$7,
|
|
1352
1418
|
pluginPageRule: "",
|
|
1353
1419
|
menus: LEGACY_MENU_SURFACE,
|
|
1354
1420
|
surface: {
|
|
@@ -1418,18 +1484,18 @@ window.__ModuleLoader__.load({
|
|
|
1418
1484
|
const m = /^alpha\.(\d+)$/.exec(pre);
|
|
1419
1485
|
return m === null || Number(m[1]) >= 2;
|
|
1420
1486
|
}
|
|
1421
|
-
function panelFragments$
|
|
1487
|
+
function panelFragments$6() {
|
|
1422
1488
|
return {
|
|
1423
1489
|
promotion: `${PANEL_WRAPPER}{position:fixed!important;z-index:26!important}${PANEL_FULLSCREEN}{z-index:40!important}`,
|
|
1424
1490
|
blur: panelBlurRule(PANEL_WRAPPER)
|
|
1425
1491
|
};
|
|
1426
1492
|
}
|
|
1427
|
-
function createAdapter$
|
|
1493
|
+
function createAdapter$6(host) {
|
|
1428
1494
|
return {
|
|
1429
1495
|
id: "0.1.6-alpha.1/alpha.2",
|
|
1430
1496
|
channel: "0.1.6-alpha",
|
|
1431
1497
|
host,
|
|
1432
|
-
panelFragments: panelFragments$
|
|
1498
|
+
panelFragments: panelFragments$6,
|
|
1433
1499
|
pluginPageRule: hasPluginManagerPage(host.version) ? PLUGIN_PAGE_FROST_RULE : "",
|
|
1434
1500
|
menus: LEGACY_MENU_SURFACE,
|
|
1435
1501
|
surface: {
|
|
@@ -1514,18 +1580,18 @@ window.__ModuleLoader__.load({
|
|
|
1514
1580
|
*
|
|
1515
1581
|
* @module
|
|
1516
1582
|
*/
|
|
1517
|
-
function panelFragments$
|
|
1583
|
+
function panelFragments$5() {
|
|
1518
1584
|
return {
|
|
1519
1585
|
promotion: "",
|
|
1520
1586
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1521
1587
|
};
|
|
1522
1588
|
}
|
|
1523
|
-
function createAdapter$
|
|
1589
|
+
function createAdapter$5(host) {
|
|
1524
1590
|
return {
|
|
1525
1591
|
id: "0.1.7-alpha.1/alpha.2/rc.1",
|
|
1526
1592
|
channel: "0.1.7-alpha",
|
|
1527
1593
|
host,
|
|
1528
|
-
panelFragments: panelFragments$
|
|
1594
|
+
panelFragments: panelFragments$5,
|
|
1529
1595
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1530
1596
|
menus: LEGACY_MENU_SURFACE,
|
|
1531
1597
|
surface: {
|
|
@@ -1584,18 +1650,18 @@ window.__ModuleLoader__.load({
|
|
|
1584
1650
|
*
|
|
1585
1651
|
* @module
|
|
1586
1652
|
*/
|
|
1587
|
-
function panelFragments$
|
|
1653
|
+
function panelFragments$4() {
|
|
1588
1654
|
return {
|
|
1589
1655
|
promotion: "",
|
|
1590
1656
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1591
1657
|
};
|
|
1592
1658
|
}
|
|
1593
|
-
function createAdapter$
|
|
1659
|
+
function createAdapter$4(host) {
|
|
1594
1660
|
return {
|
|
1595
1661
|
id: "0.1.7-rc.2",
|
|
1596
1662
|
channel: "0.1.7-rc",
|
|
1597
1663
|
host,
|
|
1598
|
-
panelFragments: panelFragments$
|
|
1664
|
+
panelFragments: panelFragments$4,
|
|
1599
1665
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1600
1666
|
menus: LAYERED_MENU_SURFACE,
|
|
1601
1667
|
surface: {
|
|
@@ -1658,18 +1724,18 @@ window.__ModuleLoader__.load({
|
|
|
1658
1724
|
*
|
|
1659
1725
|
* @module
|
|
1660
1726
|
*/
|
|
1661
|
-
function panelFragments$
|
|
1727
|
+
function panelFragments$3() {
|
|
1662
1728
|
return {
|
|
1663
1729
|
promotion: "",
|
|
1664
1730
|
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1665
1731
|
};
|
|
1666
1732
|
}
|
|
1667
|
-
function createAdapter$
|
|
1733
|
+
function createAdapter$3(host) {
|
|
1668
1734
|
return {
|
|
1669
1735
|
id: "0.2.0-rc.1",
|
|
1670
1736
|
channel: "0.2.0-rc",
|
|
1671
1737
|
host,
|
|
1672
|
-
panelFragments: panelFragments$
|
|
1738
|
+
panelFragments: panelFragments$3,
|
|
1673
1739
|
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1674
1740
|
menus: LAYERED_MENU_SURFACE,
|
|
1675
1741
|
surface: {
|
|
@@ -1679,6 +1745,144 @@ window.__ModuleLoader__.load({
|
|
|
1679
1745
|
};
|
|
1680
1746
|
}
|
|
1681
1747
|
//#endregion
|
|
1748
|
+
//#region src/client/host-compat/versions/v0-2-0-rc-2/adapter.ts
|
|
1749
|
+
/**
|
|
1750
|
+
* Adapter for the DSH `0.2.0-rc` line from `0.2.0-rc.2` on, verified at `0.2.0-rc.2`.
|
|
1751
|
+
*
|
|
1752
|
+
* The first case where one patch line AND one prerelease channel carry two
|
|
1753
|
+
* answers, so this folder opens a second channel (see the note on `HostChannel`).
|
|
1754
|
+
* What it took was one renamed token, and it is a menu token, which is the class of
|
|
1755
|
+
* fact this table exists for:
|
|
1756
|
+
*
|
|
1757
|
+
* · `ui-primitives/src/MenuGroup.tsx` + `.module.css` are NEW at rc.2 and the
|
|
1758
|
+
* headings of both grouped popups (`ModelSelect`, `PopupSelectView`) now come
|
|
1759
|
+
* from them. `ModelSelect.module.css` loses `.groupTitle{background:var(
|
|
1760
|
+
* --dsw-specific-menu)}` in the same breath — the sticky heading's paint moved
|
|
1761
|
+
* to `--dsw-alias-menu-group-header-fill`, a token that does not exist before
|
|
1762
|
+
* this tag (`git grep` at `0.1.7-rc.2` and `0.2.0-rc.1`: absent). Hence
|
|
1763
|
+
* `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER` rather than the rc.1 constant: the
|
|
1764
|
+
* old claim set stayed true, it just stopped covering one element.
|
|
1765
|
+
* · the rest of the menu layer is the same code — `MenuSurface.tsx` and
|
|
1766
|
+
* `MenuSurface.module.css` are byte-identical to `0.2.0-rc.1`, and so is every
|
|
1767
|
+
* consumer of `--dsw-menu-backdrop-filter`.
|
|
1768
|
+
*
|
|
1769
|
+
* Also verified at this tag, and NOT a reason for a folder of its own:
|
|
1770
|
+
* · `SidebarRight.module.css` and `ui-dockkit/src/components/TabLayout.tsx` are
|
|
1771
|
+
* unchanged, so the panel is still a stationary frame whose dockkit children
|
|
1772
|
+
* slide (`panelBlurRule(DOCKKIT_SLIDERS)`, no promotion).
|
|
1773
|
+
* · the five `conversation.session.header*` slot keys, and still no `…leading`.
|
|
1774
|
+
* · `PluginManagerPage.tsx` still emits `section[data-plugin-panel]` with the card
|
|
1775
|
+
* `ul` under `[data-plugin-scope]` and `[data-plugin-loading]`.
|
|
1776
|
+
* · `TextShimmer` keeps the rc.1 shape (`data-shimmer`), so the stroke exemption
|
|
1777
|
+
* stands as written.
|
|
1778
|
+
*
|
|
1779
|
+
* What moved that reached this plugin WITHOUT a version branch, because the host
|
|
1780
|
+
* wrote it as a chain with a fallback:
|
|
1781
|
+
* · `TurnTriggerNodeView.module.css` now fills from
|
|
1782
|
+
* `var(--dsw-alias-turn-trigger-bg, var(--dsw-alias-markdown-code-block))` and
|
|
1783
|
+
* hovers with `var(--dsw-alias-turn-trigger-bg-hover, var(--dsw-alias-interactive-bg-hover))`,
|
|
1784
|
+
* both aliases declared in `design-platform.css` at this tag. The produced
|
|
1785
|
+
* slider's arm reads the SAME chain (see `PRODUCED_RULE`), so older hosts take
|
|
1786
|
+
* the fallback and this one takes the new alias — without any release test. That
|
|
1787
|
+
* matters here rather than being pedantry: dark mode repoints the alias at
|
|
1788
|
+
* `--dsw-alias-interactive-bg-hover`, so an arm still mixing on the code-block
|
|
1789
|
+
* token would keep overriding the row with the OLD color and the row would stop
|
|
1790
|
+
* tracking its own hover.
|
|
1791
|
+
*
|
|
1792
|
+
* @module
|
|
1793
|
+
*/
|
|
1794
|
+
function panelFragments$2() {
|
|
1795
|
+
return {
|
|
1796
|
+
promotion: "",
|
|
1797
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1798
|
+
};
|
|
1799
|
+
}
|
|
1800
|
+
function createAdapter$2(host) {
|
|
1801
|
+
return {
|
|
1802
|
+
id: "0.2.0-rc.2",
|
|
1803
|
+
channel: "0.2.0-rc.2",
|
|
1804
|
+
host,
|
|
1805
|
+
panelFragments: panelFragments$2,
|
|
1806
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1807
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1808
|
+
surface: {
|
|
1809
|
+
ownsSidebarGuideSurface: true,
|
|
1810
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1811
|
+
}
|
|
1812
|
+
};
|
|
1813
|
+
}
|
|
1814
|
+
//#endregion
|
|
1815
|
+
//#region src/client/host-compat/versions/v0-2-1-alpha-1/adapter.ts
|
|
1816
|
+
/**
|
|
1817
|
+
* Adapter for the DSH `0.2.1-alpha` line, verified at `0.2.1-alpha.1`.
|
|
1818
|
+
*
|
|
1819
|
+
* A new MINOR line opened with a prerelease, and the answer is the `0.2.0-rc.2`
|
|
1820
|
+
* folder's — which is a statement this file has to earn, because "same as the
|
|
1821
|
+
* release before" is exactly the reasoning that went wrong when `0.1.7-rc.2` moved
|
|
1822
|
+
* the menu paint. Read at the tag instead:
|
|
1823
|
+
* · `ui-theme/src/styles/design-platform.css` is BYTE-IDENTICAL to `0.2.0-rc.2`
|
|
1824
|
+
* (`git diff --numstat` empty), so every token this plugin writes — the menu
|
|
1825
|
+
* pair, the specific-menu alias, the turn-trigger chain — resolves to the same
|
|
1826
|
+
* values.
|
|
1827
|
+
* · `MenuGroup.tsx`, `MenuGroup.module.css`, `MenuSurface.tsx` and
|
|
1828
|
+
* `MenuSurface.module.css` are byte-identical too, and `MenuGroup` is still the
|
|
1829
|
+
* only consumer of `--dsw-alias-menu-group-header-fill`. That is why the menus
|
|
1830
|
+
* here answer with `LAYERED_MENU_SURFACE_WITH_GROUP_HEADER`, the same facts the
|
|
1831
|
+
* rc.2 folder checked, and not by re-typing them.
|
|
1832
|
+
* · `ui-sidebar-right/shell/SidebarRight.module.css` and
|
|
1833
|
+
* `ui-dockkit/src/components/TabLayout.tsx` unchanged (only `.tsx` service
|
|
1834
|
+
* wiring moved), so the panel stays a stationary frame with sliding dockkit
|
|
1835
|
+
* children and no promotion.
|
|
1836
|
+
* · the five `conversation.session.header*` slot keys, still no `…leading`.
|
|
1837
|
+
* · `PluginManagerPage.tsx` still emits the three anchors of the card list.
|
|
1838
|
+
* · `TextShimmer` still marks its root `data-shimmer`, so the stroke exemption
|
|
1839
|
+
* written for rc.1 stands.
|
|
1840
|
+
*
|
|
1841
|
+
* What did move, and why none of it needs a fact from this folder:
|
|
1842
|
+
*
|
|
1843
|
+
* 1. `ui-layout/AppFrame` gains a second grid row, `div.bottomRow[data-shell-bottom]`
|
|
1844
|
+
* holding the new `shell.bottom` slot, and it paints `--dsw-alias-bg-base` —
|
|
1845
|
+
* the main-background token, which `applyCustomTokensNow` already re-emits on
|
|
1846
|
+
* `body`, so the strip follows the main-bg slider with no new binding. The row
|
|
1847
|
+
* is `min-height:0` and empty unless a plugin fills the slot, so an untouched
|
|
1848
|
+
* install shows nothing. It also sits AFTER `RightbarColumn` in the frame's
|
|
1849
|
+
* children, which is the side `discoverParts()` does not count from: it anchors
|
|
1850
|
+
* on `data-rightbar-col` and reads `rightIdx-2` / `rightIdx-1`, so the sidebar
|
|
1851
|
+
* and center column are still the same two children.
|
|
1852
|
+
* 2. `ui-primitives/InlineEditor.module.css` is the new home of the inline editor's
|
|
1853
|
+
* `.editor{background:var(--dsw-alias-bg-base)}`. Same token, so the same slider
|
|
1854
|
+
* reaches it wherever the component moved to.
|
|
1855
|
+
* 3. `modules/system.ts` narrowed `claimStyles` to the tags a factory itself added
|
|
1856
|
+
* (see `ensureUiCss` for what that changed about our own sheet).
|
|
1857
|
+
* 4. `@deepseek-ai/dsh-invariants` is DELETED at this tag — `git ls-tree` shows no
|
|
1858
|
+
* `packages/runtime-diagnostics/invariants`, and the boot/app plugin loader never
|
|
1859
|
+
* looked for a plugin's `invariant` export. This plugin's no-op companion was
|
|
1860
|
+
* therefore already dead weight here, and it goes rather than claiming a peer
|
|
1861
|
+
* version for a package the host no longer ships.
|
|
1862
|
+
*
|
|
1863
|
+
* @module
|
|
1864
|
+
*/
|
|
1865
|
+
function panelFragments$1() {
|
|
1866
|
+
return {
|
|
1867
|
+
promotion: "",
|
|
1868
|
+
blur: panelBlurRule(DOCKKIT_SLIDERS)
|
|
1869
|
+
};
|
|
1870
|
+
}
|
|
1871
|
+
function createAdapter$1(host) {
|
|
1872
|
+
return {
|
|
1873
|
+
id: "0.2.1-alpha.1",
|
|
1874
|
+
channel: "0.2.1-alpha",
|
|
1875
|
+
host,
|
|
1876
|
+
panelFragments: panelFragments$1,
|
|
1877
|
+
pluginPageRule: PLUGIN_PAGE_FROST_RULE,
|
|
1878
|
+
menus: LAYERED_MENU_SURFACE_WITH_GROUP_HEADER,
|
|
1879
|
+
surface: {
|
|
1880
|
+
ownsSidebarGuideSurface: true,
|
|
1881
|
+
headerSlotKeys: BASE_HEADER_SLOT_KEYS
|
|
1882
|
+
}
|
|
1883
|
+
};
|
|
1884
|
+
}
|
|
1885
|
+
//#endregion
|
|
1682
1886
|
//#region src/client/host-compat/versions/unknown/adapter.ts
|
|
1683
1887
|
/**
|
|
1684
1888
|
* Stand-in for "we could not resolve the release".
|
|
@@ -1723,11 +1927,13 @@ window.__ModuleLoader__.load({
|
|
|
1723
1927
|
//#endregion
|
|
1724
1928
|
//#region src/client/host-compat/versions/registry.ts
|
|
1725
1929
|
const ADAPTERS = {
|
|
1726
|
-
"0.1.5-rc": createAdapter$
|
|
1727
|
-
"0.1.6-alpha": createAdapter$
|
|
1728
|
-
"0.1.7-alpha": createAdapter$
|
|
1729
|
-
"0.1.7-rc": createAdapter$
|
|
1730
|
-
"0.2.0-rc": createAdapter$
|
|
1930
|
+
"0.1.5-rc": createAdapter$7,
|
|
1931
|
+
"0.1.6-alpha": createAdapter$6,
|
|
1932
|
+
"0.1.7-alpha": createAdapter$5,
|
|
1933
|
+
"0.1.7-rc": createAdapter$4,
|
|
1934
|
+
"0.2.0-rc": createAdapter$3,
|
|
1935
|
+
"0.2.0-rc.2": createAdapter$2,
|
|
1936
|
+
"0.2.1-alpha": createAdapter$1,
|
|
1731
1937
|
unknown: createAdapter
|
|
1732
1938
|
};
|
|
1733
1939
|
/** Pick the adapter for a resolved host. `host.channel` is already narrowed to
|
|
@@ -3723,7 +3929,7 @@ window.__ModuleLoader__.load({
|
|
|
3723
3929
|
}
|
|
3724
3930
|
const INPUT_FROST_CLASS = "dab-input-frost";
|
|
3725
3931
|
function inputBlurRule() {
|
|
3726
|
-
return `.${INPUT_FROST_CLASS} [data-composer-card]{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} [data-composer-card]::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{${menuFillDecls("var(--dsh-any-op-menu-cordis)!important")}}`;
|
|
3932
|
+
return `.${INPUT_FROST_CLASS} [data-composer-card]{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} [data-composer-card]::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}.${INPUT_FROST_CLASS} ${COMPOSER_TAKEOVER_CARD}{position:relative;isolation:isolate}.${INPUT_FROST_CLASS} ${COMPOSER_TAKEOVER_CARD}::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{-webkit-backdrop-filter:var(--dsh-any-input-blur,none);backdrop-filter:var(--dsh-any-input-blur,none)}[data-cordis-panel]{${menuFillDecls("var(--dsh-any-op-menu-cordis)!important")}}`;
|
|
3727
3933
|
}
|
|
3728
3934
|
function applyInputBlur(px) {
|
|
3729
3935
|
const root = document.documentElement;
|
|
@@ -3851,11 +4057,11 @@ window.__ModuleLoader__.load({
|
|
|
3851
4057
|
document.head.appendChild(exemptStyleEl);
|
|
3852
4058
|
return exemptStyleEl;
|
|
3853
4059
|
}
|
|
3854
|
-
const PRODUCED_RULE = `[data-code-block-content] pre,[data-code-block-banner],[data-composer-chip],[data-changed-files],[data-terminal],[data-read],[data-diff],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[data-inspect],[data-turn-trigger],[style*="--dsh-hover-preview-fade"],:not(pre)>code{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}[data-markdown-variant="compact"] :not(pre)>code{-webkit-backdrop-filter:none;backdrop-filter:none}${BETTER_SIDEBAR_PANEL}{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}${BETTER_SIDEBAR_PANEL}{--dsw-alias-bg-base:var(--dsh-any-prod-panel-bg-base);--dsw-alias-bg-layer-1:var(--dsh-any-prod-panel-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-prod-panel-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-prod-panel-layer-3)}@supports (background:color-mix(in srgb,red 50%,transparent)){.md-code-block{background:transparent!important}.md-code-block>div{background-color:transparent!important}.md-code-block [data-code-block-content] pre{background-color:color-mix(in srgb,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}.md-code-block [data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsw-alias-markdown-code-block-banner,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent))) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-content]{--shiki-background:color-mix(in srgb,var(--dsw-alias-markdown-code-block,var(--dsl-code-block-background,transparent)) var(--dsh-any-prod-pct,100%),transparent)}:not(pre)>code{background-color:color-mix(in srgb,var(--dsw-alias-markdown-inline-code,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-composer-chip]>*{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal] button{background-color:transparent!important}[data-read],[data-diff]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-read]>div:first-child:not([data-code-block-banner]),[data-diff]>div:first-child:not([data-code-block-banner]){background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block-banner,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-context-injection-body]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-inspect],[data-turn-trigger]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]:hover{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-changed-files]>button:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child:hover{background-color:color-mix(in srgb,var(--changes-hover,var(--changes-fill,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child>span:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"]{background-color:color-mix(in srgb,var(--dsw-hovercard-bg,#2c2c2e) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"][class*="_preview"]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-search]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-web]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[class*="_ioCard"]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}}`;
|
|
4060
|
+
const PRODUCED_RULE = `[data-code-block-content] pre,[data-code-block-banner],[data-composer-chip],[data-changed-files],[data-terminal],[data-read],[data-diff],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[data-inspect],[data-turn-trigger],[style*="--dsh-hover-preview-fade"],:not(pre)>code{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}[data-markdown-variant="compact"] :not(pre)>code{-webkit-backdrop-filter:none;backdrop-filter:none}${BETTER_SIDEBAR_PANEL}{-webkit-backdrop-filter:var(--dsh-any-blur-prod,none);backdrop-filter:var(--dsh-any-blur-prod,none)}${BETTER_SIDEBAR_PANEL}{--dsw-alias-bg-base:var(--dsh-any-prod-panel-bg-base);--dsw-alias-bg-layer-1:var(--dsh-any-prod-panel-layer-1);--dsw-alias-bg-layer-2:var(--dsh-any-prod-panel-layer-2);--dsw-alias-bg-layer-3:var(--dsh-any-prod-panel-layer-3)}@supports (background:color-mix(in srgb,red 50%,transparent)){.md-code-block{background:transparent!important}.md-code-block>div{background-color:transparent!important}.md-code-block [data-code-block-content] pre{background-color:color-mix(in srgb,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}.md-code-block [data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsw-alias-markdown-code-block-banner,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-banner]{background-color:color-mix(in srgb,var(--dsl-code-block-banner-background-color,var(--dsl-code-block-background,var(--dsw-alias-markdown-code-block,transparent))) var(--dsh-any-prod-pct,100%),transparent)!important}[data-code-block-content]{--shiki-background:color-mix(in srgb,var(--dsw-alias-markdown-code-block,var(--dsl-code-block-background,transparent)) var(--dsh-any-prod-pct,100%),transparent)}:not(pre)>code{background-color:color-mix(in srgb,var(--dsw-alias-markdown-inline-code,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-composer-chip]>*{background-color:color-mix(in srgb,var(--dsw-alias-interactive-bg-hover,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-terminal] button{background-color:transparent!important}[data-read],[data-diff]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-read]>div:first-child:not([data-code-block-banner]),[data-diff]>div:first-child:not([data-code-block-banner]){background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block-banner,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-context-injection-body]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-inspect]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]{background-color:color-mix(in srgb,var(--dsw-alias-turn-trigger-bg,var(--dsw-alias-markdown-code-block,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-turn-trigger]:hover{background-color:color-mix(in srgb,var(--dsw-alias-turn-trigger-bg-hover,var(--dsw-alias-interactive-bg-hover,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-changed-files]>button:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child:hover{background-color:color-mix(in srgb,var(--changes-hover,var(--changes-fill,transparent)) var(--dsh-any-prod-pct,100%),transparent)!important}[data-changed-files]>button:first-child>span:first-child{background-color:color-mix(in srgb,var(--changes-fill,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"]{background-color:color-mix(in srgb,var(--dsw-hovercard-bg,#2c2c2e) var(--dsh-any-prod-pct,100%),transparent)!important}[style*="--dsh-hover-preview-fade"][class*="_preview"]{background-color:var(--dsh-any-prod-layer-1,var(--dsw-alias-bg-layer-1,transparent))!important}[data-search]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[data-web]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}[class*="_ioCard"]{background-color:color-mix(in srgb,var(--dsw-alias-markdown-code-block,transparent) var(--dsh-any-prod-pct,100%),transparent)!important}}`;
|
|
3855
4061
|
const STROKE_RULE = [
|
|
3856
4062
|
`${SETTINGS_PANEL_SEL}{-webkit-text-stroke:var(--dsh-any-stroke-settings-w,0px) var(--dsh-any-stroke-settings-c,transparent);paint-order:stroke fill}`,
|
|
3857
4063
|
"[role=\"menu\"]:not([data-dockkit-tab-menu]),[role=\"listbox\"],body>[role=\"tree\"],body>[role=\"dialog\"]:not([aria-modal=\"true\"]){-webkit-text-stroke:var(--dsh-any-stroke-card-w,0px) var(--dsh-any-stroke-card-c,transparent);paint-order:stroke fill}",
|
|
3858
|
-
|
|
4064
|
+
`[data-composer-card],[data-cordis-panel],[data-composer-card] textarea,[data-composer-card] input,[data-composer-card] [contenteditable],[data-cordis-panel] input,[data-cordis-panel] textarea,${COMPOSER_TAKEOVER_CARD},${COMPOSER_TAKEOVER_EDITOR}{-webkit-text-stroke:var(--dsh-any-stroke-input-w,0px) var(--dsh-any-stroke-input-c,transparent);paint-order:stroke fill}`,
|
|
3859
4065
|
`[data-chat-flow]{-webkit-text-stroke:var(--dsh-any-stroke-chat-w,0px) var(--dsh-any-stroke-chat-c,transparent);paint-order:stroke fill}`,
|
|
3860
4066
|
`[data-conversation-composer-overlay]{-webkit-text-stroke:var(--dsh-any-stroke-trajectory-w,0px) var(--dsh-any-stroke-trajectory-c,transparent);paint-order:stroke fill}`,
|
|
3861
4067
|
`[data-code-block-content] pre,[data-code-block-content],[data-code-block-banner],[data-composer-chip],:not(pre)>code,[data-changed-files],[data-terminal],[data-read],[data-diff],[data-inspect],[data-turn-trigger],[data-context-injection-body],[data-search],[data-web],[class*="_ioCard"],[style*="--dsh-hover-preview-fade"],${BETTER_SIDEBAR_PANEL}{-webkit-text-stroke:var(--dsh-any-stroke-produced-w,0px) var(--dsh-any-stroke-produced-c,transparent);paint-order:stroke fill}`,
|
|
@@ -4078,7 +4284,7 @@ window.__ModuleLoader__.load({
|
|
|
4078
4284
|
if (px > 0) document.documentElement.style.setProperty("--dsh-any-blur-panel", `blur(${px}px)`);
|
|
4079
4285
|
else document.documentElement.style.removeProperty("--dsh-any-blur-panel");
|
|
4080
4286
|
}
|
|
4081
|
-
const PLACEHOLDER_RULE =
|
|
4287
|
+
const PLACEHOLDER_RULE = `[data-composer-card] textarea::placeholder,[data-composer-card] input::placeholder,[data-composer-card] [contenteditable]::placeholder,[data-cordis-panel] input::placeholder,[data-cordis-panel] textarea::placeholder,${COMPOSER_TAKEOVER_EDITOR}::placeholder,.dab-input::placeholder,.dab-input textarea::placeholder,.dab-input input::placeholder{color:var(--dsh-any-placeholder,var(--dsw-alias-label-caption,#8a8f98))!important;font-style:italic;opacity:.85}`;
|
|
4082
4288
|
/** Re-scope one surface group's layer tokens onto plugin-owned variables so a
|
|
4083
4289
|
* dedicated slider owns its alpha (the host has no per-surface opacity). The
|
|
4084
4290
|
* settings group additionally retints its dialog surface variable. Always
|
|
@@ -5603,6 +5809,7 @@ window.__ModuleLoader__.load({
|
|
|
5603
5809
|
if (!el) {
|
|
5604
5810
|
el = document.createElement("style");
|
|
5605
5811
|
el.id = CSS_ID;
|
|
5812
|
+
el.dataset.plugin = "dsh-any-background-ui-css";
|
|
5606
5813
|
document.head.appendChild(el);
|
|
5607
5814
|
}
|
|
5608
5815
|
if (el.textContent !== UI_CSS) el.textContent = UI_CSS;
|