Skip to content

Releases: G57651/dsh-dual-checkin

v1.3.12

Choose a tag to compare

@G57651 G57651 released this 25 Oct 15:16

适配 DSH 0.2.1-rc.3(行为与接口零变化,仅清单声明与依赖对齐)。

  • engines.dsh:加 || ^0.2.1-rc.3
  • 三个 @deepseek-ai/dsh-* peer 范围(dsh-client-locale / dsh-client-ui-slots / dsh-host-webserver)同步补 ^0.2.1-rc.3
  • devDependencies 对齐 0.2.1-rc.3

验证:88 条回归用例全绿;客户端 bundle 外壳与 require 解析静态校验通过;按宿主真实判定逻辑对三版本全 PASS。

v1.3.10 — Windows 平台适配

Choose a tag to compare

@G57651 G57651 released this 10 Oct 20:53

修复

  • Windows 默认路径识别:此前 resolveElectronPath 只有 macOS 默认路径,Windows 一律抛「请设置 WORKBUDDY_ELECTRON_BIN」。现在 win32 分支按可靠性顺序自动探测:卸载表三个视图(HKCU / HKLM / HKLM WOW6432Node)里的 DisplayIcon(剥引号与图标索引,只接受 WorkBuddy.exe)与 InstallLocation,再到四个默认安装目录(%LOCALAPPDATA%\Programs、%LOCALAPPDATA%、%ProgramFiles%、%ProgramFiles(x86)% 下的 WorkBuddy\WorkBuddy.exe),候选统一走与显式配置一致的三重校验(realpath + 常规文件 + 可执行)。自定义盘符安装(如 D:\Program Files\WorkBuddy)只有注册表里找得到;探测进程带 windowsHide,DSH 无控制台宿主下不再闪黑框。
  • Qoder 回退通道在 Windows 可用:.credentials.yaml 的 POSIX 权限校验(mode & 0o077)在 NTFS 上对任何文件都判「过宽」(Windows 无 POSIX 位,文件恒报 666),回退直读通道此前在 Windows 上永远被拒;现在 win32 跳过该校验,实际防护由 NTFS ACL 承担,宿主 credentials-local 服务路径不受影响。
  • macOS 分支零改动:默认路径识别、显式 WORKBUDDY_ELECTRON_BIN 的优先级均保持原样。

测试

  • 回归用例扩到 88 条(离线:隔离 HOME / DSH_HOME / APPDATA / LOCALAPPDATA + 全桩 fetch + 注册表注入桩,不使用真实凭据、不读本机注册表)。
  • 新增 win32 路径用例:注册表输出解析(引号 / 图标索引 / 非 WorkBuddy.exe 拒绝)、候选顺序(注册表命中在前、默认目录兜底、失败视图跳过)、三重校验(同名目录候选被跳过)、全部落空时报错保留 WORKBUDDY_ELECTRON_BIN 指引。
  • 夹具补 APPDATA / LOCALAPPDATA 重定向:Trae 与 WorkBuddy 在 win32 上经它们找凭据,此前 Windows 测试机会读到本机真实登录态,把「无凭据零网络请求」用例打穿。
  • 平台相关断言按平台拆分:X_OK「不可执行」仅 POSIX 可断言(win32 无可执行位概念);落盘失败错误形态 POSIX 报 EISDIR、win32 报 EPERM;S-04 权限用例改为显式注入 darwin / win32 双平台互证。

升级

替换插件目录或经 DSH 市场安装后重启 DSH;WorkBuddy 从此无需手动设置 WORKBUDDY_ELECTRON_BIN(显式设置仍优先)。

v1.3.9 — 契约收敛与纵深加固

Choose a tag to compare

@G57651 G57651 released this 07 Oct 21:58

