UI Enhancements

dsh-vscode-sidebar

MmMmaru/dsh-vscode-sidebar · ★ 1

MmMmaru

simple sidebar for deepseek-harness

README body is shown in Chinese.

License
MIT
Added
2026-08-17
Maintenance
active
Install kind
github
Manifest details
Manifest status
Not verified
Manifest path
-
Manifest checked
2026-08-19
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add github:MmMmaru/dsh-vscode-sidebar

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 界面展示
  2. 核心原理
  3. 安装
  4. dsh插件
  5. vscode 插件
  6. Github repo
  7. 功能支持
  8. 会话管理(上层栏)
  9. 对话区(中间层)
  10. 输入区(下层栏 Composer)
  11. SubagentDock 管理栏
  12. 设置页
  13. 后端接入与 workspace 归属
  14. 从源码安装
  15. 测试
  16. 待支持

DeepSeek harness(dsh)的 VSCode 侧边栏插件。插件只做前端界面,后端能力全部复用本机 dsh web host(loopback,无实例时自动拉起)。

vibe coded by kimi k3 & GPT 5.6 & deepseek v4.

界面展示

界面预览

核心原理

[VSCode Webview: React UI(会话/对话/审批/设置)]
        │ postMessage 桥协议 (shared/bridge.ts)
        ▼
[Bridge + SidebarProvider]  ◄── 广播 control/workspace/session/remote 四路事件帧、host-status
        │ 透传 rpc,以及审批 / 提问的应答
        ▼
