# dsh-theme-prts

面向 DeepSeek Harness Web 和官方桌面客户端的个人、非商业明日方舟 / P.R.T.S. 同人 UI 插件。主题保留 Harness 的原生交互和数据流，将工作区、会话与对话组织成罗德岛设施终端。

> [!IMPORTANT]
> 本项目是个人制作的非官方《明日方舟》同人主题，与上海鹰角网络科技有限公司及相关发行方不存在隶属、合作、授权或背书关系。
>
> MIT 许可证仅覆盖本项目原创代码。安装包中若干可识别的《明日方舟》名称、角色图像、徽记及其衍生素材不属于 MIT 授权范围，本项目不向使用者授予复制、修改、再分发、再许可或商业使用这些第三方素材的权利。
>
> 素材可从公开网页访问不代表获得再利用或再分发授权；免费、非商业使用也不当然构成授权。素材来源与许可边界详见 [第三方素材说明](THIRD_PARTY_NOTICES.zh-CN.md)。
>
> 本项目及其发行包可能因权利人请求、平台政策或维护者决定，随时暂停发布、限制下载或移除相关素材，不保证持续提供。

主题安装后默认关闭，不会立即改变页面。

Baker 会话主题参考《明日方舟：终末地》的通讯界面。在主题设置「外观」中选择 Baker，点击用户或 AI 头像即可上传、裁剪或恢复默认。原图与裁剪位置保存在服务端，同一 DSH 实例内共享，之后可继续裁剪；支持拖动定位、滑块及滚轮／触摸板缩放。确认后保存，动图使用第一帧，单张最大 5 MB。

## 兼容性

- 当前支持 DeepSeek Harness `0.2.1-rc.2` 的 Web 端与官方桌面客户端。Web 端已在本地容器的真实页面验证；桌面端已实机验收，基础功能未见明显问题。此前的 `0.2.0-rc.2`、`0.1.7`、`0.1.5`、`0.1.2` 发布线不再列入当前兼容声明。
- 已在 Web 端 `0.2.1-rc.2` 验证主题挂载、工作区和会话卡片、长标题悬停、原生对话宽度拖动及窄窗口布局；会话状态与待处理提示有浏览器回归覆盖。
- `package.json` 中的 `engines.dsh` 使用相同的精确版本声明，插件市场可据此判断兼容性。其他 DSH 版本需另行验证。
- 若仍使用 DSH `0.2.0-rc.2`，请固定上一公开主题版本 `@ash-qw/dsh-theme-prts@1.4.2`；使用 DSH `0.1.7-rc.2` 时请固定 `1.0.2`，使用 DSH `0.1.2` 或 `0.1.5` 发布线时请固定 `0.1.102`。

主题设置通过 DSH 原生配置服务保存，同一 profile 下的在线页面会同步更新。首次接入时，仅当服务端尚未保存主题配置，才迁移当前浏览器的旧设置；已有服务端配置优先。保存冲突或失败会显示提示，不自动重传旧配置；“重试保存”会按当前版本重新提交失败的修改。部分旧版 DSH 的远程访问仅支持内存配置，此时会提示未保存，需要宿主提供持久化支持。升级后需重新加载主题服务端插件，才能注册新增配置。

## 安装与更新

Web 端与官方桌面客户端使用同一个主题包 `@ash-qw/dsh-theme-prts`，无需单独的桌面版主题。

以下为 Web 端的命令行安装方式，在已经可以正常运行 DSH Web 的环境中执行：

```bash
npx @deepseek-ai/dsh plugin --profile web add @ash-qw/dsh-theme-prts
```

安装或更新后建议重新启动所使用的 DSH Web 服务或官方桌面客户端，以确保主题被完整加载。然后进入“Settings → 插件 → P.R.T.S.”启用主题；完整外观设置位于主界面左上角的罗德岛徽记。

主题包已公开发布到 npm，无需 GitHub 登录或访问令牌。重新执行安装命令即可更新到 `latest`；如需锁定版本，可使用 `@ash-qw/dsh-theme-prts@<版本号>`。若命令提示 `pnpm not found`，请先安装 pnpm。

## 当前特性

- P.R.T.S. / Rhodes Island / RIIC 设施化工作区、会话与对话界面；
- 与 Harness 同步的日间 / 夜间模式、三套外观预设和四档界面材质；
- 城市剪影、阵营粒子徽记、会话声纹和 P.R.T.S. 启动序列；
- 电脑、平板和手机屏幕布局，以及减少动效和降低透明度适配；
- PRTS 手形光标，支持按下、按住和松开效果（大型背景容器保持静态，避免长会话卡顿）；可点击区域使用 link 手形，调整大小使用四向静态光标；文本框和正文文字使用静态 I 形光标，可在主题设置中关闭“PRTS 光标”以使用系统光标；
- 无运行时网络请求、分析统计或额外遥测。