修复

  • 三平台共用一份 HTTP 契约:新增 lib/http.mjs(重试 / 退避 / 超时 / Retry-After / AbortSignal 透传 / redirect: 'error')。此前 Trae / Qoder / WorkBuddy 各写一份 postJson / requestJson / tunables / sleep,重试语义与 defaults 形状四次漂移(WorkBuddy 的 defaults 只有 2 个键)。
  • 退避带抖动:重试前读上游 Retry-After(秒数或 HTTP 日期,上限 60 秒),否则按 retryDelayMs 做 ±20% 抖动,避免多平台同时重试对齐;retryDelayMs: 0 现在真的表示不等待(此前被回退成默认 5 秒)。
  • 卸载 / 热重载真正中止在飞请求:apply 建 AbortController,dispose 时 abort 并清空内存里的 Qoder jobToken 与 WorkBuddy 解密密钥(旧实现只置标志位,请求照样跑完且旧闭包继续持有令牌)。
  • 落盘脱敏与版本号:写入与读回都剔除名字像凭据的字段(token / pat / authorization / cookie / secret / apiKey 等,含嵌套),快照带 schemaVersion: 1。
  • 状态文件带 profile 维度:合法 profile 名下写 …-<platform>-<profile>.json,读不到时回退旧全局名,升级不会因为改名而重复签到。
  • WorkBuddy 加固:解密子进程的环境变量收窄为白名单(不再整份继承 process.env);WORKBUDDY_ELECTRON_BIN 需经 realpath + 常规文件 + 可执行三重校验;缓存的解密密钥在 keyId 轮换后失效重取一次(此前会永久返回 0 个账号直到重启)。
  • 并行与容错:WorkBuddy 多账号并行签到(结果顺序稳定);积分刷新时单个账号失败不再放弃整批,全部失败才保留原快照。
  • 客户端:多账号逐账号明细上屏(此前只显示首个);签到前后积分对比 creditsBefore → creditsAfter 上屏;积分到期提醒上屏(expiringAlert 此前零引用);侧栏图标改用官方 usePanelInfo 读自己的选中态;删除死键 intro。
  • 修复面板崩溃:响应缺某个平台键时 Ticket 读 creditsBefore 会抛 TypeError,已补空值守卫。
  • 路由防漂移:新增用例断言 host 注册的 STATUS_ROUTE 与客户端 fetch 的路径字面量一致。
  • 回归用例扩到 82 条(离线:隔离 HOME/DSH_HOME + 全桩 fetch,不使用真实凭据);同一套用例在 1.3.8 上 14 条失败、在 1.3.7 上 34 条失败。

v1.3.8 — 安全阻断项与 P0 正确性修复

Choose a tag to compare

@G57651 G57651 released this 07 Oct 21:58

