Repository navigation
Releases: FablerTan/dsh-qq-relay
Releases · FablerTan/dsh-qq-relay
Release list
v0.25.6
- 诉求:jev 换了部署(换决策模型、或走兼容 Decisions 协议的代理)时,模型 id 与地址只能写 profile
patch 再重启;而 API key 早在 v0.24.0 就能在页面改。这次把gate.model与gate.jevEndpoint
也收进「行为」页。 - host:
EDITABLE_GATE_KEYS增加model/jevEndpoint;maskConfig回显当前生效值
(它们不是密钥,可以读,页面据此回填);refreshClassifier的签名带上模型 / 地址 / bot 标签,
变化时替换分类器实现;relaySignature忽略这两项——改模型 / 地址不重建 relay 连接。
校验沿用normalizeGate:模型 id 非空,地址必须是https://(http 代理会被 400 拒绝)。 - client:
form.ts新增gateJevModel/gateJevEndpoint两个必填输入(从状态回填),
「行为」页在阈值下方新增「jev 模型 id」「jev 分类器地址」两行;地址写错当场提示。 - 默认值不变:
typesafe/jev-1.14+https://openrouter.ai/api/alpha/decisions,不配就是原行为;
只改 key 的老用户升级后表单会回填默认值,保存不会额外写入除非确实改过。 - 单测仍 300(扩展现有用例:可编辑 / 覆盖优先级 / 脱敏视图 / 非法值 / 端到端热切换 + key 不被冲掉);
pnpm check全绿。 - 文档同步:gate / config / client / architecture / roadmap / README / AGENTS / 本文件;client 半身改了
src/model/{api,form}.ts与src/view/panels/BehaviorPanel.tsx,lib/client.js已重建。 - 需要重启 dwdev GUI 才能生效(host / client 都改了)。
完整版本历史:docs/changelog.md
v0.25.5
- 问题:另一台 Mac mini 升级到 DSH 0.2.1-rc.2 后,「QQ 群聊」预设(id
qq-relay)在配置页显示
「未注册」、DSH 新建会话的 preset 列表里也选不到;宿主报两条注册错误
tool-subagent: toolFilter is no longer supported; ...(tool-subagent与
tool-subagent-fork各一条)——一条错误就让整份 preset 变 broken,不是某个字段的小警告。 - 原因:
lib/model/preset-template.js是 2026-10-19 抄的standard.patch.yml快照,委派两行
还带着toolFilter: { deny: [schedule_create, ...] };新版@deepseek-ai/dsh-tool-subagent的
apply()已把toolFilter/persona从配置面移除,见到即抛错。新版standard这两行只剩
provider/toolName(spawn 行另有modelSelectionSettings)。 - 修法:按 0.2.1-rc.2 的
standard重新对齐组合表——删掉两处toolFilter,行数不变(21 行,
persona 仍由插件在第一行注入)。presets.json本身没问题,人设 / 模型 / 权限都保留。 - 兜底:
lib/controller/presets.js注册失败时解析宿主错误里的<字段> is no longer supported,
深拷贝定义、剔除该字段后重试(最多 4 轮)并打警告——DSH 以后再删字段,预设不会立刻整份失效。 - 可见性:注册失败日志不再只猜「id 冲突」,改为同时提示「DSH 升级后组合表 schema 变化」并指向
persona.md §2.2。 - 单测 298 → 300(组合表 schema 守卫 + 「宿主移除字段自动剔除并重新注册」);
pnpm check全绿。 - 文档同步:persona / architecture / roadmap / README / AGENTS / 本文件;client 半身未改
(lib/client.js无需重建)。 - 需要重启 dwdev GUI 才能生效;那台 Mac mini 更新到 v0.25.5 后重启 DSH,预设会重新注册
(日志[relay] 已注册 QQ 预设「qq-relay」,配置页不再显示「未注册」)。
完整版本历史:docs/changelog.md
v0.25.4
- 问题:新机器点「环境」页一键修复时,写 compose 需要
environment.webuiToken,但保存 token 走的是
整份配置保存——normalizeConfig把空的wsUrl/accessToken/selfId当成「必填缺失」,
直接 400 且不写盘。于是死循环:没有 token 就没法一键修复,没配 OneBot 又存不了 token。 - host:
normalizeConfig区分「配置无效」(真的写错,仍然 400)与「待补全」(三项连接信息留空):
后者ok: true但ready: false,照常落盘,problems里逐条提示必填项;lib/index.js改用
ready决定是否启动 / 重建 relay(reconnect/rebind/ 映射操作同步改判),保存日志写
「还没配全 OneBot 连接信息,relay 暂不启动」。 - client:
buildConfigPatch允许wsUrl/selfId留空(填了但格式不对仍当场报错),
保存提示区分「已保存(待补全)」与「已保存并重连」。 - 单测 297 → 298(配置「待补全」vs「无效」/ 端到端:没配 OneBot 也能保存 WebUI token 且不启动 relay);
pnpm check全绿。 - 文档同步:config / client / env / architecture / roadmap / README / AGENTS / 本文件;client 半身改了
src/model/form.ts与src/viewmodel/settings.ts,lib/client.js已重建。 - 需要重启 dwdev GUI 才能生效。
完整版本历史:docs/changelog.md
v0.25.3
- 决定:v0.25.2 的「按 docker endpoint 识别引擎并给
start-orbstack/install-orbstack等动作」
在真机上并没有让问题更简单——另一台 Mac mini 的 OrbStack 装了一半、context 指向已卸装的 socket,
按引擎给动作反而把人引向修 OrbStack。实际更省事的做法是用 Colima,所以整段回滚
(git revertv0.25.2),环境页恢复 v0.25.1 的行为:macOS 只认 Colima(启动 / 重启 / 安装),
Linux 用已有 daemon。 - 回滚范围:移除
start-orbstack/start-docker-desktop/install-orbstack动作、
engineOfEndpoint与engines探测、waitDaemonUp;docker info直连失败时仍用
docker --context colima兜底;版本号 0.25.2 → 0.25.3(0.25.2 已发布,不回退 tag)。 - 那台机器怎么办:如果 docker endpoint 指向残留的 OrbStack / Docker Desktop,环境页会显示
docker 的原始报错;装上 / 启动 Colima 后执行docker context use colima(或直接colima start,
它会创建 colima context),再点「重新检测」即可。 - 单测 299 → 297(回滚掉 endpoint 归属引擎 / OrbStack 动作的两个用例);
pnpm check全绿。 - 文档同步:env / client / architecture / roadmap / README / AGENTS / 本文件;client 半身未改
(lib/client.js无需重建)。 - 需要重启 dwdev GUI 才能生效。
完整版本历史:docs/changelog.md
v0.25.2
- 问题:v0.25.1 的兜底写死了
docker --context colima。另一台机器的 docker endpoint 被 context
指到 OrbStack(unix:///Users/…/.orbstack/run/docker.sock,socket 不存在),本机又没有 colima
context,于是环境页显示
「failed to connect …: no such file;改用 --context colima 仍失败:context "colima": context not found」,
按钮却只有「启动容器引擎(colima start)」——对这台机器全是无效动作。 - 探测泛化:新增
docker context ls --format '{{json .}}'读取 context 列表 / endpoint / 当前值;
docker info直连失败时逐个docker --context <name> info试(不再写死 colima),谁通了本轮
后续 docker 命令(inspect / compose up / restart)都带它。macOS 另增引擎探测:colima status、
/Applications/OrbStack.app或~/.orbstack、/Applications/Docker.app。 - 按引擎给动作:
lib/model/env.js新增engineOfEndpoint(/.colima/→ Colima、/.orbstack/→
OrbStack、/.docker/run/docker.sock→ Docker Desktop)。失败说明改成「容器引擎未运行:docker
当前指向 OrbStack,endpoint 不存在:…」;装了对应引擎 → 新动作start-orbstack/
start-docker-desktop(open -a …,执行后最多等 25 秒 daemon);没装 →install-orbstack
(brew install --cask orbstack,需确认);识别不出才退回 Colima 三件套。证据里列出
--context <name>的失败原因与已知 context 列表。 - 动作目录:新增
start-orbstack/start-docker-desktop/install-orbstack,进
ENV_FIX_ORDER与fixPlan.needsConfirm(安装类)。 - 单测 297 → 299(endpoint 归属引擎 / 指向 OrbStack 的机器给「安装 OrbStack」/ 新 argv);
pnpm check全绿。 - 文档同步:env / client / architecture / roadmap / README / AGENTS / 本文件;client 半身未改
(lib/client.js无需重建)。 - 需要重启 dwdev GUI 才能生效。
完整版本历史:docs/changelog.md
v0.25.1
- 问题:环境页的探测失败只显示「退出码 1」,docker 写在 stderr 的真实原因(例如
failed to connect to the docker API at unix:///var/run/docker.sock)全丢了;同时
colima start退出码 0(already running, ignoring)但 Docker daemon 仍连不上时,
一键修复会反复重试同一个动作、最后停住,步骤一直「未通过」。 - 探测可读:
lib/controller/env.js新增probeMessage(stderr 末行优先);docker / colima
探测失败时把原文写进步骤说明与证据(截断 300 字),不再只给退出码。 - docker endpoint 兜底:
docker info直连失败时,在 macOS 上自动用
docker --context colima再试;成功则本轮所有 docker 命令(inspect / compose up / restart)
都带该 context,证据里注明「直连失败:…;已自动改用 --context colima」。
覆盖插件进程环境里DOCKER_HOST/ docker context 配错的情况。 - 区分「启动」与「重启」引擎:新增探测
colima status;VM 没起 →start-daemon,
VM 在跑但 daemon 连不上 → 新动作restart-daemon(colima restart,仅 macOS,需确认)。 - 不推进就跳过:一键修复把「执行后步骤仍未推进」或「动作失败」的动作标记为没能自动完成,
记录该步说明后继续执行后面独立的步骤(如生成 compose),收尾日志逐条列出没完成的动作与原因。 - 单测 294 → 297(引擎启停区分与可读错误 / context 兜底 / 动作不推进跳过);
pnpm check全绿。 - 文档同步:env / client / architecture / roadmap / README / AGENTS / 本文件;
lib/client.js已重建。 - 需要重启 dwdev GUI 才能生效。
完整版本历史:docs/changelog.md
v0.25.0
- 问题:v0.23.0 的
fix-all在点按钮那一刻算一次序列,只收集「未通过步骤」自己列出的动作。
引擎没起时 NapCat 容器步骤是skip(不贡献动作),写完 compose 也不会重新求值 →compose-up
永远进不了序列,新机器点一次「一键修复」只写了个 compose;另一处restart-napcat被写进顺序表
却没有任何步骤会产出它(死代码)。两个原因叠加,用户看到的现象就是「跳过 napcat」。 - 逐轮推进:
fix-all改成「探测 → 执行计划里的第一个动作 → 再探测」,直到计划为空 / 需要确认 /
动作失败 / 同一动作连续两次没有推进;skip步骤在前置补齐后自动变成可修复,装引擎后出现
compose-up,容器起来后才轮到 OneBot / 回填。顺序表移除死条目restart-napcat
(写 OneBot 时本身会重启 NapCat)。 - 安装 / 启动引擎进计划:
install-docker/start-daemon也由一键修复执行,但需要页面确认:
status.fixPlan = { sequence, titles, needsConfirm, next }下发计划,页面渲染「将依次执行:… /
下一步:…」并用window.confirm确认;host 侧同样强制校验confirm:true(覆盖已有 compose 同理)。 - token 闭环:写 OneBot 配置不再要求插件
accessToken非空——按「插件 token → OneBot 现有
token → 自动生成 32 位 hex」取值,生成后由backfill-config回填,新机器扫码后能一路走完。 - 可读性:跳过 / 阻塞步骤的说明写清「先解决哪一步」;一键修复收尾把下一步写进动作日志
(例如「可自动完成的步骤已跑完;下一步(QQ 登录):…」),全部通过记「环境已就绪」。 - client:「环境」页新增修复计划提示行与一次性确认;「安全边界」补一条逐步补全说明。
- 单测 292 → 294(
test/env.test.js11 个:修复序列逐步展开 / 一键修复确认后连做四步 /
token 双空生成);pnpm check全绿。 - 文档同步:env / client / architecture / roadmap / README / AGENTS / 本文件;
lib/client.js已重建。 - 需要重启 dwdev GUI 才能看到新的「环境」页提示与逐步修复行为。
完整版本历史:docs/changelog.md
v0.24.0
- 「行为」页新增「OpenRouter API key」密码框:保存后立即热切换 jev 分类器,不用重启 GUI;
留空表示不修改,host 永不回显 key(status.config.gate只给jevApiKeyConfigured/
jevApiKeySource/jevApiKeyEnv)。 - 解析优先级:
gate.jevApiKey(设置页保存)> 环境变量gate.jevApiKeyEnv(默认
OPENROUTER_API_KEY);两者都没有时保持 fail closed(普通消息不接话),只打告警。 - host:
model/gate.js新增resolveJevApiKey;组合根把分类器换成稳定代理对象,
key / 阈值变化只换内部实现、不重建 relay;settings.json的 gate 子项按子项合并,
只改阈值不会冲掉已保存的 key。 - 单测 291 → 292(key 校验 / 优先级、mask 不回显、保存后分类器热启用、清空即停用);
pnpm check全绿。 - 文档同步:README / gate / config / client / architecture / AGENTS;
lib/client.js已重建。
完整版本历史:docs/changelog.md