Bundle
dsh-persian-rtl
Persian (Farsi) RTL fix for DeepSeek Harness: automatic per-paragraph direction and mixed-language detection (Persian text starting with English words), thinking cells, tool cells, user bubbles and question boxes.
- Source
- ireza7
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-persian-rtl Persian (Farsi) RTL fix for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) — until RTL is handled officially. ## What it does Fully automatic per-paragraph text direction (`unicode-bidi: plaintext`): every paragraph follows its own first strong character — Persian paragraphs render right-to-left, English ones stay left-to-right. No buttons, no settings. Covered surfaces: - **Assistant answers** — including while streaming - **User + steering message bubbles** — including composer submit echoes - **Thinking / reasoning cells** (`turn-process` members and inline reasoning, reasoning flow nodes) - **Tool-call / tool-result cells** — any `data-tool` row (including `ask_user_question` rendered inside the chat flow) - **Question boxes + plan-review cards** (composer-takeover cards) **Intelligent mixed-language detection** — When a Persian sentence begins with an English word, technical term, or inline code (e.g. `React یک کتابخانه است` or `1. Node.js را نصب کنید`), standard browser first-strong-character heuristics mistakenly classify it as LTR. The plugin dynamically analyzes character composition and enforces RTL base direction with full streaming support. **Latin runs stay intact** — `code`, `pre`, `kbd`, and links are isolated LTR, so English words and numbers keep their order inside Persian text instead of jumping around. **Logical geometry fixed** — lists, blockquotes, and task checkboxes use `inline-start` padding/borders, so RTL paragraphs get correctly-sided bullets, quote bars, and gaps. The composer, sidebar, and settings are left alone, and no shipped renderer is replaced — the plugin only adds CSS. ## Install Pick whichever is easiest — no local clone needed in any of them. **Web UI:** open **Plugins** in the sidebar → install → enter the spec: ``` github:ireza7/dsh-persian-rtl ``` **Agent tool** (Creator mode session): ``` install_bundle with target = github:ireza7/dsh-persian-rtl ``` **CLI:** ```bash dsh plugin --profile web add github:ireza7/dsh-persian-rtl ``` The bundle takes effect immediately in live profiles (no restart). Alternatives: - Full repo URL: `https://github.com/ireza7/dsh-persian-rtl` - From a local clone: `install_bundle with target = /path/to/dsh-persian-rtl` - From npm (if published): `install_bundle with target = dsh-persian-rtl` To remove it later: `remove_bundle` with the bundle name. ## How it works - A `<style>` element is mounted via `ctx.effect` providing per-paragraph direction and logical geometry fixes. - A high-performance, batched `MutationObserver` (`requestAnimationFrame`) monitors chat surfaces in real time to identify and correct mixed paragraphs starting with Latin runs, ensuring seamless streaming support without UI flicker. - Clean lifecycle management: unmounting clears the observer, timers, and removes all applied attributes leaving zero residue. ## License MIT
Install
dsh plugin --profile web add github:ireza7/dsh-persian-rtl
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-persian-rtl from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.