Skip to content

Releases: toddpan/dsh-webapi

v0.6.1 — 流式对话断流修复:停滞看门狗 + SSE 心跳 + 错误可见化

Choose a tag to compare

@toddpan toddpan released this 27 Oct 14:50

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 四场景全过:

  1. prompt-stream 完整流 + 16.5s 全静默期心跳保活;
  2. 停滞看门狗显式 error(turn stalled) + done 收流;
  3. 同步 prompt 整轮耗时大于阈值时完整返回全部内容(旧语义半途截断);
  4. 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 服务启停重构

Choose a tag to compare

@toddpan toddpan released this 25 Oct 11:16

独立 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.tgz

npm: npm i dsh-web-service@0.5.0

v0.3.6 — 会话推理强度 / 模式预设 API

Choose a tag to compare

@toddpan toddpan released this 08 Oct 08:42

v0.3.6 — 会话支持单独调推理强度与模式预设 agentPreset

Sessions API

  • 建会话 POST /sessions 新增 reasoningEffort、agentPreset 字段
  • 改会话 PATCH /sessions/:id
    • reasoningEffort 可与 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(修复插件安装被拒)

Choose a tag to compare

@toddpan toddpan released this 06 Oct 12:56

修复:在 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.11
  • scripts/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 安装后无法装配(关键)

Choose a tag to compare

@toddpan toddpan released this 25 Sep 05:56

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

文档

  • 双语 README:English / 中文
  • 安装章节补「升级 / 固定版本」说明:dsh-web-service.tgz(永远最新)与 dsh-web-service-0.1.11.tgz(固定版本、绕开包管理器缓存)

v0.1.10 — /system/status 版本自报修复

Choose a tag to compare

@toddpan toddpan released this 25 Sep 05:51

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 起)

  • 双语 README:English / 中文
  • package.json description 改为英文 + 中文;INSTALL.md 修正陈旧事实

安装(资产名不带版本号):

dsh plugin --profile web add \
  https://github.com/toddpan/dsh-webapi/releases/latest/download/dsh-web-service.tgz

v0.1.9 — 双语 README / 描述优化

Choose a tag to compare

@toddpan toddpan released this 25 Sep 05:48

dsh-web-service v0.1.9

文档与元数据发布,无代码行为变更。

  • 双语 README:English / 中文,含用途场景、安装两条路、配置表与 47 条路由明细
  • 插件描述优化:package.json description 改为英文 + 中文单行描述,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.tgz

v0.1.8 — DSH Web Service API 插件

Choose a tag to compare

@toddpan toddpan released this 25 Sep 05:37

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

Choose a tag to compare

@toddpan toddpan released this 03 Sep 08:44

首个发布版本。

插件 @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