deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
🌐 语言 / Language:中文 | English
在 DeepSeek Harness Web 会话里内嵌一个可折叠的交互式终端:每个 tab 都是一个跑在你本机(host)上的存活 PTY shell,浏览器端用 xterm.js 渲染成真终端。
展开状态 —— 多 tab 终端、快捷命令 chips、设置与固定按钮:

收起状态 —— 紧凑的标题栏:

vim / less 等全屏应用可正常使用。pnpm dsh plugin --profile web add @geebos/dsh-terminal
# 或
npm dsh plugin --profile web add @geebos/dsh-terminal
安装完成后重启 dsh web,会话输入框上方即出现终端标题栏。
+ 新建 tab、× 关闭、■ 结束当前 tab 的 shell。Browser host (dsh web = your machine)
┌────────────────────────────┐ ┌──────────────────────────────────────────┐
│ Terminal component (React) │control RPC │ TerminalService (TypertRemoteService) │
│ tabs / chips / pin / gear │────────────→│ list / save / createTab / closeTab │
│ xterm.js × N (one/tab) │ │ signalTab (agent-scoped) │
│ PtyConnection × N │←═══════════→│ │ spawn/kill │
└────────────────────────────┘data WS │ ↓ │
(binary) │ PtySessionManager (ring/backpressure) │
│ │ subprocess.spawnTerminal() │
│ ↓ │
│ node-pty → sh -c 'TERM=…; exec … -i' │
└──────────────────────────────────────────┘
agent 上下文(会话 cwd、沙箱策略、生命周期钩子)。ws(s)://<origin>/plugins/dsh-terminal/ws):文本帧为 JSON 控制帧(attach/attached/exit/error/signal/resize),二进制帧为原始终端字节;一个连接对应一个 tab。(sessionId, tabId) 必须命中注册表,每 tab 至多一个观察者连接。DSH_TERMINAL_SANDBOX=1 启动 dsh web:PTY 在 spawn 时刻按会话 mode 经 sandbox.confine 包装;存活期间切换 mode 对既有 PTY 无效。handle.resize() 后适配(协议帧已预留)。MesloLGS NF);未安装则图标显示为方块。# 构建
pnpm --filter dsh-terminal build
# 测试(RingBuffer、帧编解码、信任栅栏、PtySessionManager 生命周期/背压、WS 网关集成)
pnpm --filter dsh-terminal test
# 热重载:本仓库 watch 改 src 自动重建 lib/*.js(host 半变更需重启 dsh web)
cd dsh-terminal && npm run dev
依赖说明:@xterm/xterm、@xterm/addon-web-links 内联进 lib/client.js,ws 内联进 lib/index.js(均为 devDependencies);升级 @xterm/xterm 后运行 npm run embed:css 重新生成内嵌样式。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。