deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
把 DeepSeek Harness 的 Web UI 换成一整块泰拉瑞亚(Terraria)像素世界——向导陪你写代码。

dsh_theme_terraria(npm 包名 dsh-theme-terraria)是 DeepSeek Harness(dsh)的泰拉瑞亚主题插件。它用一个自包含的 index.html(约 98 KB,零外部 JS 依赖)替换官方 React 前端,把「AI 编码代理控制台」包装成一场像素冒险:
index.js 导出插件规范硬性要求的 apply(ctx),cordis.patch.yml 声明 dsh.bundle 补丁层,一条 dsh plugin --profile web add dsh-theme-terraria 即可安装/卸载,不改动 dsh 安装中的任何文件。| 官方 UI 概念 | 泰拉瑞亚主题映射 |
|---|---|
| Agent Preset(预设) | 难度档:旅途 / 软核 / 中核 / 硬核 |
| 会话(Session) | 旅途 / 冒险 |
| 用户消息 | 冒险者 |
| 工具审批请求 | 审批石板 |
| 任务清单(todo) | 任务清单 HUD |
| API 密钥状态 | 生命水晶指示灯 |
| 插件组合 | 随难度更换的装备 |
dsh --version 可用^22.19 || >=24 与 pnpm(dsh plugin 内部转发给 pnpm 管理依赖)# 1. 把主题作为插件安装进 web profile
dsh plugin --profile web add dsh-theme-terraria
# 2. 启动 Web 服务
dsh web
# 默认地址:http://127.0.0.1:3080/
dsh plugin add 会把 dsh-theme-terraria 写入 web profile 的依赖与 dsh.profile.bundles 层列表;本插件的 cordis.patch.yml 补丁层停用官方 web-runtime 行并插入同构的 terraria-theme 行,插件入口 index.js 导出的 apply(ctx) 再把官方 @deepseek-ai/dsh-web-app 的前端解析器指向本包的 web/index.html——除换皮外,官方 Web 运行时的全部行为(dist 伺服、/api 信任边界、DSH_WEB_URL、URL 打印)保持不变。
# 从 GitHub 仓库安装
dsh plugin --profile web add github:10086ggqq/dsh_theme_terraria
# 或从本地检出的本仓库安装
dsh plugin --profile web add /path/to/dsh_theme_terraria
在 deepseek-harness 仓库内以源码方式运行 dsh 时,上述命令加
pnpm前缀(如pnpm dsh plugin --profile web add ...、pnpm dsh web)。
sk-...,点「保存密钥」;credentials.set 存到宿主机(.dsh-home/.credentials.yaml),页面本身不持久保存明文;
| 坑 | 现象 | 解法 |
|---|---|---|
| 浏览器缓存旧 UI | 更新插件后页面还是旧样子 | 强制刷新 Ctrl+F5,或地址加 ?v=2 绕过缓存 |
dsh plugin add 失败 |
报 pnpm not found on PATH 或 pnpm 错误 |
dsh plugin 内部转发给 pnpm:安装 pnpm 并重开终端;git 方式安装的报错按提示在 profile 的 pnpm-workspace.yaml 补 allowBuilds 后重试 |
| 密钥保存失败 | toast 报「保存失败」 | 确认 dsh web 由本机终端启动;沙箱化环境可能拦截宿主目录写入 |
| 图片壁纸存不下 | 「图片过大,保存失败」 | localStorage 上限约 5 MB,主题已自动把非 GIF 图片压缩到 1920px JPEG;仍失败请换更小的图或用视频壁纸 |
| 文件夹选择器拿不到完整路径 | 选择文件夹后只有文件夹名 | 浏览器安全限制(所有网页一致)。主题会用「使用 E:\完整\路径」按钮智能回填已注册的同名目录,否则提示手动补全 |
| WebSocket 断线 | 顶部提示「连接已断开,重连中…」 | 属正常自动重连(2 秒间隔);宿主进程退出则需重启 dsh web |
整个 UI 的视觉基调由三层构成:
forest.png)+ 标题屏大树(Tree.png),image-rendering: pixelated 保持像素锐利;支持用户更换(见壁纸系统)。#181e58,内板 #2e3692)、3 px 深色描边(#0e1340)、8 px 圆角、宋体加粗(SimSun/Songti SC)。--gold)标题与高亮、火把橙(--torch)分区标题、羊皮纸白(--parchment)正文,配深色投影 text-shadow: 1px 1px 0 var(--black)。woff2 约 600 KB,内嵌于 web/ 目录,中文渲染无锯齿;游戏主菜单复刻:logo、四个像素菜单项(新的会话 / 继续会话 / 设置 / 人物桌宠)、森林背景上的大树剪影。
xiangdao.png)与红心印记(heart.png),右侧输入框与六个像素按钮:模式选择、工作空间、权限设置、模型选择、停止、发送;
点击「模式选择」弹出泰拉瑞亚人物创建风格弹窗(这是全主题最还原的一处):
Style_1_male_walking.gif)+ 「模式选择」标题;#8a4b7c)、软核(青 #388e8d)、中核(棕 #855526)、硬核(红 #8a3a3b);#6be1d8)+ 内侧微光描边;scale(0.96) 缩放反馈;agentPreset.select 切换后端预设,会话名随之更新。设置弹窗分四区:
credentials.set 存宿主;窄屏下按钮自动换行不遮挡输入框;
读取当前难度对应预设的 cordis.yml,解析出全部已挂载的 dsh 插件:
dsh-persona 向导人格与系统提示词);disabled: true 的插件整行置灰并标注「已停用」;

