Bundle
dsh-fullscreen-settings
把 DSH 的设置弹窗改成 Codex 风格整页全屏设置页 — Codex-style full-page settings for DeepSeek Harness.
- Source
- functy23
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 18 days ago
Readme
<div align="center">
<img src="icon.svg" width="150" alt="dsh-fullscreen-settings"/>
# dsh-fullscreen-settings
**把 DSH 的设置弹窗,变成 Codex 那样的整页全屏设置页。**









[Issues](https://github.com/functy23/dsh-fullscreen-settings/issues) • [Changelog](CHANGELOG.md) • [中文](README.md) / [English](README.en.md)
</div>
---
## 展示
<img src="assets/settings-fullpage.png" width="1000" alt="设置整页全屏:左上角是「← 设置」,左栏是分类,右侧是内容">
## 效果
| | 改动前 | 改动后 |
|---|---|---|
| 形态 | 屏幕中央 800×800 的弹出式 modal,背后有遮罩 | 铺满整个窗口的整页设置,没有遮罩 |
| 退出 | 右上角一个小叉号 | 左上角一整行「← 设置」 |
| 左栏 | 188px 分类栏 | 248px 分类栏,带发丝分隔线 |
| 内容 | 800px 宽,行拉满 | 单列最大 880px,长行不再被拉得过长 |
左上角的「← 设置」是**一个按钮**:箭头和标题同处一个色块,鼠标悬停时整行高亮,
和主界面左栏的「新会话」「插件」条目同款;点箭头或点文字都返回上一页。
macOS 上顶部会自动让开红绿灯,那条留白同时是窗口拖动区;窗口进入全屏时留白自动收起。
## 安装
### 从 npm 安装(推荐)
```bash
dsh plugin --profile <profile> add dsh-fullscreen-settings
```
也可以直接 `npm i dsh-fullscreen-settings` 单独拿包。
### 从 GitHub 安装
```bash
dsh plugin --profile <profile> add github:functy23/dsh-fullscreen-settings
```
把 `<profile>` 换成要装的那个(例如 `web`)。
如果该 profile 由宿主客户端托管、CLI 拒绝安装,就在客户端的插件页里填包名
`dsh-fullscreen-settings`(或仓库地址 `github.com/functy23/dsh-fullscreen-settings`);
或者直接改 profile ——
在 `~/.dsh/profiles/<profile>/cordis.patch.yml` 末尾追加:
```yaml
- insert:
- id: ui-fullscreen-settings
name: /绝对路径/dsh-fullscreen-settings/lib/index.js
```
装完**刷新页面**即可;如果没生效,**重启 DSH 客户端**。
(profile patch 会让宿主热重组,但客户端模块图是在页面加载时取得的,所以总是需要刷新页面。)
## 原理
宿主半边是空的(`lib/index.js` 只有空 `apply()`),全部效果在浏览器半边完成,
只做两件事:
1. **一段 CSS**,锚在运行版产品自带的属性 `div[data-shortcut-modal="settings"]` 上,
结构用元素选择器(`> nav` / `> div`),**不依赖 CSS Modules 的哈希类名**,
产品换构建也不会失效。
2. **遮蔽 `settings.header` 这个 single 槽的官方占用者**:single 槽的规则是
「最低 priority 渲染」,官方占用者是 priority 0,本插件用 `-1000` 顶掉它,
改渲染左上角那一个整行按钮。
关闭动作直接调 `@deepseek-ai/dsh-client-ui-primitives` 的 `closeTopModal()`
—— 这正是官方设置快捷键关闭弹窗时用的同一个函数;失败时退回点击官方关闭按钮。
不修改、不打包官方任何文件,DSH 升级后即使某个细节变了,最坏情况也只是样式回退。
## 目录结构
```
dsh-fullscreen-settings/
├─ lib/
│ ├─ index.js 宿主半边:空 apply()
│ └─ client.js 浏览器半边:样式 + 「← 设置」按钮
├─ tests/
│ └─ client.test.mjs 零依赖单元测试(node --test)
├─ icon.svg 插件列表图标(package.json 的 icon 字段指向它)
├─ assets/ README 展示图
├─ cordis.patch.yml profile 层补丁:安装器靠它把插件挂进 profile 树
├─ package.json dsh.bundle / dsh.client 声明 + test 脚本
└─ README.md / README.en.md / CHANGELOG.md / LICENSE
```
`lib/` 就是源码,没有构建步骤;改完刷新页面即可。
## 开发
```bash
cd dsh-fullscreen-settings
node --test tests/ # 4 个用例:注册 / 样式 / 整行按钮 / 兜底
node --check lib/client.js
```
## 兼容性
按 DSH `0.2.0-rc.1` 实测。用到的都是产品自有属性、插槽契约与主题变量
(`--dsw-alias-*` / `--dsh-frame-*`),不依赖某个具体的桌面外壳。
## 回滚
删掉 `cordis.patch.yml` 里那段 `- insert:`(或在该 profile 的插件页里卸载),
刷新页面即可;设置会回到原来的居中弹窗。
## License
[MIT](LICENSE) © 2026 Functy
Install
dsh plugin --profile web add github:functy23/dsh-fullscreen-settings
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-fullscreen-settings from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.