dsh-devpanel

devtested: passnpmMIT

A developer toolkit for the DeepSeek Harness (DSH) web console: a real multi-tab PTY terminal docked under the composer plus an AI-output file browser sidebar with syntax highlighting, Markdown rendering and image preview.

下载量 / Downloads
1,314
依赖体积 / node_modules
14.48 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-devpanel

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-devpanel

维护模式。 DeepSeek Harness 0.2 已内置本插件大部分能力的官方实现,因此 dsh-devpanel 不再积极开发,仅会修复关键问题。已安装的插件可继续使用;新用户建议优先使用下列官方能力。
| 插件能力 | 官方替代(dsh 0.2+) |
| --- | --- |
| 终端面板 —— 多标签 PTY | @deepseek-ai/dsh-client-ui-sidebar-terminal —— 右侧栏交互式 shell 标签页(xterm.js、重连、shell 选择) |
| 使用统计面板 | @deepseek-ai/dsh-session-stats,以及 @deepseek-ai/dsh-client-ui-chat 中的 composer 统计胶囊 / 单回合用量面板 |
| AI 输出文件侧边栏 | (无完全替代) —— @deepseek-ai/dsh-client-ui-deliverables 只展示单回合变更文件,@deepseek-ai/dsh-client-ui-sidebar-files 浏览整个工作区,均无法列出「本会话 AI 产出的全部文件」。这是插件仅剩的独特价值。 |
DeepSeek Harness(DSH)开发者工具箱:为 Web 控制台带来真实的 PTY 多标签终端、AI 输出文件浏览器,以及 AI+终端双维使用统计面板。

dsh-devpanel 是 DeepSeek Harness 的一个插件,为浏览器控制台带来三大能力:

  • 终端面板 —— 停靠在输入框下方的多标签真实 PTY 终端。可以开始/终止进程、手工输入命令,实时查看输出,体验和原生终端一致。
  • AI 输出侧边栏 —— 右侧文件浏览器,列出当前会话中 AI 写入或编辑过的所有文件,以及 shell 命令创建或修改的文件,支持语法高亮、Markdown 渲染和图片预览。
  • 使用统计面板 —— 模态仪表盘,把两个维度合并成一个「我今天到底干了多少活」视图:AI 活动(Token、调用、消息、模型占比)与终端活动(会话数、提交的命令、活跃时长 —— 只有 dsh-devpanel 能看到这个维度,因为它拥有终端面板)。

终端与文件界面由 TerminalPanelService 驱动,统计面板由 UsageService 驱动。两者分别封装 harness 的 ctx.subprocess.spawnTerminal PTY 原语与 session/event 事件流 + 终端事件,并通过 Typert Remote 边界暴露给浏览器 —— 无需改动 harness 本身。Gateway 通过各自的 typertRemote 绑定自动发现这两个服务。

功能特性

  • 真实 PTY 会话 —— 以系统登录 shell($SHELL,缺省回退 /bin/sh)在会话工作目录下启动进程,并包裹一层使 shell 导出真实 TERM(harness 默认以 TERM=dumb fork PTY,会导致 clear 失效、提示符字形乱码)。git、ls、提示符的彩色输出与原生终端一致。
  • 多标签终端对话框 —— 停靠在输入框下方,带标签栏、shell 徽标、+ 新建标签、逐标签关闭,以及一键关闭全部会话的按钮。关闭最后一个标签会连面板一起关闭;重新打开时自动新建一个默认标签。
  • 原生终端行为 —— 选中即复制到剪贴板,Cmd/Ctrl+Shift+V 粘贴,clear 正常清屏,跨任意字节分片的多字节 UTF-8 输出不会出现 ? 乱码。
  • 进程控制 —— 可向前台进程组投递 SIGINT / SIGTERM / SIGKILL / SIGTSTP / SIGHUP,或带 2 秒宽限期终止捕获的进程树。
  • 增量输出读取 —— 浏览器轮询 read 获取增量输出;宿主端为每个会话保留有界回滚缓冲(保留尾部 1 MB),长输出可浏览且内存不会无限增长。
  • AI 输出文件侧边栏 —— 收集当前会话 write / edit 工具调用产生的文件(来源包括 diff 视图与原始参数,按首次出现顺序去重),以及 shell 命令产物(从终端卡片命令/输出提取路径,经宿主端"存在 + mtime 时间窗"校验),通过 Remote 读取内容,按图片、Markdown、高亮代码或纯文本渲染,并支持全屏查看。
  • AI+终端双维使用统计 —— 会话头部柱状图图标打开的模态仪表盘:把 session/event 事件流的 AI 侧(Token、调用、消息、模型占比、响应时长、思考度)与终端侧(会话数、提交命令、活跃时长)折叠成概览卡片、每日双系列趋势、年度活跃热力图、分页的调用/终端明细表,以及 CSV/JSON 导出。历史会话在启动时尽力通过 ctx.sessionQuery 回放;索引以防抖、原子写方式持久化到 DSH_HOME/devpanel/usage-v1.json。
  • 会话级工作目录 —— 终端与相对路径文件读取都基于会话的项目目录解析(缺省回退到用户主目录 / 宿主进程 cwd)。
  • 双语 UI —— 简体中文与英文词典,注册在 toolkit 语言命名空间下。
  • 干净的生命周期 —— 插件卸载时终止所有存活 PTY;客户端注销其槽位、移除注入的样式表并卸载 Remote 命名空间。

