This repository was archived by the owner on Nov 9, 2026. It is now read-only.
Repository navigation
v0.8.6
流式链路加固 Stream hardening
- 提前退出也记账:消费者中途
break(for await … return())不再丢行,账本记aborted。| Early-exit now recorded: consumerbreakout offor awaitno longer drops the row — the ledger recordsaborted. - SSE 连接不泄漏:
finally释放 reader 锁,提前退出不再把 socket 挂到 GC。| No SSE socket leak: the reader lock is released infinally, so early exits no longer hold the socket until GC. - chat 面错误直报:网关
error事件直接抛PROVIDER_ERROR(带原文),不再吞成“无 finish reason”。| Chat-surface errors surface directly: gatewayerrorevents now throwPROVIDER_ERRORwith the original message instead of collapsing into “no finish reason”. - 坏 SSE 行有分类:非 JSON keepalive / HTML 错误行抛
PROVIDER_PROTOCOL_ERROR,不再漏原生SyntaxError。| Malformed SSE lines classified: non-JSON keepalives / HTML error lines throwPROVIDER_PROTOCOL_ERRORinstead of leaking a rawSyntaxError. - 单一路分帧:
pumpChunks复用共享ssePayloads泵,三端面不再各写一套切行/看门狗。| Single framing path:pumpChunksreuses the sharedssePayloadspump — one line-splitting/watchdog implementation for all three surfaces.
身份与配置 Identity & config
- 身份头统一:新增
apiAttributionHeaders(),推理与目录刷新共用deepseek-harness/<v> dsh-opencode-go/<v>。| Unified identity headers: newapiAttributionHeaders()shared by inference and catalog refresh. apiBase预检:设置加载时new URL()校验,配错直接报字段名,不用到fetch里猜。|apiBasevalidated early: checked withnew URL()at settings load, misconfiguration names the field instead of failing cryptically insidefetch.- 刷新超时不卡进程:
refreshModels改用可unref的AbortController,与推理面同构。| Refresh timeout no longer holds the process:refreshModelsuses an unref'dAbortController, mirroring the inference path.
显示与工程 UX & DX
- 模型分组改名:选择器显示
zen-go (OpenCode Go),搜zen-go直达;路由仍是zen-go,已有会话不受影响。| Provider renamed in picker: group now showszen-go (OpenCode Go)so it matches thezen-goroute; existing sessions unaffected. - 浏览器半构建门:
build-client.cjs加缺件检查 +vm语法门(先检查后落盘)+npm run build:client/npm test;README 补构建说明。| Client build gate:build-client.cjsgains missing-part +vmsyntax checks (check-before-write), plusnpm run build:client/npm test; README documents the client build.
测试 Tests
node test/smoke.mjs:45 项,44 pass + 1 skip(无 key 活探针);新增提前退出记账、chat error 事件、坏 SSE 行、apiBase校验、身份一致性回归。|node test/smoke.mjs: 45 tests, 44 pass + 1 skip (live probe needs a key); new regressions for early-exit metering, chat error events, malformed SSE,apiBasevalidation, and identity consistency.
升级:重启 dsh web 即生效(纯 Host 改动,无需重新 add)。| Upgrade: restart dsh web to apply (host-side changes only, no re-add needed).