🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

阿拉伯语 RTL 修复 almezaniy/Deepseek-Harness-RTL

DeepSeek Harness
almezaniy20 天前有提交已提供中文文档扫描:未发现敏感能力

让阿拉伯语界面右对齐,代码仍保持从左到右

28.3/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add almezaniy/Deepseek-Harness-RTL
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · browser
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 20 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 阿拉伯语界面右对齐
  • 代码保持从左到右

DeepSeek Harness 网页界面的阿拉伯语(RTL)文本修复——浏览器端 Cordis 客户端插件

README

由 DeepSeek 最新模型翻译生成
deepseek-harness-rtl 浏览器端 Cordis 客户端插件,让阿拉伯语文本在 DeepSeek Harness 网页界面里正确显示:方向跟随内容,混合语句标点不乱,编辑器跟随你输入的内容,代码区保持从左到右。 A browser-side Cordis client plugin that makes Arabic (RTL) text render correctly in the DeepSeek Harness web UI: direction taken from the content, clean mixed-sentence punctuation, a composer that follows what you type, and code areas that stay left-to-right. لقطة شاشة: النص العربي بعد تفعيل الإصلاح — Arabic text with the fix enabled الواجهة بعد تفعيل الإصلاح: فقرات RTL، ترقيم سليم في الجمل المختلطة، وكود يبقى LTR.
展开完整文档(README 剩余 1 节)
deepseek-harness-rtl

浏览器端 Cordis 客户端插件,让阿拉伯语文本在 DeepSeek Harness 网页界面里正确显示:方向跟随内容,混合语句标点不乱,编辑器跟随你输入的内容,代码区保持从左到右。

A browser-side Cordis client plugin that makes Arabic (RTL) text render
correctly in the DeepSeek Harness web UI: direction taken from the content, clean
mixed-sentence punctuation, a composer that follows what you type, and code areas
that stay left-to-right.

لقطة شاشة: النص العربي بعد تفعيل الإصلاح — Arabic text with the fix enabled

الواجهة بعد تفعيل الإصلاح: فقرات RTL، ترقيم سليم في الجمل المختلطة، وكود يبقى LTR.
The UI with the fix on: RTL paragraphs, correct punctuation in mixed sentences, code still LTR.

兼容性 / Verified against: @deepseek-ai/dsh 0.2.0-rc.2(Windows 官方桌面应用)。第 2 层选择器取自这个构建;第 1 层不受哈希变化影响。

已在 Chromium 中对照应用自身的样式文件(MarkdownText.module.css)测试,加载顺序是在插件样式表之后,也就是最难的顺序,因为运行时注入的样式不能依赖加载顺序。

工作原理 / How it works

页面加载时,插件向会话注入一份 CSS 样式表: On page load it injects a stylesheet that:

| 区域 | Area | 行为 | Behavior |
| 消息气泡 | User bubbles | 所有行靠右 | all lines right |
| 回复段落 | Assistant prose | unicode-bidi: plaintext | per-block auto-detect |
| 思考正文 | Thinking body | unicode-bidi: plaintext | per-block auto-detect |
| 标题 | Headings | 靠右 | right |
| 列表 | Lists | 标记靠右,文本按语言 | marker right, text per language |
| 引用块 | Blockquote | 竖条靠右 | bar right |
| 表格 | Tables | 单元格居中 | cells centred |
| 编辑器 | Composer | 方向跟随你输入的内容 | follows what you type |
| 代码 | Code | unicode-bidi: plaintext | auto-detect (LTR for code) |

文本方向跟随内容,不跟随容器。 每个文本块都带 unicode-bidi: plaintext —— 这是 dir="auto" 在 CSS 里的对应写法 —— 于是双向算法从块内第一个强字符决定段落级别:阿拉伯语靠右排,英语保持靠左,两者可以出现在同一条消息里。反过来,对块强制 direction: rtl 会把每个拉丁段落都拉到右边缘,这正是本次修复的问题。
:dir() 在这里不管用:它读取元素的 direction 属性,而渲染时决定方向的并不是这个属性。