架构

插件是双面(two-face)bundle,与 harness 客户端预设保持一致:

┌─────────────────────────── 浏览器(web 平台) ───────────────────────────────┐
│  src/client/                                                                 │
│    index.ts               插件主体:挂载 Remote、注册槽位                      │
│    remote.ts              TYPERT_REMOTE 贡献 + ctx.remote 类型               │
│    ConsoleHeaderActions   会话头部三个图标(终端 + 侧边栏 + 统计开关)         │
│    ConsoleSidebar         AI 输出文件浏览器(右侧 details 列)                 │
│    TerminateDialog        多标签 xterm 对话框(输入框 dock 槽)                │
│    UsagePanel             AI+终端双维统计仪表盘(模态浮层)                    │
│    console-store.ts       共享的侧边栏/对话框/统计开关状态                     │
│    console.css.ts         注入的 <style> 标签(无 CSS 流水线)                 │
│    locales.ts             中 / 英词典(命名空间 'toolkit')                    │
└───────────────▲──────────────────────────────────────────────────────────────┘
                │  Typert Remote(JSON 线上格式,zod 严格编解码)
┌───────────────┴──────────────────────────── 宿主(node) ────────────────────┐
│  src/index.ts         TerminalPanelService(TypertRemoteService)             │
│  src/usage.ts         UsageService(TypertRemoteService,usagePanel 命名空间)│
│  src/typert.host.ts   typert-loader 消费的 TYPERT 清单                        │
│  src/types.ts         终端线上词汇(纯数据,无运行时依赖)                     │
│  src/usage-types.ts   统计线上词汇(纯数据)                                  │
│  src/usage-schemas.ts 统计 zod 编解码(纯数据)                               │
└──────────────────────────────────────────────────────────────────────────────┘
  • 宿主端 —— TerminalPanelService(src/index.ts)继承 TypertRemoteService,维护一张无所有者的会话表。每个会话把来自 ctx.subprocess.spawnTerminal 的 SubprocessTerminalHandle 与流式 TextDecoder(保证跨两个输出分片的多字节字符不断裂)、有界回滚缓冲和增量读取游标组合在一起,并在共享 ctx 上发出终端生命周期事件(devpanel/terminal/spawn|command|exit|dispose)。会话生命周期跟随插件:构造函数注册了一个 fiber effect,在销毁时终止所有存活 PTY。UsageService(src/usage.ts)在 usagePanel 命名空间下继承 TypertRemoteService:它把实时 session/event 事件流折叠成按聊天会话归类的 AI 活动记录、把终端事件折叠成按终端会话归类的记录,以防抖、原子写方式把索引持久化到 DSH_HOME/devpanel/usage-v1.json,尽力通过 ctx.sessionQuery 回放历史会话,并提供聚合快照、调用/终端明细分页与 CSV/JSON 导出。插件的 apply 先装配 UsageService(确保在任何终端 spawn 之前完成订阅),再装配 TerminalPanelService。
  • 客户端(src/client/)—— apply 先挂载 TYPERT_REMOTE 贡献(对话框注入它之前命名空间必须已挂载),然后基于同一个共享 console store 贡献三个槽位:
  • conversation.session.header.utilities(id toolkit-actions,order 10)—— 终端对话框、侧边栏与使用统计三个开关图标;
  • details(priority -10)—— AI 输出文件浏览器;更低的优先级会遮蔽 harness 自带 DetailsPanel(最低者渲染,所以 -10 胜出),并通过 ctx.layout 驱动右侧列;
  • conversation.composer.dock(id toolkit-dialog,order 10)—— 多标签终端对话框。

使用统计开关把 UsagePanel 渲染成固定模态浮层,通过 usagePanel Remote face 拉取快照、明细与导出。

由于插件自己挂载 remote.terminalPanel 与 remote.usagePanel,它通过 ctx.get 从服务仓库读取存活实例,而不是声明静态 inject 条目,从而避免自等死锁(self-wait deadlock)。

  • 线上词汇 —— src/types.ts(终端)与 src/usage-types.ts(统计)承载跨越 Remote 边界的 JSON 安全结构,宿主编码与客户端描述符共用;src/usage-schemas.ts 补充统计的 zod 编解码。src/typert.host.ts 提供一份严格手写的清单,确保无论模块身份如何端点都已知(独立安装的 bundle 若走运行时反射回退会 404)。

安装

dsh-devpanel 作为 workspace 包与 harness 源码并列开发。环境要求:

  • Node ^22.19.0 || >=24.0.0
  • DeepSeek Harness dsh-v0.2.0 及以上——本插件依赖的右侧栏 tab 体系与若干客户端/子进程接口只在 0.2 中提供
  • 包含 ../deepseek-harness 的 pnpm workspace(见 pnpm-workspace.yaml)
# 在 workspace 根目录
pnpm install
pnpm --filter dsh-devpanel build
最低 harness 版本。 0.2 移除了插件原先占用的客户端 details 槽位与 ctx.layout 的开合动作:右侧栏改由 @deepseek-ai/dsh-client-ui-sidebar-right 拥有,本插件以「右侧栏 tab 类型」的形式重新接入(类型注册进 ctx.sidebarRightTabs

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::6,最后更新 2026-10-15

Links

GitHub · Homepage · npm

Same category