标题屏「人物桌宠」打开,可以替换对话区里陪伴你的人物,并控制屏幕上游荡的五只桌宠:
object-fit: cover 居中裁切);存 IndexedDB,刷新后自动恢复;照片平滑渲染,默认像素画保持 pixelated 锐利;.md / .markdown 文件导入(拖拽或点击,≤512KB);导入时显示金色进度条,内容自动做去 BOM、统一换行、去首尾空白、64K 字符截断处理后入库;悬停对话区头像可速览性格前 120 字;pointer-events 穿透不挡任何操作),尺寸统一 160px 标准(嘉登 133×160 保持 5:6 比例);显示/隐藏带 0.5s 淡入淡出过渡;每只的开关状态独立存 localStorage(terraria.pet.<id>),刷新保持;宿主页与各 iframe 之间以 postMessage 通信(dsh:pet pause/resume 命令 + dsh:pet-ack 确认 + dsh:pet-ready 就绪握手,按 contentWindow 识别来源),关闭某只即冻结其动画循环省 CPU,互不影响;
主题内置一套 8-bit 风格 WebAudio 音效引擎——纯振荡器合成(方波),无音频文件、零网络请求:
| 事件 | 频率/时长 | 听感 |
|---|---|---|
助手回复完成(assistant/message) |
660 Hz / 60 ms | 短促「叮」,像拾取金币 |
| 工具审批请求 | 440 Hz / 100 ms | 中音提示,唤起注意 |
| 向用户提问(ask_user) | 520 Hz / 100 ms | 上扬询问音 |
| 回合失败 / 发送失败 | 180 Hz / 100 ms | 低沉「咚」,受伤音效 |
设计原则:
try/catch 包裹整个播放流程,无声环境(自动播放策略拦截、无音频设备)静默忽略,绝不抛错。与音效引擎相互独立的一套自定义 BGM:
<audio> 循环播放;音量滑块 0–100 实时调节并存 localStorage;顶栏「音乐:开/关」与设置内「播放/暂停」双向同步文字状态;主题在交互细节里埋了一套贯穿始终的冒险叙事,细心的玩家会陆续发现:
| 优化点 | 做法 |
|---|---|
| 零框架运行时 | 整个 UI 是原生 DOM 操作,无 React/Vue 运行时;构建产物仅一个 98 KB HTML + 静态资源 |
| 像素字体单文件 | Fusion Pixel woff2 一次加载全站复用,无 FOIT 闪烁(font-display 由浏览器默认 swap) |
| 壁纸自动压缩 | 上传图片统一缩放到最长边 1920px、JPEG 质量 85%,localStorage 存量可控 |
| 视频与音乐走 IndexedDB | 动态壁纸(≤512 MB)与自定义 BGM(≤64 MB)都存 IndexedDB,绕开 localStorage 5 MB 上限;URL.createObjectURL 引用,更换时 revokeObjectURL 释放内存 |
| 渲染锐利而便宜 | image-rendering: pixelated 让低分辨率素材放大不加滤镜,GPU 开销近乎为零 |
| 消息流局部更新 | 流式输出只改一个气泡的 textContent,不重排整列表 |
#f4f3e6 级别羊皮纸白 on #2e3692 深蓝),关键操作(发送/保存)用金色按钮强调;git/ <- 本仓库 = 一个标准 dsh 插件包(可直接上传 GitHub)
├── package.json <- 插件清单:包名 dsh-theme-terraria、main 入口、
│ dsh.bundle 补丁声明、peer 依赖
├── index.js <- 插件入口:导出 apply(ctx),dsh plugin add 加载此模块
├── cordis.patch.yml <- bundle 补丁层:停用官方 web-runtime,插入 terraria-theme 行
├── web/ <- 插件伺服的主题前端 dist
│ ├── index.html 主题全部源码(HTML + CSS + JS 单文件)
│ ├── forest.png 默认森林壁纸
│ ├── Tree.png 标题屏大树
│ ├── xiangdao.png 向导头像立绘
│ ├── heart.png 红心印记
│ ├── Style_1_male_walking.gif 行走人物(模式弹窗)
│ ├── fusion-pixel-12px.woff2 像素字体
│ ├── favicon.svg 站点图标
│ ├── eoc_pet.html 克鲁苏之眼桌宠(iframe 内容页,含 postMessage 通信)
│ ├── slimeking_pet.html 史莱姆王桌宠(iframe 内容页,含 postMessage 通信)
│ ├── draedon_pet.html 嘉登桌宠(iframe 内容页,含 postMessage 通信)
│ ├── dog_pet.html 神明吞噬者桌宠(iframe 内容页,含 postMessage 通信)
│ ├── cryogen_pet.html 极地之灵桌宠(iframe 内容页,含 postMessage 通信)
│ └── manifest.webmanifest PWA 清单
├── screenshots/ <- 实操截图(7 张)
│ ├── title-screen.png 标题屏
│ ├── chat-main.png 主对话界面
│ ├── mode-select.png 模式选择弹窗(人物创建)
│ ├── settings.png 设置弹窗(密钥/壁纸/插件)
│ ├── plugin-manager.png 插件管理器
│ ├── workspace.png 工作空间弹窗
│ └── desk-pet.png 人物桌宠弹窗
├── README.md <- 中文文档(本文件)
├── README_EN.md <- English documentation
└── theme.rar <- 旧版手动安装存档(插件化之前的方式,可删除)
package.json 的 main 指向 index.js,其中导出 name('terraria-theme')与 apply(ctx, config)——导出 apply(ctx) 是 DeepSeek Harness 插件规范的硬性要求,也是 dsh plugin add 能正确加载本主题的原因;@deepseek-ai/dsh-web-app 插件的前端 dist 解析器(WebApp.internals.resolveDistIndex)替换为指向本包的 web/index.html,再以传入配置委托挂载官方插件——主题不重造 Web 运行时,只替换伺服的前端;package.json 声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },dsh plugin --profile web add 安装时据此把本包加入 profile 的 dsh.profile.bundles 层列表;@deepseek-ai/dsh-web-app ^0.1.0-rc.5,由 dsh 安装侧统一解析,保证与官方 Web 运行时共享同一份 cordis 实例。# 修改主题:直接编辑 web/index.html(无构建步骤),重启 dsh web 生效
# 更新已安装的主题插件
dsh plugin --profile web update dsh-theme-terraria
dsh plugin --profile web remove dsh-theme-terraria
dsh web # 重启后即恢复官方 React 前端
主题通过插件机制整体挂载/卸载,不修改 dsh 安装中的任何文件,卸载零残留。浏览器端的个性化数据(壁纸、背景音乐、音效开关、审批偏好)都存在浏览器 localStorage / IndexedDB,清除站点数据即可完全抹掉。
dsh-plugin——收录爬虫据此识别本仓库是一个 DSH 插件;dsh plugin --profile web add dsh-theme-terraria,插件入口 index.js 导出 apply(ctx),满足收录要求;https://dsh-plugin.org/plugins/10086ggqq/dsh_theme_terraria;若收录后的实际详情页地址与之不同,把徽章链接同步改成实际地址即可。愿向导的光照亮你的每一次编译。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。