Recreates AionUi right panel for DSH Web GUI: includes Explorer file tree with Git changes, multi-format preview, and per-project panel width persistence.
ⓘ This plugin is a sub-package of the CAPTAIN1275/dsh-ui-web monorepo — stars and activity count the whole repository.
- Language
- TypeScript
- License
- Apache-2.0
- Branch
- main
Install
$ dsh plugin --profile web add @captain1275/dsh-client-ui-aionui-panelRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin CAPTAIN1275/dsh-ui-web/packages/dsh-aionui-panel for me: review the repository at https://github.com/CAPTAIN1275/dsh-ui-web first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
One-Sentence Positioning
dsh-aionui-panel consists of two panels on the right side of the DSH Web GUI chat area: Explorer provides file tree, filename search, and Git changes staging/unstaging/discarding; Preview provides multi-tab preview for 10+ formats including markdown, code, documents, images, and PDFs, with panel width persisted per-project. It reimplements AionUI's right panel (Apache-2.0 reference implementation) using the official SDK, with data sourced from the host process's real filesystem and real git repository.
Core Capabilities
- Explorer file tree: Click file to open in Preview, click entire row to expand/collapse folder, top search by filename (150ms debounce, skip .git and node_modules, 200 result cap, 20,000 scan limit).
- Drag file to chat input box: Tree rows can be dragged to input box, relative path inserted at current draft cursor; highlight prompt bar appears above input box during drag.
- Git changes panel: Reads real git status (porcelain v1 -z) and supports stage/unstage/discard; untracked goes through deletion, tracked goes through restore, batch discard shows confirmation.
- Preview multi-tab preview: markdown/html/code/diff/csv/pdf/word/excel/ppt/image/text/url; supports source/preview toggle, split-pane editing (ratio persisted), save (mtime conflict detection), download, refresh, dirty indicator, middle-click close, right-click batch close (dirty confirmation), tab overflow gradient indicator.
- Panel width draggable (rAF frame merge): Explorer default 260px / range 220
500px; Preview default 480px / range 3401200px; double-click handle to reset to default width; two-level clamping ensures chat area >= 360px; collapse = width shrinks to 0 but component stays mounted, tree expansion state and preview tabs are preserved. - Preferences persisted per-project: localStorage keys follow AionUI (
chat-workspace-width-px,chat-preview-width-px,preview-panel-split-ratio,project-panel-collapse:<root>,explorer-ui:<root>,scm-ui:<root>,preview-ui:<root>), LRU limit 12 scopes, invalid values fall back to default after range validation.
Technical Implementation
- Language: TypeScript (ESM; host and browser half separated layer compilation)
- Key Dependencies:
@deepseek-ai/cordis(host half plugin runtime),@deepseek-ai/dsh-host-webserverand@deepseek-ai/dsh-subprocess(host HTTP routing and git subprocess management),@deepseek-ai/dsh-client-runtime/@deepseek-ai/dsh-client-locale/@deepseek-ai/dsh-client-ui-conversation(browser half injection),react ^18.2.0(UI rendering) - Architecture Pattern: Cordis dual-half plugin —
src/index.tsis the host half (Node process: fs/git service +/aionui-panel/*routes + systemPrompt announcements),src/client/index.tsis the browser half (Web GUI side: state core + drag engine + DOM layout controller + React components),src/core/types.tsis pure types shared between halves;cordis.patch.ymlinserts plugin line into web profile list,package.json#dsh.clientdeclares browser injection andplatform: "web". - Entry Files:
src/index.ts(host half entry),src/client/index.ts(browser half entry),src/host/routes.ts(/aionui-panel/*route layer, includes JSON content-type CSRF interception and SSE change stream),src/host/gate.ts(workspace gate),src/host/fs-service.ts/src/host/git-service.ts(fs/git data services)
Applicable Scenarios
Users who open project sessions in DSH Web GUI and want LLMs to directly see/modify real repository files: let agents read .ts or view .yaml during chat, or manually open several files for reference. If you're already running DSH on dsh web but feel "only typing to agent" isn't intuitive enough and want that VS Code-style right-side project explorer feel, this plugin fills that gap.
Prerequisites and Compatibility
| Dependency | Minimum Version | Description |
|---|---|---|
| DSH Runtime | >=0.1.0-rc.6 | peerDependencies locks @deepseek-ai/dsh-* to ^0.1.0-rc.6, including dsh-client-locale / dsh-client-runtime / dsh-client-ui-conversation / dsh-client-ui-slots / dsh-host-webserver / dsh-subprocess / dsh-system-prompt / dsh-workspace (package.json:33-43) |
| Client Runtime Profile | web | cordis.patch.yml inserts plugin line into web profile roster, package.json#dsh.client.platform is also web; browser half does not load under headless profile (cordis.patch.yml:11-13, package.json:20-32) |
| React | ^18.2.0 | Browser half dependency, UI components based on React 18 rendering (package.json:42) |
| Node.js | Not declared | Neither root package.json nor this package's package.json has engines field; build/test depends on [email protected], [email protected], typescript@~5.7.2 |
| Platform | Cross-platform (macOS/Windows/Linux) | Only depends on Node standard library (node:fs/node:http/node:path/node:fs/promises); host half path handling normalizes case-insensitive, separator-independent on win32 (src/host/gate.ts:1-46) |
| Native Modules | None | No koffi/node-pty/node:sqlite native bindings; git called via subprocess managed by @deepseek-ai/dsh-subprocess (src/host/git-service.ts:34-79) |
Installation
dsh plugin --profile web add github:CAPTAIN1275/dsh-ui-web/packages/dsh-aionui-panel
After installation, restart dsh web and open a project session with a working directory to see the "Preview" and "Files/Changes" panels on the right side of the chat area.
Configuration
This plugin requires no DSH-side configuration (no cordis Schema or ctx.config exposed items). Browser-side "user preferences" — panel width, collapse state, Preview split ratio, tab order — are written by the plugin itself to localStorage, isolated by project root, requiring no manual user configuration.
FAQ
Q: What can I see after installing this plugin?
A: In project sessions opened with dsh web, two additional panels appear on the right side of the chat area: Explorer (file tree + Git changes tab) and Preview (multi-tab file preview). Files in the tree can be dragged to the chat input box to insert the relative path at the draft cursor; the agent will read the file as needed without manual path typing.
Q: What file formats does preview support?
A: markdown, html, code, diff, csv, pdf, word, excel, ppt, image, text, url — 10+ formats. Supports source/preview toggle, split-pane editing (ratio persisted), save (mtime conflict detection), download, refresh, dirty indicator, middle-click close, right-click batch close (dirty confirmation), tab overflow gradient indicator.
Q: Must use DSH Web GUI (profile=web) to see the panels?
A: Yes. cordis.patch.yml inserts the plugin line into the web profile list, and the dsh.client.platform field is also web; under CLI/headless profile the browser half doesn't load, so these two panels only appear in DSH Web GUI.
Q: Is the data source real filesystem or mock?
A: Real. Host process provides directory listing, file read/write, filename search, git status/diff/stage/unstage/discard via /aionui-panel/* HTTP routes; recursive fs.watch and 2-second git polling compose the SSE change stream, file tree and Git status refresh in real-time.
Q: What happens if workspace path is not in registered workspace?
A: Directly rejected. All requests' project root go through workspace gate: after realpath normalization must fall within some workspace returned by host workspace registry or its subdirectory; out-of-bounds returns stable error code path-outside-root. Meanwhile route layer enforces JSON content-type validation, intercepting form CSRF without CORS preflight.
Q: Can I use it without git binary installed?
A: File tree and preview work completely. Host half does a one-time git availability probe; probe failure logs and dispatches gitUnavailable event, SCM tab enters friendly "git not installed" state without retrying spawn every 2 seconds.
Q: Are panel width and collapse state saved?
A: Persisted to localStorage per-project, keys follow AionUI naming (chat-workspace-width-px, chat-preview-width-px, preview-panel-split-ratio, project-panel-collapse:<root>, explorer-ui:<root>, scm-ui:<root>, preview-ui:<root>), LRU limit 12 scopes, oldest unused gets evicted.
Q: Will agents know about this panel's existence?
A: Yes. Host half announces plugin capabilities, limitations, and collaboration method to all agents via systemPrompt section (order=210); when user mentions "right panel / preview panel / file tree / changes panel", the model knows it refers to this plugin.
Q: How to debug when bugs occur?
A: Any browser-side DOM/runtime wiring failures only console.error, won't throw, ensuring web shell isn't dragged down by plugin; open developer tools Console and filter dsh-aionui-panel to see failure reasons.
Getting Started Difficulty
Beginner — install plugin, restart dsh web, open project session to see panels, all interactions have instant visual feedback; no configuration or API calls needed.
Known Issues and Limitations
- Host half text read per-tab limit 80,000 characters, image read data URL limit 8 MB, exceeding gets truncated (src/host/fs-service.ts:18-21).
- Filename search result cap 200, scan cap 20,000, fixed skip of
.gitandnode_modules; results over cap returned withtruncatedmarker (src/host/fs-service.ts:22-28). - Git availability probe is one-time: after probe failure SCM tab enters "git not installed" state and stops retrying, but filesystem watching and Preview still work normally (src/host/routes.ts:101-138).
- Non-file-tree drag scenarios (e.g., directly dragging OS Explorer files to DSH Web) still handled by DSH Web's own image drop handler; this plugin only takes over internal drags from file tree rows to chat input box (src/client/drag/file-drag.ts:7-12).
- When user enables system
prefers-reduced-motion, panel transition animations are globally disabled, including drag edge instant switching (README.md:50). - File tree permanently hides
.gitdirectory (src/host/fs-service.ts:27-28); to view.gitinternal files please use terminal ordsh-ssh-like plugins.
基于 zhu1090093659/dsh-web-ui(Apache-2.0)开发的 DeepSeek Harness(DSH)Web UI 插件套件。全套 22 个包已发布到 npm(
@captain1275/*)。
DSH Web UI 全家桶为 DeepSeek Harness 的 Web 界面提供一系列插件与皮肤:极光毛玻璃皮肤、任务看板、 SSH 运维、右侧文件/变更面板、Git 图谱、移动端远程控制、DeepSeek 娘看板娘(养成系)、实时令牌统计, 以及皮肤中心。所有插件既可独立安装,也可通过聚合包一次装齐。
极光 Aurora 皮肤效果(沉浸光感 / 深色 / 浅色)



特性
极光(Aurora)皮肤(支持动态背景)
- 毛玻璃输入框:高斯模糊(backdrop-filter 30px)+ 半透明玻璃底 + 细边框 + 内高光
- 自定义背景:URL / 本地图片 / 动图(GIF/WebP)/ 视频(mp4/webm) / 透明度 / 模糊调节,
深浅两套极光渐变;视频背景支持静音开关、本地文件持久化(存
~/.dsh/skin-aurora-media/,刷新不丢) - 仿Claude Code推理等级滑块:点击模型菜单的「推理等级」弹出 Effort 滑块面板——无极拖动、松手吸附、 WebGL 火焰跟随、OFF/MAX 刻度、Low/Medium/High/Ultracode 状态

- 用户消息气泡毛玻璃:与输入框统一的玻璃质感
DeepSeek 看板娘(养成系)
- 图片资源(社区同人资源,codex-pet-DeepSeek-girl)
- 养成系统:亲密度 4 级成长(幼鲸 / 伙伴 / 挚友 / 深海羁绊)、升级庆祝气泡、进度条、 Token 零食经济、使用时长成长(每 30 分钟 +1)
- 待机随机气泡:空闲时随机说话(live2d 风格文案)
- 摸头 / 喂食 / 改名 / 拖动,召唤按钮(live2d 同款贴边滑出)
Skill 人格设定
- 设置「人格设定」:开关启用/禁用常驻人格,编辑技能名、描述与人格正文
- 一键生效:保存后写入用户级技能
~/.dsh/skills/catgirl-rp/SKILL.md,DSH 技能系统实时加载, 所有新对话自动以该人格回应(含语气、动作表达、互动规则) - 内置猫娘人格:默认提供「小咪」猫娘人格(常驻生效、好感度系统、模式切换指令),可自由改写
- 可临时退出:对话中说「退出角色扮演模式」即切回普通助手,说「进入角色扮演模式」恢复

用量看板
- 彩色统计卡:累计 token、调用次数、缓存命中、估算费用(按 DeepSeek 官方定价)
- 近 14 天趋势:每日 token 消耗柱状图
- 模型分布:各 provider/model 用量环形图 + 图例
- 会话排行:Top 20 会话(标题 / 模型 / 调用数 / token / 费用)
- 自动记录:对话时自动采集 token 用量(会话快照替换语义,不双计),存
~/.dsh/usage.json - 侧边栏入口:彩色柱状按钮打开全屏看板
功能插件
| 插件 | 功能 |
|---|---|
| dsh-task-board | 侧边栏任务看板:多列 kanban、真实执行(驱动 agent 会话)、定时执行(cron) |
| dsh-ssh | SSH 运维:主机管理、远程执行、SFTP 传输、隧道、集群并发、Web 终端 |
| dsh-aionui-panel | 右侧「预览 / 文件 / 变更」面板:文件树、多格式预览、git 操作、文件拖拽 |
| dsh-git-graph | 会话头部 git 分支选择器 + 提交图 |
| dsh-live-stats | 实时 token 估算与生成速度 |
| dsh-full-stats | 完整统计行:覆盖官方统计(不省略)+ 运行状态指示 + 自定义状态文本(含替换官方 Deep diving...) |
| dsh-usage-dashboard | 用量看板:彩色统计卡 / 近 14 天趋势 / 模型分布 / 会话排行 / 费用估算 |
| dsh-web-ui-settings | 设置页「Web UI 插件」配置组 + 「人格设定」+「关于」版权页 |
| dsh-web-ui-all | 聚合包:一键安装全部插件 |
皮肤中心
10 套皮肤(ths / xp / blue-fantasy / dragon-heir / minecraft / miku / trading / whale-song / aurora / skin-center),支持皮肤启用互斥管理与一键切换。
其余皮肤(ths / xp / blue-fantasy / dragon-heir / minecraft / miku / trading / whale-song) 为上游 dsh-web-ui 自带皮肤。
安装
方式一:npm(推荐,已发布)
# 在 DSH profile 目录(~/.dsh/profiles/web)安装聚合包
npm install @captain1275/[email protected]
然后在 profile 的 package.json 里把 @captain1275/dsh-web-ui-all 加入
dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@captain1275/dsh-client-ui-skin-aurora",
"@captain1275/dsh-full-stats",
"@captain1275/dsh-web-ui-all"
]
}
}
}
重启 DSH 即生效。
方式二:从源码(开发)
git clone <your-repo-url> dsh-web-ui
cd dsh-web-ui
pnpm install
pnpm -r build
# 把本地包链接进 profile(junction)
node scripts/link-profile.mjs
开发
- 构建:
pnpm -r build(或pnpm --filter <package> build) - 新增皮肤:参考
packages/skins/aurora(skin.json+src/client+cordis.patch.yml), 然后用node scripts/skin-center-bundles重新生成注册表 - 聚合包 patch:编辑
packages/dsh-web-ui-all/aggregate.yml后node scripts/aggregate.mjs - 皮肤资产同步:
node packages/dsh-skins/build.mjs
目录结构
packages/
├─ dsh-task-board / dsh-ssh / dsh-aionui-panel / dsh-git-graph
├─ dsh-pet / dsh-live-stats / dsh-full-stats
├─ dsh-web-ui-settings / dsh-web-ui-all / dsh-skins
└─ skins/ # 皮肤源码(aurora、miku、ths 等)
scripts/ # 构建 / 注册表 / 链接工具
shared/ # 共享构建预设(tsdown.client.ts)
版权与许可
- 主体代码:zhu1090093659/dsh-web-ui,Apache-2.0
- 增强优化:@captain1275
- DeepSeek 娘精灵图:xpy12367/codex-pet-DeepSeek-girl, 社区同人资源,版权归原作者
- 人形图标:Font Awesome 6.7.2,CC BY 4.0
- 样式参考:live2d-widget(GPL-3.0,仅参考视觉风格,未搬用代码)
- 商标:DeepSeek 及其相关标识均为 DeepSeek 官方资产;本插件为社区开发者独立维护的非官方同人项目, 不代表 DeepSeek 官方立场。
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/CAPTAIN1275/dsh-ui-web/packages/dsh-aionui-panel)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.