Text direction follows content, not the container. Each text block carries
unicode-bidi: plaintext — the CSS form of dir="auto" — so the bidi algorithm takes the paragraph level from that block's first strong character: Arabic lays 右对齐,英文保持左对齐,两者可以共用同一条消息。
强行给块加 direction: rtl,反而会把每个拉丁段落拖到右边距,这正是本次修复要解决的问题。:dir() 表达不了这个需求:它读的是元素自身的 direction 属性,而不是 plaintext 在渲染时解析出的结果。

结构元素有方向,文本另有方向。 direction 移动的是画在文本框外面的东西——列表标记、标记所在的缩进、引用条——而 plaintext 和 text-align 移动的是文本本身。应用用物理属性设置这些元素(.markdown :where(ul, ol) { padding-left }、.markdown blockquote { border-left }),而 direction 翻不动物理属性。所以这里用 !important 把方向显式重写一遍:应用的样式表在运行时注入,既不能靠优先级,也不能靠加载顺序。

结构和文本各自决定自己的方向。 direction 移动的是画在文本框外面的东西——列表标记、标记所在的缩进、引用条——而 plaintext 和 text-align 移动的是文本本身。应用用物理属性设置这些元素(.markdown :where(ul, ol) { padding-left }、.markdown blockquote { border-left }),而 direction 翻不动物理属性。所以这里用 !important 把方向显式重写一遍:应用的样式表在运行时注入,既不能靠优先级,也不能靠加载顺序。

插件是双面的,和每个 DSH 客户端插件一样:

| 文件 | 运行环境 | 作用 |
| index.js | Node(宿主) | main 入口——一个空的 apply()。绝不能碰 window。 |
| client.js | 浏览器 | exports["./client"]——真正干活的部分:注入样式表。 |

package.json 声明了 dsh.client.platform: "web",正是它让宿主的 client-modules 节点把 client.js 发布进浏览器启动图(window.__DSH_BOOT__)。

包路径:宿主只通过 combo 路径提供插件包,没有为每个插件单独提供路径:包 URL 只有 combo 路由——当前构建里没有按插件单独提供的路径:

/plugins/??deepseek-harness-rtl/client.js&rev=<rev>

所以单独请求 GET /plugins/deepseek-harness-rtl/client.js 天然返回 404,并不是安装失败。参见下面的验证一节。
所以裸请求 GET /plugins/deepseek-harness-rtl/client.js 按设计返回 404——不是安装失败。参见下面的验证。

安装 / Install

要求 / Requirements

- DeepSeek Harness 运行 web 配置档(浏览器 GUI)。
- pnpm 在 PATH 上(用 -PatchOnly 时不需要)。
- 想用别的配置档名?传 -Profile <name>。

方法 1——一条命令 / Method 1 — one command

powershell -File install.ps1
another profile:
powershell -File install.ps1 -Profile myweb
link this folder instead of installing from npm (for development):
powershell -File install.ps1 -Local
rewrite only cordis.patch.yml (no dependency change):
powershell -File install.ps1 -PatchOnly
它在配置档里执行 pnpm add,并把 ui-rtl-fix 这一行写入 cordis.patch.yml(幂等)。

注意:新定义以空补丁层 [] 开头,在其后粘贴列表项会生成无效 YAML。脚本会替换 [],而不是追加,并以无 BOM 的 UTF-8 写入文件。
新初始化的配置档自带空补丁层([]);在其后追加列表项会生成无效 YAML。脚本会替换 [],而不是追加,并以无 BOM 的 UTF-8 写入。

方法 2 — 手动 / Method 2 — manual

cd ~/.dsh/profiles/web # $DSH_HOME defaults to ~/.dsh
pnpm add deepseek-harness-rtl

然后把下面这段加到同一文件夹的 cordis.patch.yml 里 —— 如果该层还是空的,就用它替换 []:然后把下面这段加到同一文件夹的 cordis.patch.yml 里 —— 如果该层还是空的,就用它替换 []:

- insert:
- id: ui-rtl-fix
name: 'deepseek-harness-rtl'

id 是自由格式的行 id;name 必须与已安装的包名一致。
id 是自由格式的行 id;name 必须与已安装的包名一致。

激活 / Activation

随附的 web 配置档声明了 patchReload: live:每次有效修改补丁,loader 都会重新组装 —— 无需重启,刷新浏览器标签页即可。
随附的 web 配置档声明了 patchReload: live:每次有效修改补丁,loader 都会重新组装 —— 无需重启,刷新浏览器标签页即可。

而 patchReload: startup 配置档只在启动时读取一次组合,应用补丁需要重启一次 Web 应用。
patchReload: startup 配置档只在启动时读取一次组合,应用补丁需要重启一次 Web 应用。

检查你的配置档 / check your profile: $DSH_HOME/profiles/<profile>/package.json 中的 dsh.profile.patchReload。

验证 / Verify

1)实时插件图 —— 无需重启,无需认证 1)实时插件图 —— 无需重启,无需认证:

curl -s -m 3 http://127.0.0.1:3080/plugins/events | grep -o '"id":"deepseek-harness-rtl"'

curl.exe -s -m 3 http://127.0.0.1:3080/plugins/events | Select-String 'deepseek-harness-rtl'

/plugins/events 是 SSE 通道:先发出 graph 帧,然后保持连接打开;-m 3 在三秒后停止读取。该行必须出现在包 id 之下。
/plugins/events 是 SSE 通道:先发出 graph 帧,然后保持连接打开;-m 3 在三秒后停止读取。该行必须出现在包 id 之下。

2)通过 combo 路由获取 bundle —— 从 graph 帧复制 url 2)通过 combo 路由获取 bundle —— 从 graph 帧复制 url:

curl -s -o /dev/null -w "%{http_code}\n" \
'http://127.0.0.1:3080/plugins/??deepseek-harness-rtl/client.js&rev=<rev>' # expect 200

3)在浏览器开发者工具控制台里 / and in the browser devtools console:

document.querySelector('style[data-plugin="deepseek-harness-rtl"]') // not null
getComputedStyle(document.querySelector('[data-composer-input]')).direction // "rtl"

故障排查 / Troubleshooting

| 症状 | 原因 | 修复 |
| 启动时报 window is not defined | 包的 main 指向 client.js,loader 在 Node 里把它导入了 | main 应设为 index.js,client.js 放到 exports["./client"] 下 |
| 包能加载,但界面没变化 | 行已存在,但 dsh.client.platform 没声明 | 在 package.json 里加上 dsh.client |
| 重启后修复失效 | 手动改的 node_modules 副本被 pnpm install 覆盖 | 用 pnpm add 安装(作为真实依赖),不要复制到 node_modules |
| /plugins/<name>/client.js 返回 404 | 每个插件没有独立路径,包只通过 combo 路径提供 | 查 /plugins/events,从里面取 url;或在浏览器里查 style 标签 |
| cordis.patch.yml 里 YAML 无效,或启动失败 | 在 [] 后面粘贴了 - insert: | 把 [] 换成块(install.ps1 会自动做) |
| 补丁不重启就不生效 | 定义里声明了 patchReload: startup | 重启一次 Web 应用,或把定义改成 live |
| 升级 Harness 后看不到变化 | 新构建里第 2 层的哈希变了 | 更新第 2 层(见下文);第 1 层仍然有效 |
| 编辑器里看不到修复 | 从 0.1.5 起,编辑器从 textarea 变成了 div[contenteditable] | 确认已安装的 client.js 里有 [data-composer-input] |

CSS layers / 两层样式

- 第 1 层(可移植) 针对构建稳定的锚点:
- [data-chat-flow-kind="user" | "steering" | "assistant-step"] 用于聊天流(气泡、正文段落);
- [data-composer-input] 用于编辑器(从 dsh 0.1.5 起是 Lexical 的 contenteditable div;textarea.uV2eYG_input、[data-input-mirror] 和
[data-input-backdrop] 留给旧构建);
- 结构元素(p、li、h1–h6、blockquote、pre、code)。

