DeepSeek Harness Hub
← 返回列表

输入框文字修复BaymaxStudio/dsh-composer-color-fix

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

修复输入框打字看不见字,自动恢复文字显示

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/3 · 已提供中文文档

DeepSeek Harness 编辑器修复:输入的文本变得不可见。仅客户端自禁用 DSH 配置文件包。

综合分
28.6
GitHub 分
28.6
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add BaymaxStudio/dsh-composer-color-fix
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-composer-color-fix

英文 TL;DR — DeepSeek Harness(DSH)0.1.1-rc.x 将其 composer 的  样式设为
color: transparent; -webkit-text-fill-color: transparent,并在相邻的 .backdrop 叠加层中绘制
你实际阅读到的文本。当该叠加层与 textarea 的值失去同步时
(在长时间存活的会话刷新后可稳定复现),你仍能继续输入,但什么都看不见。
这是一个仅客户端侧的 DSH profile bundle,它在运行时检测被绘制为透明的表面,
并强制恢复主题前景色。它有意设计为可自我禁用:一旦上游
发布带有不透明 color 的 composer,该 shim 就完全不执行任何操作,因此你可以
在跨版本升级时一直保留安装。

修复 DSH(DeepSeek Harness)输入框「能打字但看不见字」的问题。

工作原理 / How it works

主要处理路径、异常分支和人工检查点。 / The main processing path, exception branches, and human review points.

症状

在一个聊了较久的会话里:

1. 输入框突然完全无法输入;
2. Cmd+R 刷新后能输入了,但键入的字符不显示——
光标在动、发送按钮会亮、底部状态栏字数在涨、@ 补全下拉也能弹出,
就是看不见字。

新建一个会话却一切正常。所以它是会话状态相关的 bug,不是 DSH 整体坏了。

根因

在 @deepseek-ai/dsh 0.1.1-rc.2 里,composer(InputBar)是一个双层结构:

/* packages/client/ui-conversation/src/client/skeleton/InputBar.module.css /
.input {
position: absolute;
color: transparent;                    / ← 故意透明 /
-webkit-text-fill-color: transparent;  / ← 双保险,也透明 /
caret-color: var(--dsw-alias-state-business-primary);
background: 0 0; border: none; outline: none;
overflow: hidden;
}
.backdrop {
position: absolute;
color: var(--dsw-alias-label-primary);  / ← 你看到的字是这层画的 /
pointer-events: none;
overflow: hidden;
}

- 真正持有 value 的是 ,但故意不可见;
- 你看到的字(含语法高亮、文件 chip、@ 引用)来自同位置的 .backdrop 叠加层;
- 一旦 React 没把某次草稿更新同步进 backdrop,value 进去了、视觉上空了。

这不是任何第三方插件造成的——@deepseek-ai/dsh-client-ui-conversation 的原生设计。

一个佐证:.input 的注释里写着「caret is the textarea's and every visible glyph is the
backdrop's」,作者知道这个耦合,但没给失同步时兜底。

影响范围

| 版本 | 状态 |
| --- | --- |
| 0.1.1-rc.2(npm latest,2026-08-21) | ❌ 有 bug —— 本仓库的目标版本 |
| 0.1.2-alpha.3(npm alpha,2026-08-31) | ✅ 已修:composer 重写为 Lexical contenteditable,color: var(--dsw-alias-label-primary),透明层与 backdrop 全部移除 |
| 更新版本(推测) | ✅ 沿用重写后的实现 |

注意:官方仓库 deepseek-ai/deepseek-harness 的 issue tracker 是关闭的
(has_issues: false),所以这个问题全网没有现成的公开方案,也没有地方提交。

修复思路

本 shim 不猜类名、不改选择器,只做一件事:问浏览器「这块可编辑区域现在是不是被画成全透明了」,是就把主题前景色强行贴回去。

三个设计原则,都是为了让它在 DSH 升级后自动退役而不是崩掉:

1. 运行时探测,不猜类名
textarea[class="_input"] 这类写法依赖 CSS-module 哈希(uV2eYG_),换个构建就废。
这里只调 getComputedStyle() 看 color / -webkit-text-fill-color 的 alpha 是否为 0。

2. 内联 !important 终结特异性军备竞赛
按 CSS Cascade Level 4,作者样式的优先级是:
普通声明 /_shims/ → 软链到 node_modules/
→ 写入 dependencies 和 dsh.profile.bundles → 用 dsh --dump-config 自检(失败自动回滚)。

装完必须重启 DSH web 服务——客户端 bundle 清单一只在服务启动时构建一次:

pkill -f "dsh web"
cd "" && dsh web --no-open

然后在浏览器里 Cmd+Shift+R 硬刷新。

手动安装

SHIM=~/.dsh/profiles/web/_shims/dsh-composer-color-fix
mkdir -p "$SHIM/lib"
cp package.json cordis.patch.yml "$SHIM/"
cp lib/*.js "$SHIM/lib/"
ln -sfn "$SHIM" ~/.dsh/profiles/web/node_modules/dsh-composer-color-fix

再编辑 ~/.dsh/profiles/web/package.json,加两处:

{
"dependencies": {
"dsh-composer-color-fix": "file:/Users//.dsh/profiles/web/_shims/dsh-composer-color-fix"
},
"dsh": {
"profile": {
"bundles": [ "...", "dsh-composer-color-fix" ]   // 追加到末尾
}
}
}

三个必须知道的坑

1. dsh.profile.bundles ≠ dependencies。
ClientModuleRegistry.flush() 只扫 bundles。写进 dependencies 的包不会被装进
__DSH_BOOT__ 清单(DSH 没有 client 插件自动发现机制)。
2. profile bundle 必须声明 dsh.bundle.patch,指向一个 cordis.patch.yml,
否则 loadProfile 直接抛错。
3. HTML 里的 __DSH_BOOT__ 是服务启动时一次性构建的,注册新 bundle 后不重启不会生效。

验证

1) profile 配置能加载
dsh --profile web --dump-config

2) shim 出现在启动清单里
curl -s http://127.0.0.1:3080/ | grep -c "dsh-composer-color-fix"   # 期望 >= 1

3) bundle 能被服务
curl -s -o /dev/null -w "%{http_code}\n" \
http://127.0.0.1:3080/plugins/dsh-composer-color-fix/client.js    # 期望 200

浏览器里 DevTools Console 跑一行看补丁有没有打上:

document.querySelector('textarea').dataset.dshTextFix   // 期望 "1"

打上之后 getComputedStyle(textarea).color 应该是实际颜色(如 rgb(15, 17, 21)),
而不是 rgba(0, 0, 0, 0)。

卸载

./install.sh --uninstall web

或手动三步:删软链 → 从 package.json 的 dependencies 和 dsh.profile.bundles 里去掉条目
→ rm -rf ~/.dsh/profiles/web/_shims/dsh-composer-color-fix,然后重启 DSH。

已知副作用

启用后,textarea 本身的文字会显示出来,而 backdrop 仍在原位置画它的富文本层。
因此在粘贴图片、@ 引用文件产生 chip 的位置,两层会有轻微叠影。
不影响输入与发送——这是「看不见字」和「chip 偶尔叠一下」之间的取舍。

给上游的话

根因不在插件层,而在 InputBar 的双层耦合本身:把「持有 value」和「负责显示」拆到两个元素上,
就必然要承担它们失同步的风险,且失同步时没有降级路径(用户拿到的是一个静默不可用的输入框)。

0.1.2-alpha.3 改成 Lexical contenteditable + 正常 color 是对的方向。
在此之前,更稳妥的兜底是:backdrop 未跟上时,让 textarea 自己显示文字。

详细的 bug report 模板见 docs/UPSTREAM-REPORT.md。

环境

在以下环境实测通过:

- macOS (darwin),Chrome
- @deepseek-ai/dsh 0.1.1-rc.2,profile web
- 同时加载 8 个 profile bundle(含 @linxin666/dsh-web-ui-all、@nanmicoder/dsh-agent-teams、
@omdsh-dev/dsh-genui、@anionex/dsh-vision-toolkit)

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群