🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

极客工作台增强 kaerf15/dsh-geek-ui

DeepSeek Harness
kaerf1553 天前有提交已提供中文文档扫描:含敏感能力

重排页头、扩展侧栏并管理归档会话,让工作台更好用

30/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库根目录无 package.json,浅层子目录有 3 份 dsh 插件清单(dsh-geek-archive/package.json、dsh-geek-header/package.json、dsh-geek-sidebar/package.json),无法唯一定位安装名。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kaerf15/dsh-geek-ui
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 53 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/11/3) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库根目录无 package.json,浅层子目录有 3 份 dsh 插件清单(dsh-geek-archive/package.json、dsh-geek-header/package.json、dsh-geek-sidebar/package.json),无法唯一定位安装名

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-geek-ui(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:18:11

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 63 处,展示前 28 条)
  • 删除本地文件递归
    dsh-geek-archive/lib/archive.js:133
    rmSync(sessionDirPath(cwd, id), { recursive: true, force: true })
  • 发起网络请求
    dsh-geek-archive/lib/client.js:22
    const res = await fetch(API + path, {
  • 读取本地文件
    dsh-geek-header/parts/smoke.mjs:9
    const read = (p) => readFileSync(join(ROOT, p), 'utf8')
  • 执行外部命令来自配置/变量
    dsh-geek-header/parts/smoke.mjs:76
    execFileSync(process.execPath, ['--check', join(ROOT, 'lib', 'client.js')], { stdio: 'pipe' })
  • 执行外部命令来自配置/变量
    dsh-geek-header/parts/smoke.mjs:82
    execFileSync(process.execPath, ['--check', join(ROOT, 'index.js')], { stdio: 'pipe' })
  • 发起网络请求
    dsh-geek-sidebar/lib/client.js:24
    const res = await fetch(API + path, {
  • 写入剪贴板
    dsh-geek-sidebar/lib/client.js:2473
    ? navigator.clipboard.writeText(text).then(done, done)
  • 写入剪贴板
    dsh-geek-sidebar/lib/client.js:4978
    navigator.clipboard.writeText(clean).catch(() => {});
  • 读取本地文件
    dsh-geek-sidebar/parts/build.mjs:16
    const read = (p) => readFileSync(p, 'utf8')
  • 读取本地文件
    dsh-geek-sidebar/parts/build.mjs:20
    const files = readdirSync(WB_DIR)
  • 写入本地文件
    dsh-geek-sidebar/parts/build.mjs:52
    writeFileSync(join(ROOT, 'lib', 'client.js'), out)
  • 发起网络请求
    dsh-geek-sidebar/parts/head.js:24
    const res = await fetch(API + path, {
  • 执行外部命令来自配置/变量
    dsh-geek-sidebar/parts/smoke.mjs:20
    exec(r.command, { timeout: r.timeoutMs || 1e4, env: { ...process.env, ...(r.env || {}) }, maxBuffer: 32 * 1024 * 1024 }, (err, stdout, stderr) => {
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:28
    async stat(p) { const st = statSync(p); return { type: st.isDirectory() ? 'directory' : st.isFile() ? 'file' : 'other', size: st.size } },
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:29
    async readText(p) { return readFileSync(p, 'utf8') },
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:32
    return readdirSync(p, { withFileTypes: true }).map((d) => ({ name: d.name, type: d.isDirectory() ? 'directory' : 'file', size: null, target: join(p, d
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:79
    const src = files.map((f) => readFileSync(new URL('./workbench/' + f, import.meta.url), 'utf8')).join('\n')
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:96
    writeFileSync(join(dir, 'smoke-a.txt'), 'hello smoke', 'utf8')
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:97
    writeFileSync(join(dir, 'smoke-b.bin'), Buffer.from([0, 1, 2, 255]))
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:98
    writeFileSync(join(dir, '.secret'), 'hidden', 'utf8')
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:99
    mkdirSync(join(dir, 'sub'))
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:101
    mkdirSync(skillDir)
  • 写入本地文件
    dsh-geek-sidebar/parts/smoke.mjs:138
    writeFileSync(join(dir, 'watched-new.txt'), 'watch-me', 'utf8')
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:178
    ok('writeFile 写盘', wf.ok === true && readFileSync(join(dir, 'smoke-a.txt'), 'utf8') === 'rewritten')
  • 删除本地文件递归
    dsh-geek-sidebar/parts/smoke.mjs:209
    rmSync(goneDir, { recursive: true, force: true })
  • 读取本地文件
    dsh-geek-sidebar/parts/smoke.mjs:229
    ok('qnCreate 磁盘写入验证', readFileSync(join(qnDirTmp, '测试便签.md'), 'utf8').includes('这是第一条便签正文'))
  • 删除本地文件递归
    dsh-geek-sidebar/parts/smoke.mjs:311
    if (landed) rmSync(join(trashDir, landed), { recursive: true, force: true })
  • 删除本地文件递归
    dsh-geek-sidebar/parts/smoke.mjs:765
    rmSync(dir, { recursive: true, force: true })
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 重排页头
  • 扩展侧栏
  • 管理归档会话

README

由 DeepSeek 最新模型翻译生成
DSH Geek UI DeepSeek Harness Web 工作台的极客增强组件:页头重排 + 极客侧栏 + 归档管理,三个让 dsh web 好用到离不开的静态 bundle。 npm npm npm dsh license 这是什么 dsh web 官方工作台够用但偏“素”:侧栏只有会话列表、页头按钮挤成一排、归档进去就出不来。Geek UI 把这三块补齐——不 fork、不改平台源码,纯 Cordis 插件(slot 注入 + host HTTP 路由),装完即用,随 profile 重启常驻。 | bundle | 版本 | 一句话 | | dsh-geek-sidebar | v2.1.0 | 工作台侧栏 + 文件管理器/预览 + 便签与划选引用 + 技能管理 + @文件提及桥 | | dsh-geek-header | v0.5.0 | 页头重排分段条 + 第三方插件区 + 生成标题 + 系统提示词查看 | | dsh-geek-archive | v1.2.1 | 已归档会话「放回对话 / 永久删除」,补上平台缺失的反向操作 | 安装 dsh plugin --profile web add dsh-geek-sidebar dsh plugin --profile web add dsh-geek-header
展开完整文档(README 剩余 1 节)
DSH Geek UI

DeepSeek Harness Web 工作台的极客增强组件:页头重排 + 极客侧栏 + 归档管理,三个让 dsh web 好用到离不开的静态 bundle。

npm npm npm dsh license

这是什么

dsh web 官方工作台够用但偏“素”:侧栏只有会话列表、页头按钮挤成一排、归档进去就出不来。Geek UI 把这三块补齐——不 fork、不改平台源码,纯 Cordis 插件(slot 注入 + host HTTP 路由),装完即用,随 profile 重启常驻。

| bundle | 版本 | 一句话 |
| dsh-geek-sidebar | v2.1.0 | 工作台侧栏 + 文件管理器/预览 + 便签与划选引用 + 技能管理 + @文件提及桥 |
| dsh-geek-header | v0.5.0 | 页头重排分段条 + 第三方插件区 + 生成标题 + 系统提示词查看 |
| dsh-geek-archive | v1.2.1 | 已归档会话「放回对话 / 永久删除」,补上平台缺失的反向操作 |

安装

dsh plugin --profile web add dsh-geek-sidebar
dsh plugin --profile web add dsh-geek-header
dsh plugin --profile web add dsh-geek-archive # 可选

自定义了 profile 名就把 web 换成你的。装完刷新浏览器即可,无需改任何配置。

⚠ 平台版本要求:dsh ≥ 0.1.5-rc.1,与 0.1.2 及更早版本不兼容。
本轮是跟随平台 0.1.5 的側边栏大改:预览从旧版依赖的 details 栏(平台已移除)迁入官方右栏 tab 体系,页头适配 0.1.5 新盒模型与新增的 corner 槽。仍在 0.1.2 的用户请装旧版(sidebar v2.0.5 / header v0.4.7 / archive v1.2.0)。

dsh-geek-sidebar · 极客侧栏

1. 项目与会话管理

左栏就是你的项目指挥部:顶部一键切换工作区(还能自定义任意目录)、git 分支徽标一目了然;正在跑的会话有个小圆点提醒你,别的工作区有几条会话在跑,工作区按钮上的数字徽标直接告诉你,不用挨个点开看。每个项目的会话按时间列开,右键即归档。git worktree 也能直接查看和新建。

项目与会话管理

2. @文件提及——把文件带进对话有两条路

在输入框敲一个 @,当前项目的文件立刻列出来等你挑,路径随打随筛、可逐级进入目录;或者干脆在文件管理器里找到它,行上那个 @ 按钮点一下,它就进了输入框。选中哪个,哪个文件就进入对话上下文——从此不用手动复制粘贴路径。

@功能

3. 文件管理器与预览

侧栏下半区是完整的文件树:上传、下载打包、搜索、两击确认删除都有;chat 里的产出 chip 和工具卡文件链接点击不跳外部应用,直接在官方右侧栏的「预览」页打开(页头 ③ 展开钮即预览入口)。Markdown 有 Source / Preview / Diff 三态,代码高亮、CSV 表格、图片缩放齐全,改完点“确定保存”才落盘,不点头也不担心误存。右栏分栏后每栏预览独立,可同时对照两个文件;文件 tab 可跨栏拖拽移动(0.1.5 新增)。

文件预览与编辑

4. 知识库目录

侧栏底部“笔记”页签是你所有长效知识库目录的入口:多个目录随时切换,隐藏文件也照常显示。点开一篇,右边就是排版好的预览。

笔记功能

5. 便签与划选引用

底栏一键打开全局便签抽屉,Typora 式编辑即预览,轻量随手记、不绑会话。在聊天记录中划选任意文本自动弹出气泡,可一键“存入便签”,或生成智能紧凑小胶囊“引用到对话”(长文本自动提取首尾词,输入框不刷屏,发送时完整展开交付模型)。每条便签与目录行上也有 @ 按钮:便签 @ 按该 .md 文件路径提成 @ 提及(与第 2 点的文件 @ 同机制),目录 @ 则把目录下全部便签各自按路径提成 @。成熟便签支持 AI 提炼标题、跨目录总览拖拽归类,以及一键转存至知识库或当前项目,存储目录随心自定义。

便签与划选引用

6. skill 管理

底栏“技能”一键打开技能中心:你装过的所有技能都在这儿,能看来源、版本和说明,开关随点随切,还能直接搜索安装新技能、检查更新。

skill 管理

dsh-geek-header · 页头重排(v0.5.0)

第一行第三方插件区(geekUiHeader 服务),第二行收纳页签/谱系/动作平铺成统一分段条,面包屑文字与 Session log 隐藏,拥挤时动作折叠进 ⋯ 菜单;「生成标题」读整段对话、用你当前选中的模型生成会话标题;「系统提示词」展开查看当前生效的完整 system 字段(会话流内对应行已隐藏)。

┌──────────────────────────────────────────────────┐
│ [第三方插件区 · geekUiHeader] │ ← 第一行,空则整行塌陷
│ [对话][轨迹][生成标题][系统提示词][谱系][动作…][⋯] │ ← 第二行,pi-web 式分段条
└──────────────────────────────────────────────────┘

实拍(对话视图右上角:对话/轨迹 页签 + 生成标题,挤不下的动作折进 ⋯;面包屑文字与 Session log 已隐藏):

页头重排

布局细节与第三方接入方式见 dsh-geek-header/README.md。

dsh-geek-archive · 归档管理(v1.2.1)

dsh 官方的归档是单向门——归档了就再也回不来。这个插件在设置面板加一节「归档管理」(导航末位,归档盒图标),列出全部已归档会话,每条两个按钮:放回对话(解除归档回到列表)和删除(解除归档 + 删落盘目录 + 通知客户端剔除,两次点击确认)。host 端经 workspace registry 私有方法读写归档集合,改动由平台 WorkspaceFeed 自动推帧,前端零刷新。

归档管理

实现细节与已知边界见 dsh-geek-archive/README.md。

仓库结构

dsh-geek-ui/
├── dsh-geek-sidebar/ # 极客侧栏(host 路由 + client 五 feature) ├── dsh-geek-header/ # 页头重排 + 生成标题 ├── dsh-geek-archive/ # 归档放回/删除 └── screenshots/ # 本文实拍图

三个包均为自包含静态 bundle:host 半只挂 /__dsh-__/ 前缀的 HTTP 路由,client 半经 window.__ModuleLoader__ 直发浏览器,无打包器、无构建产物依赖。均标注 dsh.verifiedWith: 0.1.5-rc.1,脆弱点(私有面、DOM 结构依赖)在各自源码注释中登记。

开发

各包内可独立验证:

cd dsh-geek-sidebar && npm run build && npm test # parts/*.js 拼装 lib/client.js + smoke
cd dsh-geek-header && npm test
cd dsh-geek-archive && npm test

部署到本机 profile:~/.dsh/profiles/web 以 file: 安装,源码改动后在该目录 pnpm install --force 重打包副本。

许可:MIT(dsh-geek-sidebar 部分设计参考自 pi-web,同 MIT)
预览分享卡片长什么样 ↓kaerf15/dsh-geek-ui
分享 · DeepSeek Harness Hub
kaerf15/dsh-geek-ui

重排页头、扩展侧栏并管理归档会话,让工作台更好用

这是你的仓库?认领条目

回到顶部