Repository navigation
Releases: toddpan/dsh-webapi
Release list
v0.6.1 — 流式对话断流修复:停滞看门狗 + SSE 心跳 + 错误可见化
v0.6.1 · 流式对话断流修复(对齐 pi-web-service 修复)
修复三方集成中「>180s 长对话必然断流」的一组问题(与 pi-web-service 的修复同语义)。
什么是坏了
- 同步入口(
POST /sessions/:id/prompt、OpenAI 非流式chat/completions)按 180s 整轮总耗时超时:长文本生成、多轮工具调用的轮次在 180 秒整被静默掐断,调用方只拿到半截内容(且 HTTP 200、ok:true)。 - SSE 通道(
prompt-stream/events/ OpenAI 流式)无任何心跳:思考或工具执行的长沉默期会被 Nginx / 网关 / 浏览器空闲策略静默掉线。 prompt-stream停滞无终点:轮次卡死时客户端永远挂在打开的 SSE 上。- 事件处理的静默
catch让断流无声无息,无从排查。 - OpenAI 流式在 prompt 提交失败时因「响应头已发出」走不到错误响应,客户端挂在空流上。
修复语义
停滞看门狗取代总时长上限 —— 每收到一个会话事件就重置计时;持续产出(哪怕远超数分钟)绝不打断;只有持续收不到任何会话事件(真停滞)才显式报 turn stalled 收流。
timeoutMs(同步入口):语义由「总时长上限」改为「停滞阈值」,默认 180s,完全兼容。stallTimeoutMs(prompt-stream新增):停滞收流阈值,默认 300s。- 所有 SSE 通道每 15s 下发
': ping'注释帧心跳(标准 SSE / OpenAI 解析器均忽略),收流时自动停止。 - 流内任意内部错误以
error事件显式可见并补done收流。 - OpenAI 流式提交失败按 OpenAI 错误块 +
[DONE]收流。
验证
离线回归 scripts/verify-stream-fix.mjs 四场景全过:
- prompt-stream 完整流 + 16.5s 全静默期心跳保活;
- 停滞看门狗显式
error(turn stalled)+done收流; - 同步
prompt整轮耗时大于阈值时完整返回全部内容(旧语义半途截断); - OpenAI 流式提交失败收到错误块 +
[DONE],不再空流挂死。
安装 / 升级
# GitHub Release tarball
dsh plugin --profile web add \
https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgz
# npm
npm i dsh-web-service@0.6.1
Full Changelog: v0.5.0...v0.6.1(含 v0.6.0:GET /plugins 插件清单接口;以及本版断流修复)。
v0.5.0 — 独立 API 服务启停重构
独立 API 服务启停重构
设置页原来的「服务端口」只有一个输入框和「保存并立即生效」,这次把它重做成一个完整的服务面板:
首次安装自动分配端口并启动,用户可随时停止 / 启动,API 地址随表单实时变化。
交互
- 状态一目了然:
● 运行中 127.0.0.1:31800/已停止 · 独立端口未启动 · 主端口 XXXXX 仍可访问 - API 地址动态显示:改端口或切换监听范围时地址实时预览,标签在
运行中 / 待应用 / 预览间切换;运行中显示真实地址,一键复制 - 动作跟随状态:
启动服务→ 运行中改动后变应用并重启,无改动显示已应用;停止服务独立可用 - 端口留空 = 沿用当前端口(占位符灰显当前值),非法端口就地报错;
自动按钮向服务端要一个空闲端口 - 监听范围:
127.0.0.1(仅本机)/0.0.0.0(局域网,自动列出每条局域网地址并给出安全提醒) - 绑定失败(端口占用等)返回
409,原监听回滚、现状不变,错误原因就地展示
行为
- 安装即用:首次启动自动分配空闲端口(31800–31899,占满回退系统端口)并自动监听
- 状态持久化:运行中的服务在 DSH 重启后自动恢复同一端口;主动停止后重启仍保持停止,端口保留
- 独立服务与 DSH 主 webserver 解耦,
/system/status与dsh_web_service_info都回带稳定端口与 URL
接口
| 操作 | 接口(管理令牌鉴权) |
|---|---|
| 读取状态 | GET /api/v1/api-keys/service |
| 启动 / 换端口 / 换监听范围 | POST /api/v1/api-keys/service/start |
| 停止 | POST /api/v1/api-keys/service/stop |
| 建议空闲端口 | GET /api/v1/api-keys/service/free-port |
| 旧版兼容 | GET / PUT /api/v1/api-keys/port(fixedPort: 0 停止) |
其他
- 去掉与 ONENAT / WorkBuddy 的关联文案和冗余说明,插件保持独立;GUI 侧边栏入口改为「API 服务」
- 新增
service-settings存储,旧版fixedPort配置读取时自动迁移 - 新增 43 项服务生命周期冒烟测试;README / INSTALL / 教程 / SKILL 与设置页截图同步更新
安装
dsh plugin --profile <profile> add dsh-web-service
# 或指定 tarball
dsh plugin --profile <profile> add ./dsh-web-service-0.5.0.tgznpm: npm i dsh-web-service@0.5.0
v0.3.6 — 会话推理强度 / 模式预设 API
v0.3.6 — 会话支持单独调推理强度与模式预设 agentPreset
Sessions API
- 建会话
POST /sessions新增reasoningEffort、agentPreset字段 - 改会话
PATCH /sessions/:idreasoningEffort可与provider/model同传,也可单独传(与当前模型选择合并,无选择记录时返回NO_MODEL_SELECTION)agentPreset宿主支持运行时应用则立即生效;否则仅记录并返回data.preset.applied=false(上层任务级持久化兜底)
- 查会话
GET /sessions/:id回带agentPreset(宿主元数据优先,插件运行时记录兜底) - OpenAPI 规范同步更新
自 v0.3.2 以来的其他变更
- feat(api-keys): API Key 列表支持「复制」已创建的 Key(v0.3.5)
- fix(pages): 修复 GUI 侧边栏内 SWAGGER 等按钮点击无效(v0.3.4)
- feat(pages): 三个 SSR 页面统一 HARNESS 主题;Swagger UI 改为自托管(v0.3.3)
- fix(dist): 提交 lib/ 构建产物,修复从 git 仓库安装后插件不激活
安装(DSH 插件市场 / GitHub 仓库):
dsh plugin add @dsh-external/dsh-web-service@0.3.6
v0.3.2 — 兼容 DSH 0.2.x(修复插件安装被拒)
修复:在 DSH 0.2.x 上安装被拒
DSH 0.2.0-rc.2 运行时自带 @deepseek-ai/dsh-host-webserver@0.2.0-rc.2 与 @deepseek-ai/dsh-tools@0.2.0-rc.2,而本插件此前声明的 peer 范围只到 <0.1.10-0。DSH 在运行 pnpm 之前用 evaluatePluginCompatibility() 校验全部 @deepseek-ai/dsh* peer(预发布版也参与匹配),于是直接拒绝安装:
插件安装失败:@dsh-external/dsh-web-service@0.3.0 与 DSH 0.2.0-rc.2 不兼容 …
实际用到的 API 在 0.2 未变(ctx.webServer.register() / webServer.port、@deepseek-ai/dsh-tools 的 defineTool 与 tools.register()),因此只需放开版本范围,无需改动代码:
@deepseek-ai/dsh-host-webserver、@deepseek-ai/dsh-tools两个范围追加|| >=0.2.0-0 <0.3.0-0(同时覆盖0.2.1-alpha.1),原有 0.1.x 范围保持不变(无回归)
验证(均在 DSH 0.2.0-rc.2 上完成)
- 真实校验函数
evaluatePluginCompatibility():旧 manifest 被拒 → 新 manifest 通过;0.1.5-rc.2/0.1.7-rc.2仍通过 tsc --noEmit类型检查通过;用 0.2.0-rc.2 的dsh-tools/dsh-host-webserver实际装配成功,注册prefix:/api/v1- 在隔离
DSH_HOME中安装本 Release 资产:+ @dsh-external/dsh-web-service 0.3.2,无兼容性拒绝
同时包含(此前未发布的 0.3.0 / 0.3.1 变更)
- 新增
GET/PUT /sessions/{id}/permission:查询与切换会话运行权限(sandbox + approval preset,等价/permission命令并经permissionPresets原生生效) - 建会话入参支持
permission字段 /system/updates归一化 GitHub tag 前缀(v0.1.11→0.1.11),避免展示成vv0.1.11scripts/verify-live.mjs的版本断言改为读package.json
安装
# 始终取最新
dsh plugin --profile web add https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgz
# 固定版本
dsh plugin --profile web add https://github.com/toddpan/dsh-webapi/releases/download/v0.3.2/dsh-web-service-0.3.2.tgz两个资产内容一致,SHA256:ed3db023f292df2bbd80dc1f79ff350bd4201ba82f8e4f08d49db2d47cbfe6f8
兼容 DSH 0.1.0–0.2.x(已在 0.2.0-rc.2 验证;0.1.7-rc.2 为历史运行验证版本)。
v0.1.11 — 修复 tarball 安装后无法装配(关键)
dsh-web-service v0.1.11
关键修复:从 tarball 安装后插件无法装配
裸名 cordis / schemastery 只在带 node_modules 软链的开发仓里解析得到,harness 运行时只提供官方
scoped 名。实测:干净 DSH_HOME 里 dsh plugin add <tarball> 后启动宿主,日志报
dsh-web-service (@dsh-external/dsh-web-service): failed to import,插件完全不激活。
- 源码 8 处
cordis+ 1 处schemastery改为@deepseek-ai/cordis/@deepseek-ai/schemastery scripts/build.sh同步链接 scoped 名、移除裸名软链,这类回归从此在构建期暴露- 验证:干净 profile 装本次 tarball → 宿主无 import 报错 →
GET /api/v1/system/status
返回{"version":"0.1.11","status":"running"}
同时包含 v0.1.10 的修复
/system/status自报版本原先写死1.0.0,现在读取包内package.json
文档
v0.1.10 — /system/status 版本自报修复
dsh-web-service v0.1.10
Fix
GET /api/v1/system/status自报的version原先写死为1.0.0,与package.json脱节;
现在在模块加载时读取包内package.json,跟随发布版本(读不到回落0.0.0)。
Docs (v0.1.9 起)
安装(资产名不带版本号):
dsh plugin --profile web add \
https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgzv0.1.9 — 双语 README / 描述优化
dsh-web-service v0.1.9
文档与元数据发布,无代码行为变更。
- 双语 README:English / 中文,含用途场景、安装两条路、配置表与 47 条路由明细
- 插件描述优化:
package.jsondescription 改为英文 + 中文单行描述,keywords 补web-service/remote INSTALL.md修正陈旧事实(clone 地址、peer 依赖列表)- 发布包内新增
README.zh.md
安装(资产名不带版本号,latest/download 永远指向最新):
dsh plugin --profile web add \
https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgzv0.1.8 — DSH Web Service API 插件
dsh-web-service v0.1.8
把 DSH 的工作区、会话、模型、设置、技能与文件能力暴露为 RESTful + SSE 接口,并提供 OpenAI 兼容的 /chat/completions。
安装
dsh plugin --profile web add \
https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgz本版新增
GET /api/v1/sessions/:id/todos:会话任务清单(todo_write整表投影、turn/start清空)与运行时长prompt-stream收到error事件时补发done并关流,修掉「回复一直不同步」GET /api/v1/sessions/:id/files/files/download/ 分片续传上传- peer 依赖范围改为带预发布分支的
0.1.0–0.1.9(旧范围>=0.0.1-rc <2匹配不到任何 0.1.x 预发布版本) - 包内补
cordis.patch.yml,dsh plugin add可正常装配
兼容
DSH 0.1.0–0.1.9(已在 0.1.7-rc.2 上运行验证)。BSD-3-Clause。
v0.0.1 — DSH Web Service API 插件 + AI SKILL
首个发布版本。
插件 @dsh-external/dsh-web-service
- 工作区管理:添加/删除/修改/查询(/workspaces 系列)
- 会话管理:创建/删除/修改/查询/历史分页/取消(/sessions 系列)
- 模型管理:模型目录、全局默认模型读写、提供商清单(/models、/providers)
- 会话流式:SSE prompt-stream、事件订阅 events、同步 prompt
- OpenAI 兼容:POST /chat/completions(流式/非流式)
- 内置交互式文档 /api/v1/docs 与 OpenAPI 3.0 规范 /openapi.json
AI SKILL(dsh-web-service)
一键在线安装,让 AI 智能体掌握全部接口用法:
curl -fsSL https://raw.githubusercontent.com/toddpan/dsh-webapi/main/scripts/install-skill.sh | bash