- 第 2 层(按构建) 针对本次部署所用的 CSS module 哈希,已对照 @deepseek-ai/dsh 0.1.5-rc.2 验证:

| 元素 | 选择器 | 模块 |
| 用户气泡 | .Sixlwa_bubble | dsh-client-ui-chat ChatFlow.module.css |
| 助手正文 | .hWmORq_root | dsh-client-ui-chat AssistantMarkdown.module.css |
| 推理正文 | .lcKema_thinkBody | dsh-client-ui-chat ReasoningRow.module.css |
| 编辑器 | .uV2eYG_input(+ [data-composer-input]) | dsh-client-ui-conversation InputBar.module.css |

旧构建的哈希(.gdEzaW_bubble、[class*="Sxvs8a_root"]、
.QWLzlG_thinkBody)在 0.1.5 刷新后已移除。

这些规则用来微调结果;如果将来升级改了名,它们会静默失效,而第 1 层继续维持主要行为。

欢迎提交更新第 2 层的 PR,以适配更新的构建。

参与贡献 / المساهمة

git clone https://github.com/almezaniy/Deepseek-Harness-RTL.git
cd Deepseek-Harness-RTL
powershell -File install.ps1 -Local # links this checkout into your profile

改完 client.js,刷新标签页即可。当 patchReload: live 时,宿主会重写 bundle,浏览器 HMR 通道随即换上新的;startup 配置档则需要重启一次。

说明 / ملاحظات

- غير تدخّلية: تحقن CSS فقط، بلا أثر جانبي.
- 非侵入式:只注入 CSS,没有其他副作用。

更新日志 / سجلّ التغييرات

1.0.3

نفس إصلاحات 1.0.2. الرقم 1.0.2 جهّزته محاولة نشر سابقة على مراحل ولم تُعتمد،
فاحتُجز على السجلّ ولا يمكن نشر رقم فوقه؛ لذلك يبدأ التوزيع من 1.0.3.

修复内容与 1.0.2 相同。1.0.2 这个版本号由早先一次分阶段发布尝试占用,该次发布未获批准,版本号因此被登记处锁定,无法再发布高于它的版本号;所以分发从 1.0.3 开始。

1.0.2

أُصلح: النص الإنجليزي لم يعد يُسحب إلى اليمين. كانت الإضافة تفرض
direction: rtl على كل الكتل، فينزاح كل نص لاتيني إلى الهامش الأيمن. الآن كل كتلة
تحمل unicode-bidi: plaintext، فيأتي الاتجاه من محتواها.

أُصلح: نقاط القوائم وشريط الاقتباس. كانت على اليسار بينما النص على اليمين، لأن
التطبيق يضبطها بخصائص فيزيائية وdirection لا يقلبها. صارت الجهة مكتوبة صراحةً مع
!important.

أُصلح: العناوين وخلايا الجداول. العناوين تأخذ اليمين صراحةً، وخلايا الجداول
تتوسّط بغضّ النظر عن اللغة.

أُصلح: أسطر رسالة المستخدم. كل أسطر الرسالة تلتصق باليمين، فلا ينقسم شكل
الفقاعة بين محاذاتين عندما يبدأ سطر بحروف لاتينية.

改进: 英文正文和代码保持左对齐,阿拉伯文则靠右;列表标记、引用条和标题都落在右侧;表格单元格在两种文字下都居中;用户消息的每一行都保持靠右;输入框跟随你输入的内容,不再总是从右侧起排。

1.0.1

أول إصدار منشور: ورقة أنماط تجعل النص العربي يُصفّ يميناً.

首个正式发布版本:一份让阿拉伯文靠右排版的样式表。

许可证

MIT — 见 LICENSE。
预览分享卡片长什么样 ↓almezaniy/Deepseek-Harness-RTL
分享 · DeepSeek Harness Hub
almezaniy/Deepseek-Harness-RTL

让阿拉伯语界面右对齐,代码仍保持从左到右

这是你的仓库?认领条目

回到顶部