鼠标素材来自 [crowninggg/prts-cursor v1.1.4](https://github.com/crowninggg/prts-cursor/releases/tag/v1.1.4)，提取后适配为网页光标；来源、处理方式和许可边界见 [第三方素材说明](THIRD_PARTY_NOTICES.zh-CN.md#prts-手形与文本光标)。

## 使用与设置

“Settings → 插件 → P.R.T.S.”提供主题总开关和启动动画开关。主界面左上角的罗德岛徽记提供完整外观设置，按外观、交互、会话流线、粒子效果四页切换。各页保留滚动位置；窄屏使用顶部分类栏，也支持方向键切换。

在“粒子效果 → 徽记管理”中，可分别设置新会话的单张徽记与正文的轮换列表。正文列表支持内置与自定义图案混排，每张可预览、上传替换或删除，长按徽记选项任意位置即可拖动排序，松开自动保存，Esc 取消，也可新增徽记（最多 12 张，至少保留 1 张）；新增和“预览 / 替换”使用独立编辑弹窗，桌面端左右布局、窄屏上下布局；拖动预览取景框中的图案调整裁剪位置，平移只改变点阵位置及可见范围，不重新排列粒子，也支持方向键微调和“居中”复位，缩放仍由滑块控制；取消或关闭时，未应用的修改会先询问是否放弃，关闭后返回原列表位置。两处均可独立恢复内置设置；存在自定义徽记时会先列出受影响的素材，提供逐张导出及恢复确认。未导出就恢复后，相关素材将无法从此处的设置中找回。上传 PNG、WebP 或 JPEG 后可调整轮廓提取、阈值、缩放及裁剪位置；“线稿轮廓”模式提取图像边缘，并按各档密度采样为点阵，阈值越高保留的细节越少。线稿模式下可选择“彩色图提轮廓”或“纯线稿提笔画”，点阵会自动细化；“去除碎线”独立控制孤立短线过滤，五官细节丢失时可降至 0。复杂人物图建议先简化背景和纹理。点击“应用到此处”后才会保存。正文沿用滚动触发的轮换、扰动与重组效果。图片上传到当前 DSH 实例，在独立后台线程处理；原图、参数、草稿和已应用配置保存在 `$DSH_HOME/plugins/dsh-theme-prts/emblems`，不同工作区、会话及连接此实例的浏览器共享徽记设置。已应用图案可以重新打开继续调整，页面会自动同步。不会由主题插件发送给第三方图片服务。支持最大 8 MB、1600 万像素的图片，推荐透明底标志或黑白剪影。

自定义徽记可点击“导出素材”，下载单张 `.prts-emblem.json` 素材包，包含原图和调整参数。在另一套 DSH 的“新增徽记”或“预览 / 替换”中选择“导入徽记素材包”，预览确认后应用；导入后仍可继续编辑，不会自动覆盖首页徽记或正文列表。素材包上限 12 MB，导入时会按原参数重新生成粒子。

也可以在任意允许这些工具的 DSH 会话上传图片，说“帮我把这张图做成 PRTS 粒子徽记，先给我预览”。AI 生成或编辑的图片也可直接作为来源：先用 `read_image` 读取工作区中的图片，再调用 inspect 获取附件标识，无需下载后重新上传。接口识别当前会话上传及工具返回的图片，不接受任意附件标识；徽记工具自身返回的粒子预览不作为原图。AI 可调用 `prts_emblem_inspect`、`prts_emblem_preview` 和 `prts_emblem_apply`，使用 `mode: lineart` 生成线稿点阵（`lineSource: edges` 提取彩色图轮廓，`lineSource: ink` 提取纯线稿笔画，`cleanup: 0..12` 控制碎线过滤），或继续调整提取方式、阈值、缩放和裁剪，并按要求应用到新会话或正文轮换列表。生成预览不会改变已应用徽记，配置冲突会要求重新读取。预览图可在会话工具卡片中展示；使用支持图像输入的模型时，工具也会把预览图片交给模型分析。重画图案仍需要该会话另有图片编辑工具。保留最近约 200 份草稿，已应用徽记的编辑源不会被自动清理。服务端图片处理需要 Node.js 20.9 或更高版本。

主题不会主动改写第三方插件的菜单、弹窗和浮层样式。

## 安全模式与恢复

若主题导致页面不可用，在 Harness 地址后添加 `?prts-safe=1`。安全模式会阻止所有主题视觉挂载，但保留“Settings → 插件 → P.R.T.S.”中的基础开关和恢复提示。在此页面关闭主题会保存到 DSH；清除浏览器缓存不会重置服务端设置。

## 卸载

```bash
npx @deepseek-ai/dsh plugin --profile web remove @ash-qw/dsh-theme-prts
```

卸载后建议重新启动 DSH Web。主题偏好保存在 DSH 当前 profile 的原生配置中，浏览器只保留启动缓存。多个全局主题可能发生 CSS 冲突，建议一次只启用一个完整 UI 主题。

## 开发

需要 Node.js 20.9 或更高版本（推荐与 DSH 一致使用 Node.js 24）：

```bash
npm ci
npm run check
```

版本变化见 [CHANGELOG.md](CHANGELOG.md)，维护者发布步骤见 [RELEASING.md](RELEASING.md)。

### 在 DSH 会话中设置 Baker 头像

可上传图片后对 AI 说：“把这张图设为我的 Baker 头像，裁剪到人物面部。”也可以让 AI 生成或编辑图片后直接设置。工具 `prts_avatar_inspect` 查看当前配置与会话图片；`prts_avatar_apply` 支持更换用户／AI 头像、基于已有原图重新裁剪和恢复默认。头像在当前 DSH 实例共享，保存替换后不保留旧原图；仅在 Baker 会话主题下显示，工具不会切换设备本地的主题选项。

### 自定义会话背景

在主题设置的“会话外观 → 会话背景”中，可选择默认背景、分区背景或完整背景。分区模式分别设置左侧边栏与会话正文；只有正文图片时，左侧边栏使用半透明材质显示其下方的背景；左侧边栏有独立图片时，仍显示自己的图片。右侧边栏在正文或完整背景上也使用半透明材质。完整模式以同一张图片贯穿各区域。图片居中铺满，可调节背景遮罩提高文字可读性；分区模式下正文图片固定在主框架坐标上，侧栏展开时不重新缩放图片。切换模式或恢复默认设置不会删除图片，点击“移除图片”才会删除对应素材。

支持 PNG、JPEG、WebP、AVIF，单张不超过 10 MB、4000 万像素。服务端自动转为 WebP 并限制在 3840×2160 内，保存在 `$DSH_HOME/plugins/dsh-theme-prts/backgrounds`。替换或移除后清理旧图片，不保留历史原图。模式和遮罩通过 DSH 原生配置同步，图片在当前实例共享。

自定义背景下，可分别调整左侧边栏、右侧边栏、设置侧栏、Baker 气泡和经典主题用户消息的材质透明度，默认值依次为 94%、94%、70%、50%、50%（数值越高越透明）。左侧边栏与右侧边栏的透明度和模糊度可独立设置；旧配置没有右侧边栏数值时，初始沿用左侧边栏数值。圆环支持鼠标或触屏拖动、方向键微调与直接输入百分比；拖动时本地预览，松手保存，Esc 或指针取消时回退。对应图片启用后，还可用滑杆调整模糊度（0–32px，默认依次为 8、8、12、8、8px），调节时预览，松手后保存。透明度和模糊度均可单独恢复默认；纯色背景不显示模糊度调节。右侧边栏材质需要启用正文或完整背景；设置侧栏材质需要启用左侧边栏或完整背景；消息材质需要启用正文或完整背景，并在相应会话主题下生效。

“会话主题”和“会话背景”分为独立设置页。输入框增强毛玻璃位于背景页：默认背景下可以开关，分区或完整背景下始终开启，切回默认背景时恢复原有开关选择。Baker 可开启“回复完成前显示加载动画”（默认关闭），每轮正在生成的正文暂以三点明暗动画代替，完成或中断后显示收到的正文；经典主题、思考过程与工具卡片不受此开关影响。

背景图片可设置独立的保护区域：点击「保护重要区域」，在弹窗中拖动默认保护框移动或拖动四边或四角缩放，原图边缘显示百分比坐标尺。侧栏按当前高度并排预览较窄／较宽侧栏，正文与完整背景并排预览横向／纵向窗口，实时显示裁剪效果，无法保留完整区域时仅在设置中提示。保存后保持居中铺满，仅在必要时最小幅度移动图片以保住保护框；框无法完整容纳时，横向优先保留中心、纵向优先保留顶端，并限制偏移以避免露底。清除保护区域后恢复居中裁剪；替换图片会清除旧框。保护区域随图片在当前实例同步，并包含在完整主题导入导出中。

### 导入与导出主题

点击主题设置底部、与「恢复默认」并列的「导入与导出」，在弹窗中下载 `.prts-theme.json` 文件。「包含自定义素材」默认勾选：包含全部主题设置，以及当前已配置的背景图片、用户／AI 头像、首页与正文徽记及排列。头像保留原图和裁剪参数，徽记保留原图和编辑参数，背景保存当前使用的 WebP 图片；历史素材和临时草稿不包含在内。取消勾选则仅导出设置。

导入时先读取文件并显示摘要，确认后保存到当前 DSH 实例。仅配置文件保留目标端现有素材；完整文件替换素材及徽记排列，空素材项恢复默认。旧文件缺少的设置保留当前值；遇到当前版本不认识的配置字段时，确认前会列出导入后无法保留的字段；不支持的文件版本会提示更新。文件最大 160 MB，不包含会话、账户或连接凭据。

每次导入前会发起当前配置备份下载，请确认保存。当前页面也可点击「恢复导入前配置」，恢复最近一次导入前的状态；刷新后请使用下载的备份文件。保存失败会尝试回退已确认写入的素材；若连接中断或其他页面并发修改导致无法完整恢复，会显示错误，可在确认当前状态后重新导入备份。