[DshClient(extension 进程, Node ≥22)]
   │                                    │
   │ POST /api/<namespace>/<method>     │ WS /api/remote.mux(单条载体)
   │ 信封 {type:'client-request',       │  ├─ session/control   队列 / jobs / 投影
   │       rpcId, method, payload:{args}│  ├─ session/follow    会话流水快照 + 增量
   │ 应答 {type:'server-response',      │  ├─ workspace/follow  工作区与归档集合
   │       rpcId, result:{ok,value}}    │  └─ $events           emit / waterfall / cancel
   ▼                                    ▼
[HostManager: 探测 127.0.0.1:3080..3089 → 无则 spawn `dsh web`]  (只连 loopback)
        │ spawn / 复用(能力探测,不再比较版本号)
        ▼
[dsh web host 进程]
  [webserver: createServer + 'upgrade' 分发]  ── /api/* 请求、WS 升级
        │
  [client-connection: isTrustedApiRequest 信任门 → 签名 cookie 鉴权 → 路由分发]
        │
  [api-gateway(Typert Remote 服务端)]
    ├─ unary: session/* ・ workspace/* ・ settings/* ・ credentials/* 等命名空间
    ├─ $events: 订阅 ctx 事件总线,把审批 / 提问等做成 waterfall,应答由
    │           POST /api/$events/result 按 eventId 结算
    └─ 流: session/control ・ session/follow ・ workspace/follow …
        │ ctx.on('session/event') 等
        ▼
[Session / Agent / workspace 注册表(harness 核心)]

协议版本要求:dsh ≥ 0.1.2-rc.1。自该版本起 apiproxy(POST /api/<method>、 /api/events.mux、/api/events.host、host.describe)已被移除,只有 api-gateway 被挂载; 更早的 dsh 上插件会报"未提供 Typert Remote 接口"。已在 0.1.5-rc.1 / 0.1.5-rc.2 上验证。

安装

dsh插件

确保dsh已经安装 npx @deepseek-ai/dsh web

vscode 插件

vscode 插件

Github repo

Github repo

功能支持

会话管理(上层栏)

  • 会话列表按当前 VSCode 工程目录过滤,只显示本项目的会话;列表项含状态点、标题、相对时间,超出显示 "View all (N)"
  • 历史下拉:时钟按钮 / View all 展开带搜索的浮层,点外部或 Esc 收起
  • 状态指示:审批/提问等待=琥珀呼吸点(优先级最高),运行中=旋转圈,执行完未读=绿点(选中会话即清除),常态无点
  • 运行计数:有后台会话运行时,历史按钮变为旋转圈 + 中心数字(运行中数量),点击仍展开历史下拉
  • 会话操作:重命名、删除(ConfirmModal 确认,实时从列表消失)、Fork(从已完成回合分叉);⋯ 菜单与触发器同行向左侧浮出
  • 空会话复用:当前会话仍为空时点"新建对话"直接复用,不产生重复空会话
  • 进入会话后列表收起为 Chats 头部,历史走时钟下拉

对话区(中间层)

  • Assistant 回复 Markdown 流式渲染:流式期间代码块/公式按纯文本显示,回合结束后完整渲染(代码块带复制按钮)
  • Think 推理块折叠行:单行图标 + 摘要,流式中摘要跟随最新一行,点击展开全文
  • 工具调用默认折叠为单行(图标 + 工具名 + 摘要,错误红点),点击展开为卡片:Bash 终端卡 / Edit·Write diff 卡 / Read 行号文件卡 / Grep·Glob 搜索结果卡 / Web 搜索引用卡;subagent 工具调用递归缩进
  • 特殊行:上下文注入折叠行、历史压缩标记、模型重试行、回合错误、token 上限提示、运行状态行("Deep diving...")
  • 消息操作:assistant 消息末尾复制(带已复制反馈)+ fork 分支按钮(streaming 时隐藏)
  • 审批 / ask-user 提问 / Plan 评审浮层整块接管输入区:审批含理由、待执行命令与 Refuse / Allow once;提问含单选/多选、自定义输入、分页与 Skip / Submit;Plan 含完整 Markdown 渲染与 Chat about it / Refuse / Approve
  • 滚动:贴底自动跟随、上翻解除、离开底部浮现"回到底部"按钮、历史分页顶部 "Load older"

输入区(下层栏 Composer)

  • 文本框多行自动增高,Enter 发送 / Shift+Enter 换行;随时可输入,无会话时发送自动建会话
  • 斜杠命令提示:输入 / 弹出命令建议——内置宿主命令 /goal、/compact、/plan 优先,其后跟随该会话的技能名(skills/list);输入中过滤,Enter/Tab 选中,Esc 关闭。发送 /-开头的一行消息即斜杠命令:宿主命令注册表里有这个名字时由宿主直接执行(不发给模型),否则作为普通消息交给模型。命令表变化经 commands/change 转发事件同步
  • Esc 打断:运行中按 Esc 中断当前回合(与停止按钮同动作);弹层打开时 Esc 优先关闭弹层,菜单/对话框/输入框内的 Esc 保持原有语义
  • 窄宽度自适应:面板变窄时工具栏按优先级隐藏(权限选择 → 模型 → 上下文环 → IDE 开关 → 附件按钮),发送按钮与输入框永远保留,图标不被挤压变形
  • 权限芯片:Read Only / Workspace Write / Full access(选 Full access 弹风险确认);启动时同步 host 端默认权限,新建会话重置为已保存默认
  • 模型选择器:两级菜单(模型按 provider 分组 + reasoning effort 档位);"记住上次模型"由 host 端实现(新会话自动带回),默认档位读 host 的 modelSelection 投影(next ?? lastUsed)——host.describe 已随新协议移除且没有替代,无会话时的选择暂存、建会话后自动应用
  • 上下文用量环(ContextMeter):按 contextWindow 计算占用,环旁带百分比文本,缺数据不渲染
  • 统计行(StatsLine):输入卡片下方小字——turns/steps、LLM/Tool 耗时、TTFT、tok/s、缓存命中、Input/Output token(数据源为 host 投影帧)
  • 消息队列(QueueDock):运行中发送的消息入队,显示在输入框上方,可编辑/删除/立即插话(Steer)
  • Todo 面板(TodoPanel):agent 使用 todo 工具时任务清单显示在输入框上方
  • 主按钮:静止=发送箭头,运行中=方块停止(重装/切换会话后仍按会话 running 状态正确显示)
  • 附件:+ 按钮 / 拖拽 / 粘贴图片,缩略图 rail 可预览、可移除,超限整批拒绝

SubagentDock 管理栏

  • 列出当前会话的子代理;continuable 且运行中的子代理显示"停止"按钮(subagents/interruptByParent)
  • one-shot / 已结束的子代理只读展示
  • 后台任务(session/control 流的 jobs 帧)渲染只读状态行——协议不支持手动停止,停止权属模型侧 job_kill

设置页

  • 通用:Agent 预设、新会话默认权限模式、语言、外观(跟随 VSCode / 浅色 / 深色)、繁忙时 Enter 行为
  • 模型:provider 列表(已配置/未配置状态)、编辑卡(API key、base URL)、添加/删除提供方;凭据写入 harness 凭据存储
  • 插件:插件设置与清单
  • Agent 预设:预设列表管理

后端接入与 workspace 归属

  • 连接本机 dsh Web Host(loopback):一元调用走 POST /api/<namespace>/<method>,流走单条 WS /api/remote.mux(同一连接承载 session/control、session/follow、workspace/follow 与 $events);断线自动重连并重开全部流,无实例时自动拉起,用户无感
  • 会话归属:以当前 VSCode 工程根目录(cwd)归属会话;新建会话先调 workspace/create(按插件根目录幂等归属)再 session/create,插件会话在 dsh 网页端归入对应 Workspace 统一管理(workspace/create 失败时回退为按 cwd 创建会话)
  • 协议类型 vendored 自 deepseek-harness(见 src/extension/protocol/)

从源码安装

npm install
npm run package   # 产出 VSIX(dist/*.vsix)
code --install-extension dist/dsh-vscode-sidebar-*.vsix

或在 VSCode 中"扩展"面板 → ... → "从 VSIX 安装"。也可以直接从插件市场安装。

测试

npm test          # 单元测试(node:test,协议/store/扩展宿主纯逻辑)
npm run test:e2e  # Playwright 浏览器 E2E(真实扩展宿主代码 + 真实隔离 dsh host)

E2E(tests/e2e/):真实扩展宿主代码(Bridge/DshClient/HostManager,vscode 模块经 esbuild alias 替换为 stub)跑在 Node, Playwright 页面加载真实构建产物 media/main.js,页面与 Node 宿主经 WebSocket 桥接;每个运行自 spawn 一个隔离 dsh host ($DSH_HOME 临时目录 + 拷贝用户 settings/credentials,端口 3200 起探测空闲,结束自清理;永不触碰 3080)。 覆盖五条 TODO 修复回归(IDE 插入 / 提问后台重放 / 跨工作区隔离 / 发送置顶)+ 真实模型对话闭环(结构断言)。

待支持

目前正在让插件美观易用,无限接近与codex extention(bushi) 欢迎issue & PR

TODO