修复

  • 状态路由守卫重写:Host 判定由 startsWith 前缀比对改为剥端口后精确匹配,localhost:80.evil.com、127.0.0.1:80.evil.com、[::1]:80.evil.com 这类绕过值不再放行;新增回环对端校验(req.socket.remoteAddress),宿主绑 0.0.0.0 时局域网请求读不到状态;响应补 cache-control: no-store、x-content-type-options: nosniff、referrer-policy: no-referrer。
  • Qoder PAT 解析不再拼正则:qoderCredentialRef 先过 [A-Za-z0-9_.-] 白名单再逐行字符串前缀匹配。此前 .* / (A|B) / [ 之类的配置值会从 .credentials.yaml 读出另一个 ref 的无关密钥,非法正则还会把原始错误字符串经备注上屏。
  • 凭据文件权限校验:回退直读 ~/.dsh/.credentials.yaml 前校验 mode & 0o077,过宽即拒绝并提示 chmod 600(此前比宿主 credentials-local 更宽松)。
  • WorkBuddy 上游域名白名单:auth.domain 必须匹配 (^|\.)(workbuddy|codebuddy)\.cn$ 且不得携带用户名 / 密码 / 端口 / 路径 / 查询,避免被改写的本机文件把任意主机当上游。
  • 请求不跟随跳转:三个平台的 fetch 显式 redirect: 'error'。
  • 落盘失败不再把成功签到误报为失败:saveState 与 runner 的 try/catch 解耦,写入失败改为带 persistError 并记 warn;此前 EISDIR 等场景面板显示 ok:false 而 claim 其实已成功,下次启动还会再签一次。
  • 失败态负缓存:当日失败快照 60 秒内不再重打上游(此前只有成功快照有短路,故障日面板每 15 秒轮询都各打一次上游)。
  • creditsBefore 不再自毁:积分刷新不再把「签到前」基线覆写为当前值。
  • 备注清洗:状态路由返回的 note 剥掉换行与控制字符,避免上游响应片段伪造日志行或把不可见字符写进状态文件。
  • 重试分类:只对网络故障与 5xx / 429 重试,4xx 快速失败;WorkBuddy 补齐与其他两平台一致的重试;Qoder 的 401 重换 jobToken 不再额外消耗重试额度。
  • mkdir 权限:状态目录创建补 mode: 0o700(此前跟随 umask,实测 755)。
  • 客户端:刷新按钮改发 POST(此前按 GET 发,host 侧「强制重查积分」从未接线);超时 15 秒提到 300 秒;CSS 注入 effect 返回 cleanup(热重载不再堆积 <style>);平台清单抽为单一来源;PAT 到期与签到徽标等 8 处文案改走 locale 字典;已签到时也显示备注;删除死代码。
  • 工程化:新增 scripts.test、repository 与 test/ 回归用例 46 条(离线:隔离 HOME/DSH_HOME + 全桩 fetch,不使用真实凭据)。

v1.3.7 — 侧栏图标重设计

Choose a tag to compare

@G57651 G57651 released this 04 Oct 17:51

变更

  • 侧栏签到图标由裸文本「✓」替换为票根对勾线性 SVG:24 viewBox、stroke 2、圆角端点,currentColor 随侧栏主题自适应;对勾居左、右侧打孔虚线,与新版票据卡面板同构。

安装:dsh plugin --profile desktop add dsh-dual-checkin-1.3.7.tgz

v1.3.6 — 面板重设计:总览头 + 票据卡

Choose a tag to compare

@G57651 G57651 released this 04 Oct 17:29

面板重设计

  • 总览头:今日 N/3 已签 · 今日共得积分(大数字)。
  • 三张票据卡:平台 · 状态徽标 · 签到时间 · 主数字「本次获得」· 剩余/已使用/3天内到期(虚线账目行,等宽数字对齐)· 撕票锯齿收尾;纵向高度约为旧布局一半。
  • Qoder 票据内嵌:PAT 临期(黄)/ 已过期(红)账目行;未签到平台的失败原因显示在票内注释行。

安装:dsh plugin --profile desktop add dsh-dual-checkin-1.3.6.tgz

v1.3.5 — 「今日已签到,跳过」也显示本次获得积分

Choose a tag to compare

@G57651 G57651 released this 04 Oct 16:41

修复

  • 当轮时间窗内 CLAIMED(含 claim 返回 replayed: true)时,本轮奖励今天已经到账——无论由 Qoder 客户端还是本插件领取。此前该场景 gained 为 null,面板「本次获得」显示「—」;现在把本轮宣传金额(100 Credits)填入 gained,与 WorkBuddy already 分支行为一致。

安装:dsh plugin --profile desktop add dsh-dual-checkin-1.3.5.tgz

v1.3.4 — 新增 Qoder 纯 PAT 签到

Choose a tag to compare

@G57651 G57651 released this 03 Oct 20:37

新增 Qoder 平台(纯 PAT 模式)

  • 凭据:复用 DSH 凭据服务里已配置的 Qoder PAT(与 dsh-provider-qoder 同一份凭据),或首次启用时在插件配置直接填写 qoderPat + 到期时间 qoderPatExpiresAt。零钥匙串、零解密、零子进程——不读取 Qoder 的任何本机文件。
  • 签到协议:POST /api/v1/jobToken/exchange 换短期 jobToken(进程内缓存、临期自动重换、401 自愈且不消耗重试次数)→ GET /sash/api/v1/me/campaigns 找 CLAIM_BENEFIT 轮次 → POST .../claim 幂等领取(重复领取返回 replayed: true 不再发币);积分快照走 /sash/api/v2/me/usage。
  • PAT 生命周期:剩余 ≤ qoderPatExpiringDays(默认 7 天)时面板黄条提醒 + 日志 warn;过期红条提醒;状态在每次面板刷新时实时重算。
  • 面板:Qoder 状态卡(签到时间 / 备注 / 积分三列 / 签到前后对比);状态路由新增 qoder 键。

修复

  • campaigns 的 startAt/endAt 为秒级时间戳,此前按毫秒判定导致活动窗口永远视为已关闭(真机发现并修复)。

合并 v1.2.2 重构

本版本在远端 v1.2.2 重构基础上合并 Qoder 能力:resolveLogger 修复日志静默丢失、singleFlight 并发去重、状态文件原子写加固、ctx.webServer 直注册、trae retryTimes 参数对齐、devDependencies 双声明。

安装

dsh plugin --profile desktop add dsh-dual-checkin-1.3.4.tgz

或 Web UI 插件页上传该 tarball。首次启用请在插件配置填写 qoderPat(或确认已配置 QODER_MANAGED_CREDENTIAL)与 qoderPatExpiresAt。

v1.2.2 — 重构版:修复日志静默丢失,对外行为与接口不变

Choose a tag to compare

@G57651 G57651 released this 02 Oct 16:10

对照 DeepSeek Harness 插件开发规范的整理重构,签到流程、请求端点、解密逻辑与面板行为零变化。

修复

  • 修复日志静默丢失(开发文档 §10.1「ctx.logger(name) 返回具名 logger」):旧代码把 ctx.logger 当普通 { warn, info } 对象读,宿主为可调用服务形态时所有日志一行不打。现在按可调用形态优先(ctx.logger('dsh-dual-checkin')),对象形态回退——与 dsh-session-manager 0.1.2 的修法一致。

整理(零行为变化)

  • 去除冗余双重等待:插件级 inject = ['webServer'] 已保证 apply 运行前服务就绪(§2.1),apply 内不再二次 ctx.inject(['webServer']),路由直接经 ctx.effect 注册。
  • GET/POST 两个 handler 分支合并为 handleStatus(仅 refreshCredits 标志不同)。
  • syncCredits 签名中从未使用的 runner 参数移除;once 更名为语义明确的 singleFlight;移除未使用的 workbuddyDefaults import。
  • 状态文件写入加固:临时文件改为唯一随机名 + 原子改名,并发/崩溃不再可能留下可读到的半截 JSON。
  • trae.mjs 内部整理:EXPIRING_WINDOW_MS 归位、postJson 重试参数名与 tunables 统一(模块内私有 API)。
  • package.json:按开发文档 §7.3 双声明要求补齐 devDependencies(与 peerDependencies 同范围)。

安装

dsh plugin --profile <profile> add github:G57651/dsh-dual-checkin#v1.2.2

或 Web UI → Plugins → 安装,填 tarball 绝对路径。签到状态、积分面板与幂等行为与 1.2.1 完全一致(已在隔离 DSH 0.2.0-rc.2 上端到端验证)。

v1.2.1 — 积分端点/同步修复,WorkBuddy 备注与配色统一

Choose a tag to compare

@G57651 G57651 released this 28 Sep 20:31

🐛 修复

  • 剩余积分获取不准 / 同步不及时:Trae 余额端点 ide_user_ent_usage → web_user_ent_usage(对齐 dsh-connect-trae 已验证只读端点),请求体去掉未经验证的 req_source;签到状态与积分快照分离——当日已签到不再短路整天,积分按 creditsTtlSeconds(默认 300 秒)独立刷新,面板刷新按钮强制重查且不重复签到
  • WorkBuddy 备注与 Trae 统一:金额缺失时用签到状态响应的 daily_credit / today_credit 兜底,备注统一为「签到成功,获得 +N 积分」;多账号聚合分支同句式
  • 「3 天内到期」标签颜色统一:三格标签均恢复二级灰,不再单独变色
  • 到期提醒警示色修复:CSS 令牌 --dsw-alias-state-warning-primary(不存在)→ --dsw-alias-state-warn-primary,兜底 #b7791f → #f59e0b(amber-500,明暗主题一致)
  • 其他:WorkBuddy 月度包不再误计入 3 天内到期;资源请求体补 PackageEndTimeRangeBegin/End 时间窗;queryCredits 校验业务码、失败可诊断;秒级时间戳不再当毫秒解析;启动 Promise 纳入 ctx.effect 托管;新增同名 Config schema(可调值全部入配置);dsh.client.inject 改真实包名并补齐 peerDependencies

📦 安装

CLI(推荐)

dsh plugin --profile desktop add github:G57651/dsh-dual-checkin

升级已有安装

dsh plugin --profile desktop add https://github.com/G57651/dsh-dual-checkin/releases/download/v1.2.1/dsh-dual-checkin-1.2.1.tgz

Web UI:Plugins 页 → Git 填 github:G57651/dsh-dual-checkin;或下载本页附件 tarball 后 dsh plugin --profile desktop add ./dsh-dual-checkin-1.2.1.tgz