Skip to content

Releases: NextAgentX/qoder-trae-workbuddy-switch

v2026.10.201902

Choose a tag to compare

@github-actions github-actions released this 20 Oct 11:38

🖥 服务器 / 容器部署:没装客户端也能登录、也能开网关(issue #62)

  • 症状:在服务器上部署、本机没装任何平台的客户端时,账号页只给「重新检测 / 从本机导入」两条死路 —— 登录不了,网关也就没有上游账号可用。
  • 定位:这不是「缺一个入口」,而是把「没装客户端」当成了异常。账号与网关只依赖凭据本身,客户端只负责「现成的登录态来源」与「程序位切换」。
  • 现在「无客户端」是一等形态:账号页给引导卡(浏览器授权 / 粘贴凭据 / 导入备份 + 可用与需客户端两列清单),已有账号时只留一行说明。
  • 授权弹窗改成「链接 + 二维码 + 倒计时 + 轮询」:容器里没有系统浏览器也能完成,手机扫码或复制链接到任意设备即可;自动开浏览器降级为尽力而为,失败不再算登录失败。
  • 新增「粘贴授权凭据」(WorkBuddy):把另一台机器上 auth/workbuddy-desktop-ai.info 的内容整段粘进来即可入库,与「从本机导入」走同一条解析 / 解锁链。
  • Trae 例外已如实说明:换 token 与续期都要客户端 storage.json 里的 icube 设备私钥,且授权页会探 127.0.0.1:17388;弹窗给出可复制的 ssh -L 命令,并支持把回调链接粘回来由服务端补完兑换。
  • 网关页在无客户端时明确写「网关照常可用」—— 它只依赖账号池里的凭据,与客户端是否同机无关。

🧹 设置页新增「清除缓存」

  • 只读扫描四类缓存(会话备份 / 登录态快照 / 缓存目录 / 日志)的体积,勾选后按类别清除,返回实际释放的字节数与逐项失败原因。
  • 部分失败会如实报「清了但有 N 项失败」,不会一律显示成功;清除前有确认弹窗,属不可逆操作。

🛠 其他

  • 版本号统一为 2026.10.201902(14 处载体校验通过)。
  • 原型同步更新:docs/prototype/verify-clientless.cjs 作为无客户端形态的门禁(18 条断言 + 3 个变异)。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.201725

Choose a tag to compare

@github-actions github-actions released this 20 Oct 09:37

🔐 修复:Trae 授权页走错产品线(auth_from=solo)

  • 症状:国际版点「OAuth 网页登录」,浏览器打开的是 TraeWork 的授权页(auth_from=solo&client_id=en1oxy7wnw8j9n…),部分地区直接提示「TraeWork 在所在地区不可用」。
  • 原因:前端只传区域(cn / global),旧的变体解析把 global 认成了国际版 TraeWork,而它属于 SOLO 产品线。
  • 现在 global 落到本区域的合并版 Trae(TRAE_I18N ⇒ auth_from=trae&client_id=ono9krqynydwx5),cn 同理。
  • 附带一条真机探针测试:两个区域的授权 URL 都必须带 auth_from=trae,防回归。

🛠 其他

  • 版本号统一为 2026.10.201725(19 处载体校验通过)。
  • 本次只修授权入口,其余功能与 v2026.10.201625 一致。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.201625

Choose a tag to compare

@github-actions github-actions released this 20 Oct 08:55

✨ 上下文开关现在「点了立刻变」

  • 三平台模型页顶部统一一个开关(Trae 叫 Max Mode,WB / Qoder 叫上下文上限),默认开启。
  • 点击即时切换:开关秒变、下方「上下文」列同步在 1M ↔ 300k/200k 之间切换,不再等请求返回。
  • 修掉了三个真问题:保存响应没解包导致开关被重置回默认;保存时重启监听在端口被占时失败并回滚;清单只在进页面时抓一次、不会重取。

🧭 默认使用上限

  • WorkBuddy:目录里的 300k 默认 / 1M 上限 现在按开关选,默认 1M。
  • Qoder:200K 默认 / 400K / 1M 多窗口,默认最大档;请求里的上下文元数据跟着走。
  • Trae:仍由 is_max_mode 控制,关闭后回到 __dev 的实际窗口。
  • /v1/models 同时给出当前档与两档原值(context_length / context_length_default / context_length_max),客户端与界面各自取用。

🐛 演示站(GitHub Pages)恢复部署

  • 15:03 起 Pages 连续失败:api.ts 里混入了未落地的缓存扫描接口,build:demo 的 tsc 报 TS2305。
  • 已移除该残留,演示站重新可访问。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.201130

Choose a tag to compare

@github-actions github-actions released this 20 Oct 04:11

✨ WorkBuddy / Qoder 也支持「使用最大上下文」开关(默认开启)

上一版清单里的 300k 其实是默认档而不是上限 —— 上游一直给两档,我们只读了默认值。现在补上开关:

  • WorkBuddy:300k 默认 / 1M 上限 这类模型,开启开关后清单声明 1M,关闭回到 300k。
  • Qoder:200K 默认 / 400K / 1M 多窗口模型,开启后清单声明最大档,并把它写进请求的上下文元数据;关闭回到默认档。
  • 两处开关都在「模型」页顶部,默认开启,保存即生效。

🚦 Trae 仍然是唯一的「请求级 Max Mode」

  • Trae 的开关对应上游 is_max_mode 布尔字段;WB / Qoder 没有这个字段,开关只决定声明 / 使用哪一档窗口。
  • 三家清单现在都带 context_length,数值随开关变化,客户端读同一个字段即可。

🛠 内部

  • WB 目录解析:contextWindow.defaultLength 记为默认档,maxInputTokens / maxAllowedSize 记为上限档(修复国际版一直只显示默认档的问题)。
  • Qoder:解析 context_config 的多窗口与 is_default 标记。
  • 版本号统一为 2026.10.201130(19 处载体校验通过)。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.200958

Choose a tag to compare

@github-actions github-actions released this 20 Oct 02:15

✨ 三个平台的模型清单都声明上下文大小

  • /v1/models 现在统一带 context_length:WorkBuddy 取目录的 context_window、Qoder 取模型元数据的 max_input_tokens、Trae 取官方目录的逐模型上限。OpenAI 兼容客户端读这一个字段就能知道每个模型能装多少。
  • 原字段(context_window / max_input_tokens)保留,老客户端与管理面不受影响。

🚦 为什么只有 Trae 有 Max Mode 开关

  • Max Mode 是 Trae 上游的请求级布尔字段:同一个模型有 dev(__dev 通道实际窗口)与 max(上限)两个值,才需要「开 / 关」。
  • WorkBuddy 与 Qoder 的目录只有一个上限值,没有第二个模式可切 —— 所以模型页给的是「上下文上限 · 按目录声明」只读说明卡,而不是一个点了没反应的开关。
  • 模型页的「上下文」列三家都有:200k / 400k / 1M / 982k 直接可见;Trae 关闭 Max Mode 后回到 dev。

🛠 内部

  • WB 模型条目抽成 routes::models::model_entry,独立网关与统一网关共用一份(避免两处 JSON 漂移)。
  • 版本号统一为 2026.10.200958(19 处载体校验通过)。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.200904

Choose a tag to compare

@github-actions github-actions released this 20 Oct 01:42

✨ Max Mode 开关:现在真的能关(接前端 + 后端)

上一版把「按各模型上限」做成了数据驱动,但开关只存在于原型里 —— 应用内始终开启。本次补齐真实链路:

  • 网关页配置卡新增「Max Mode(按各模型上限)」开关,默认开启,保存即生效(无需重启)。
  • 开启:对官方目录里 max > dev 的模型注入 is_max_mode,/v1/models 声明它自己的上限(glm-5.3 1M、mimo 982k…)。
  • 关闭:清单回到 dev(__dev 通道实际窗口),请求不再注入 —— 适合「先按默认窗口用」的场景。
  • 三条入口(Trae 独立网关 / 统一网关 trae 命名空间 / web 管理面)读同一份配置,不存在「清单关了、请求还开着」的半截状态。

🛠 内部

  • TraeGatewayConfig 新增 max_mode(默认 true,兼容 camelCase 别名);读取用同步快照,拿不到锁按开启处理。
  • models_response_for / prepare_llm_chat_body 显式接收该开关;check:scope 随签名更新,仍钉住「禁用集合是第二个实参」。
  • 版本号统一为 2026.10.200904(19 处载体校验通过)。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.191907

Choose a tag to compare

@github-actions github-actions released this 19 Oct 11:40

🐛 修复:统一网关(57892)重启后必须手动「关一下再开」

  • 症状:配置里已启用、界面开关也是绿的,但彻底退出再启动后 57892 没有监听,客户端一直「生成中」,网关侧一条日志都没有。
  • 根因:setup() 只登记了网关运行时句柄,漏了「按配置拉起监听」那一段 —— 只有「保存配置」这个动作能启动它。
  • 修复:启动时补齐 apply(),并新增跨两侧宿主(桌面端 / web 端)的回归护栏,任何一侧漏掉测试即变红。
  • 可观测:网关页「启用统一网关」一行现在显示真实监听状态(监听中 / 未监听),开关绿但端口没人 accept 一眼可见。
  • 升级后无需操作:配置启用即启动监听。

✨ Trae 上下文与 Max Mode:逐模型从官方目录读取,不再是统一 1M(issue #53)

  • 此前清单只声明 200k(取客户端缓存的 context_window_size.default),而 Max Mode 是请求级布尔字段,客户端里无从选起。
  • 网关现在重放 Trae 官方模型目录接口,读取每个模型的 dev(__dev 通道实际窗口)与 max(Max Mode 上限)。
  • max > dev 的模型在请求时注入 is_max_mode,/v1/models 直接声明它自己的上限:glm-5.3 1M、mimo-v2.6-pro 982k、Doubao-Seed-2.1-Turbo 仍是 256k —— 上限各不相同。
  • 目录缓存 24 小时;拉不到时静默沿用旧缓存,没有缓存就按客户端默认窗口声明,不猜数字。
  • 模型名保持不变:基名(glm-5.3、统一入口 trae-cn:glm-5.3)即可,没有 -max 之类的影子模型。

📊 三个平台的模型表都显示「上下文」

  • WorkBuddy:目录 API 的 context_window(同一份目录里 256k / 960k / 1M 都有)。
  • Qoder:模型元数据的 max_input_tokens。
  • Trae:上面那份 dev/max(开启 Max Mode 后显示该模型自己的上限,并注明默认值)。
  • 未知时显示 —,不编造数字;原型(docs/prototype/buddy-switch-prototype.html)同步补齐三平台交互与 ?max=off 对照。

🔧 健康检查统一为 /health(/healthz 保留为别名)

  • 四条网关此前 3:1 分裂(WB / Qoder / 统一入口用 /healthz,Trae 用 /health),现在统一为 GET /health。
  • /healthz 作为兼容别名继续可用:同一处理器、返回体逐字相同,已写死它的探活脚本不用改。

📦 Docker:预构建多架构镜像(GHCR)

  • 推 v* tag 时发布 ghcr.io/nextagentx/buddy-switch(amd64 / arm64 多架构 manifest),不必先本地全量构建。
  • docker-compose.yml 默认引用预构建镜像,保留 build: 作为回落;README 形态表补 Docker 入口。
  • 边界不变:容器里运行的是 headless 服务端(webui + 网关),不是桌面切换器。

🛠 内部

  • 新增 trae/catalog.rs(目录重放 + 解析 + 24h 缓存 + 单飞同步),三个入口列清单前触发。
  • 删除写死的 MAX_MODE_MODELS 常量表与「统一 1M」假设。
  • 版本号统一为 2026.10.191907(19 处载体,stamp-version --check 通过)。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.181354

Choose a tag to compare

@github-actions github-actions released this 18 Oct 06:12

🔄 「更多」菜单按原型重做,表格视图也补上了

账号卡片右上角那个「⋯」此前与设计原型差了不止一处:没有账号名抬头、点一下就关菜单、
签到只有「能点」一种形态、导出入口藏在抽屉里、备注和分组编辑与抽屉重复。

  • 抬头 + 结尾提示:菜单顶部显示账号名,底部提示「备注与登录态在账号详情里(点卡片打开)」——
    备注 / 分组编辑因此从菜单移出(它们在详情抽屉里),提示指路,不再两处重复。
  • 点刷新不关菜单:刷完一项常常紧接着刷下一项;而且「刷新中 / 已更新」这两个状态
    只有菜单里看得见。现在刷新项保持菜单打开,成功后亮 900ms「已更新」。
  • 签到改成三态:已签到 → 灰字「今日已签到」;凭据失效 → 灰字「手动签到 · 需先登录」;
    其余才给可点入口。此前只有「可点」一种,凭据失效的账号点下去必然失败。
  • 导出账号回到菜单;去掉「查看详情」(点卡片 / 点行就是打开详情,两个入口做同一件事没必要)。
  • 表格视图每一行也有了同一个菜单:此前只有卡片有,表格里只能点行进详情再找动作。

🧾 Trae / Qoder 的刷新项补齐

「刷新」拆成四类后(积分 / 今日 Token / 签到状态 / 凭据状态),Trae、Qoder 此前只有两项。
本期后端补上了按账号、今日口径的只读命令(get_trae_account_token_today、
get_trae_checkin_status_map、qoder_checkin_status_map),并把它们接到界面上:

  • Trae 四项齐全,卡片新增「今日 Token」指标:此前菜单里有这个刷新项,卡片上却没有这个数字,
    刷完只弹一句提示,等于那条入口是假的。现在缺席就显示「—」,网关日志被裁时显示「≥N」。
  • Qoder 三项(积分 / 签到状态 / 凭据):刷新签到状态后,卡片上的签到态立刻更新。
  • Qoder 刻意没有「今日 Token」:它的计量单位是积分(credits)、没有 token 概念,
    摆一个点了只能重读缓存的入口,比不摆更坏。

三条诚实边界仍然成立:读不到 ≠ 没签到、缺席 ≠ 0、被裁的值只是下界。

🐛 修复:详情抽屉的页签被压成一条缝

抽屉滚动区是纵向 flex 容器,内容一高,内层的页签容器会被压扁,页签只剩一条 8px 的细缝
(程序位那行下面夹着被切掉的一排)。已修复并复验。

🛠 内部

  • pr-check 增加 macOS runner,让只在 macOS 上复现的失败(issue #37)能在 CI 里复跑。
  • 门禁随之更新:签到三态的断言改为守「顺序 + 门控」,菜单组件搬家不会再让守门变摆设。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.181245

Choose a tag to compare

@github-actions github-actions released this 18 Oct 05:04

🧭 账号详情抽屉:从「七段长滚动」改成「指标 + 页签」

同一个账号的动作此前散在三处:刷新在菜单、刷新 Token 在抽屉、手动签到两边都能点,删除还埋在抽屉最底部。这一版按一条判据收敛 —— 能一步做完的进菜单;要看数据才敢决定的留在抽屉。

  • 顶部四个指标块(积分 / 今日 Token / 签到 / 凭据),一打开就知道这个账号现在什么状态,不用往下滚。每块右上角一枚 ⟳,就地刷新这一项(与菜单里的四项同一个回调,不是第二套实现)。
  • 正文改成页签:概览 / 积分 / 签到 / 凭据 / 快照(按有无内容出现)。备注、分组、程序位切换留在页签之上 —— 它们是身份与操作,藏进页签会让「改个备注」变成「先猜在哪个页签里」。
  • 「用向导切换」挪到固定底栏:长列表滚到底才找得到的问题消失。
  • 抽屉里的「操作」区只剩三枚抽屉独有的按钮(刷新 Token / 导出 / 权限诊断);手动签到、编辑备注、编辑分组、删除只在卡片「更多」里,删除不再埋在抽屉底部被顺手点到。

🔄 卡片「更多」:四类数据各自刷新

四类数据来自不同层,快慢与失败原因都不同,合成一个「刷新」时慢的拖住快的、失败也分不清是哪一层:

  • WorkBuddy:积分 / 今日 Token / 签到状态 / 凭据状态,四项齐全。
  • Trae / Qoder:只有「积分 / 凭据状态」两项 —— 它们没有「今日 Token」「签到状态」的按账号·今日只读接口。摆一个点了只会重读缓存的菜单项,比不摆更坏。
  • 进行中态按「账号 + 项」记:点一项不会四项一起转,多个账号同时刷新也不会互相吞掉。

🏷 分组可以新建了

分组在后端是自由文本,之前只有一个输入框 —— 用户看不见「已经有哪些组」,同一个组很容易被打成「客户A / 客户 A / 客户a」三份。现在改成「既有分组列表 + 就地新建」:点开先看到这个作用域里已有的组(含「未分组」),最后一枚是「新建分组」,重名会提示将直接归入。

💰 积分 / 资源包明细

抽屉的「积分」页按资源包逐条列出:包名 · 到期时刻 · 剩余/总量 · 已用 · 剩余占比条。三处刻意做对的地方:

  • 进度条画的是剩余占比(画成已用就成了「条越长越穷」);
  • 颜色按到期紧迫度(7 天内橙、否则绿),与卡片徽章同一口径 —— 没动过的包也可能下周就过期,那才是要提醒的事;
  • 到期显示到分钟(只写「3 天后过期」时,用户判断不了赶不赶上)。

同时修掉两处数据自相矛盾:临期积分改为从资源包派生(此前出现过「指标块说无临期积分、积分页却摆着一个快到期的包」);资源包剩余合计与账号积分精确相等。

🗂 快照页签

Trae 的登录态快照进了抽屉(最近修改 / 文件数 / 大小)。打开抽屉时才按账号拉取,不在列表页为一个可能不打开的抽屉预扫全部槽位。

⚠️ 已知限制

  • Trae / Qoder 的「今日 Token」「签到状态」两项刷新需要后端新增按账号、今日口径的只读接口,已写成约定(docs/specs/api-trae-qoder-per-account-refresh.md)并单独跟踪;接口到位后前端只需打开两个开关。
  • Qoder 的「今日 Token」不会做:它的计量单位是 credits,没有 token 概念。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。

v2026.10.172351

Choose a tag to compare

@github-actions github-actions released this 17 Oct 16:07

🔗 改名收尾:自动更新与下载地址全部指向新仓库

仓库已迁到 NextAgentX/qoder-trae-workbuddy-switch。上一版只修了 CI 与在线演示,客户端里写死的旧地址还在 —— 检查更新、下载安装包、README 的下载与 Issue 入口,全都指回改名前的仓库。旧地址目前靠 GitHub 的重定向还能打开,但这条兜底不属于我们的可控项:一旦重定向策略变化,用户看到的就是「已是最新」或是 404。

  • 自动更新地址(本次唯一的功能性改动):客户端与服务端的仓库坐标、Tauri updater 的三个端点、更新清单生成脚本的默认坐标,全部改为新仓库。改名后没跟着改,自更新会在无人察觉的情况下静默失效。
  • 下载与反馈入口:8 个语种 README 的版本/Stars 徽章、Releases 链接、新建 Issue 链接、Star 历史曲线,以及 CONTRIBUTING、LICENSE 版权声明行、npm 包说明、许可说明,统一换到新地址。
  • 保留旧名的地方:几处代码注释与历史文档记的是「改名前的演示 base 路径」这一事实(vite.config.ts、check-pages-base.cjs、docs/history/),按原文保留,避免把事故复盘改歪。

♻️ 质量与内部

  • cargo fmt --check、clippy 与更新模块 8 项单测(含两条 updater URL 断言)全过;前端 tsc + 7 项构建门禁(check:scope 全绿)与 vite build 全过,产物嵌入护栏测试通过。

安装包:Windows(NSIS)· macOS(DMG,Apple Silicon / Intel)· Linux(deb / AppImage);桌面端可直接在应用内更新。
许可:PolyForm Noncommercial 1.0.0 —— 源码公开(source-available)· 非商业使用。