diff --git a/changelog/unreleased/01-features.md b/changelog/unreleased/01-features.md new file mode 100644 index 00000000..e440a989 --- /dev/null +++ b/changelog/unreleased/01-features.md @@ -0,0 +1,11 @@ +### English + +- **New** · Qoder: optional per-account traffic guard, off by default (`QODER_TRAFFIC_GUARD=on`; `QODER_TRAFFIC_GUARD_CONCURRENCY`, `QODER_TRAFFIC_GUARD_INTERVAL_MS`). +- **New** · WorkBuddy: `X-Private-Data` is configurable via `WORKBUDDY_PRIVATE_DATA=auto|true|false` (default `auto`). +- **New** · Qoder requests resolve the model name / display name to the account's catalog key; unknown models return `model_not_found`. + +### 中文 + +- **新功能** · Qoder:新增可选的单账号流量守卫,默认关闭(`QODER_TRAFFIC_GUARD=on`;可调 `QODER_TRAFFIC_GUARD_CONCURRENCY`、`QODER_TRAFFIC_GUARD_INTERVAL_MS`)。 +- **新功能** · WorkBuddy:`X-Private-Data` 可通过 `WORKBUDDY_PRIVATE_DATA=auto|true|false` 配置(默认 `auto`)。 +- **新功能** · Qoder 按模型目录把模型名/显示名解析为账号网关 key,未知模型返回 `model_not_found`。 diff --git a/changelog/unreleased/02-fixes.md b/changelog/unreleased/02-fixes.md new file mode 100644 index 00000000..a82878ff --- /dev/null +++ b/changelog/unreleased/02-fixes.md @@ -0,0 +1,21 @@ +### English + +- **Fix** · `/v1/messages` accepts in-band `role: "system"` messages; Claude Code 2.1.293+ no longer gets 400. (#328) +- **Fix** · Codex Responses-Lite models (e.g. GPT-5.6) send `reasoning.context: "all_turns"`, fixing upstream 400. (#341) +- **Fix** · WorkBuddy keeps `max` reasoning effort when the catalog advertises it, instead of downgrading to `xhigh`. (#343) +- **Fix** · Qoder streams: unique completion `id` per request, finish on `[DONE]`, release the upstream on early close, and fail over heartbeat-only upstreams (`upstream_empty`). (#339, #342, #345) +- **Fix** · Qoder tool calls: non-streaming keeps the full call; an empty `tool_calls` array is ignored. (#338) +- **Fix** · Qoder keeps earlier assistant `reasoning_content`; model key mappings refresh with each catalog refresh. (#340, #346) +- **Fix** · Legacy Qoder accounts (pre-v0.7.0 CLI login, no PAT) fall back to the worker again; no more "account not found". (#337) +- **Fix** · Qoder check-in shows why nothing was claimable; token renewal no longer clears held tokens. (#327) + +### 中文 + +- **修复** · `/v1/messages` 支持 `messages` 内的 `role: "system"`,Claude Code 2.1.293+ 不再报 400。(#328) +- **修复** · Codex Responses-Lite 模型(如 GPT-5.6)发送 `reasoning.context: "all_turns"`,修复上游 400。(#341) +- **修复** · WorkBuddy 在目录支持 `max` 时不再把推理档位降级为 `xhigh`。(#343) +- **修复** · Qoder 流式:每请求唯一 completion `id`、收到 `[DONE]` 即结束、提前关闭时释放上游、仅心跳的上游以 `upstream_empty` 切换。(#339、#342、#345) +- **修复** · Qoder 工具调用:非流式保留完整调用;空 `tool_calls` 数组不再视为工具调用。(#338) +- **修复** · Qoder 保留历史 assistant 的 `reasoning_content`;模型 key 映射随目录刷新替换。(#340、#346) +- **修复** · v0.7.0 前 CLI 登录、无 PAT 的老 Qoder 账号重新回退 worker,不再报 "account not found"。(#337) +- **修复** · Qoder 签到无可领活动时显示原因;token 续期缺字段时保留原值。(#327) diff --git a/changelog/unreleased/03-console.md b/changelog/unreleased/03-console.md new file mode 100644 index 00000000..cf97f2d3 --- /dev/null +++ b/changelog/unreleased/03-console.md @@ -0,0 +1,9 @@ +### English + +- **Console** · Cleaner look: fewer nested borders, one type scale with the system UI font, larger sidebar text; API key prefix on its own line. (#347, #350) +- **Console** · Settings split into tabs (General, Routing, Security & data, Updates); the sidebar version entry opens release notes and update actions. (#347) + +### 中文 + +- **界面** · 控制台更简洁:去掉嵌套线框、统一字号与系统字体、侧边栏加大;API 密钥前缀单独一行。(#347、#350) +- **界面** · 系统设置分为常规 / 路由调度 / 安全与数据 / 版本更新标签页;侧边栏版本入口可查看更新日志并下载/更新。(#347) diff --git a/changelog/unreleased/04-upstream-align.md b/changelog/unreleased/04-upstream-align.md new file mode 100644 index 00000000..d94b0df4 --- /dev/null +++ b/changelog/unreleased/04-upstream-align.md @@ -0,0 +1,15 @@ +### English + +- **Upstream** · Qoder: one client version (1.1.32) across headers, signature and User-Agent (`QoderWork/…` CN, `Qoder/…` intl); streams add `cosy-machineos` / `cosy-machinehostname`. (#349) +- **Upstream** · WorkBuddy client versions: CLI 2.161.0, desktop 5.8.4 / 5.8.3 (CN), IDE 2.168.2, three-part desktop User-Agent. (#349) +- **Upstream** · WorkBuddy: chat 401 refreshes the token once and retries; TLS verification errors are no longer retried or failed over. (#348) +- **Upstream** · Qoder: 10605 queue errors return 429 + `Retry-After` without cooling the account; HTTP 430 shows "client version too low". (#348) +- **Upstream** · Devin: daily vs. weekly quota told apart; cooldown follows the window reset and lifts early once usage recovers. (#348) + +### 中文 + +- **上游对齐** · Qoder:请求头、签名、User-Agent 统一客户端版本 1.1.32(国内 `QoderWork/…`、国际 `Qoder/…`);流式补 `cosy-machineos` / `cosy-machinehostname`。(#349) +- **上游对齐** · WorkBuddy 客户端版本:CLI 2.161.0、桌面 5.8.4 / 5.8.3(国内)、IDE 2.168.2,桌面 UA 改为三段式。(#349) +- **上游对齐** · WorkBuddy:对话 401 先刷新 token 再重试同账号;TLS 证书错误不再重试或换号。(#348) +- **上游对齐** · Qoder:10605 排队返回 429 + `Retry-After`,不冷却账号;HTTP 430 提示“客户端版本过低”。(#348) +- **上游对齐** · Devin:区分日/周额度,按窗口重置时间冷却,额度恢复后提前解除。(#348) diff --git a/changelog/unreleased/anthropic-inband-system-role.md b/changelog/unreleased/anthropic-inband-system-role.md deleted file mode 100644 index 64c0069a..00000000 --- a/changelog/unreleased/anthropic-inband-system-role.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- `/v1/messages` now accepts `role: "system"` entries inside the `messages` array, so Claude Code 2.1.293+ no longer fails with 400. - -### 中文 - -- `/v1/messages` 现在支持 `messages` 数组里的 `role: "system"` 消息,Claude Code 2.1.293+ 不再返回 400。 diff --git a/changelog/unreleased/client-fingerprint-versions.md b/changelog/unreleased/client-fingerprint-versions.md deleted file mode 100644 index 8a90021c..00000000 --- a/changelog/unreleased/client-fingerprint-versions.md +++ /dev/null @@ -1,13 +0,0 @@ -### English - -- Qoder requests now use one shared client version (1.1.32) for `cosy-version`, the signed payload and the User-Agent, instead of the stale 0.1.43 on auth/status calls. -- Qoder requests no longer send the Go default User-Agent; they send `QoderWork/` for the China edition and `Qoder/` for the international edition. -- Qoder inference streams now include `cosy-machineos` and a per-account stable `cosy-machinehostname`, matching the official client. -- WorkBuddy client versions are updated: CLI 2.161.0, desktop 5.8.4 (international) / 5.8.3 (China), IDE 2.168.2; desktop User-Agents use the three-part form, e.g. `WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0`. - -### 中文 - -- Qoder 请求的 `cosy-version`、签名载荷和 User-Agent 现统一使用同一个客户端版本(1.1.32),不再在认证/状态接口上使用过时的 0.1.43。 -- Qoder 请求不再发送 Go 默认 User-Agent,国内版使用 `QoderWork/<版本>`,国际版使用 `Qoder/<版本>`。 -- Qoder 推理流式请求新增 `cosy-machineos` 和按账号稳定派生的 `cosy-machinehostname`,与官方客户端一致。 -- WorkBuddy 客户端版本更新:CLI 2.161.0、桌面端 5.8.4(国际版)/ 5.8.3(国内版)、IDE 2.168.2;桌面端 User-Agent 改为三段式,例如 `WorkBuddy/5.8.4 workbuddy-ai/5.8.4 CLI/2.161.0`。 diff --git a/changelog/unreleased/codex-lite-reasoning-context.md b/changelog/unreleased/codex-lite-reasoning-context.md deleted file mode 100644 index 6d5cf0ab..00000000 --- a/changelog/unreleased/codex-lite-reasoning-context.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- Codex Responses-Lite models (such as GPT-5.6) now send `reasoning.context: "all_turns"`, fixing the upstream 400 "requires reasoning.context to be all_turns". - -### 中文 - -- Codex Responses-Lite 模型(如 GPT-5.6)现在会发送 `reasoning.context: "all_turns"`,修复上游返回 400 “requires reasoning.context to be all_turns” 的问题。 diff --git a/changelog/unreleased/console-fewer-borders-type-scale.md b/changelog/unreleased/console-fewer-borders-type-scale.md deleted file mode 100644 index 250b0ad4..00000000 --- a/changelog/unreleased/console-fewer-borders-type-scale.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Console: removed redundant nested borders (cards, tables, panels now separate by surface tone and spacing) and unified text sizes on a single type scale with the system UI font, so Chinese and English text match; the browser theme color now matches the page background. -- Console: system settings are grouped into tabs (General, Routing, Security & data, Updates), and the sidebar bottom-left entry opens a version popup with release notes and the same download / apply update actions as settings. - -### 中文 - -- 控制台:去掉多余的嵌套线框(卡片、表格、面板改用底色与间距区分),并统一为一套字号层级,改用系统 UI 字体使中英文字形一致;浏览器主题色与页面背景一致。 -- 控制台:系统设置按标签页分组(常规、路由调度、安全与数据、版本更新),侧边栏左下角入口可打开版本弹窗,含更新日志及与设置页一致的下载/立即更新操作。 diff --git a/changelog/unreleased/keys-card-prefix-line.md b/changelog/unreleased/keys-card-prefix-line.md deleted file mode 100644 index 27973060..00000000 --- a/changelog/unreleased/keys-card-prefix-line.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Console: API key cards show the key prefix on its own full-width line at a readable size. -- Console: the sidebar is easier to read, with larger menu text, icons and rows. - -### 中文 - -- 控制台:API 密钥卡片将密钥前缀单独整行显示,字号更易读。 -- 控制台:侧边栏菜单的文字、图标和行高加大,更易阅读。 diff --git a/changelog/unreleased/qoder-checkin-diagnostics.md b/changelog/unreleased/qoder-checkin-diagnostics.md deleted file mode 100644 index 56500f1f..00000000 --- a/changelog/unreleased/qoder-checkin-diagnostics.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- Qoder check-in: when upstream returns no claimable campaign, the log and the account card's check-in tooltip now show the campaign count and an `actionType:claimStatus` summary instead of only "not open"; a token renewal response that omits securityOauthToken / refreshToken no longer clears the held tokens. (#323) - -### 中文 - -- Qoder 签到:上游未返回可领取活动时,日志与账号卡片签到提示会带上活动数与 `actionType:claimStatus` 摘要,而不再只显示"签到活动未开放";token 续期响应缺少 securityOauthToken / refreshToken 时保留原值,不再被清空。(#323) diff --git a/changelog/unreleased/qoder-history-reasoning-content.md b/changelog/unreleased/qoder-history-reasoning-content.md deleted file mode 100644 index 0d2ad198..00000000 --- a/changelog/unreleased/qoder-history-reasoning-content.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- Qoder requests now keep the `reasoning_content` of earlier assistant messages instead of silently dropping it. - -### 中文 - -- Qoder 请求现在会保留历史 assistant 消息中的 `reasoning_content`,不再静默丢弃。 diff --git a/changelog/unreleased/qoder-legacy-account-fallback.md b/changelog/unreleased/qoder-legacy-account-fallback.md deleted file mode 100644 index 3652e61d..00000000 --- a/changelog/unreleased/qoder-legacy-account-fallback.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- Legacy Qoder accounts added before v0.7.0 (CLI login, no PAT) fall back to the worker again, so check-in, credit refresh and model catalog refresh no longer fail with "account not found". - -### 中文 - -- v0.7.0 之前通过 CLI 登录添加、尚无 PAT 的 legacy Qoder 账号重新回退到 worker,签到、积分刷新和模型目录刷新不再报 "account not found"。 diff --git a/changelog/unreleased/qoder-model-key-resolution.md b/changelog/unreleased/qoder-model-key-resolution.md deleted file mode 100644 index f5eb2367..00000000 --- a/changelog/unreleased/qoder-model-key-resolution.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Qoder requests now resolve the requested model name or display name to the account's gateway key from the cached model catalog, so replies come from the model you asked for; an unknown model returns `model_not_found` instead of being sent upstream raw. -- Qoder model key mappings are replaced on each catalog refresh, so keys Qoder has reassigned no longer route to the wrong model. - -### 中文 - -- Qoder 请求现在会根据缓存的模型目录把请求的模型名或显示名解析为账号的网关 key,回复来自所请求的模型;未知模型返回 `model_not_found`,不再原样发往上游。 -- 每次刷新模型目录时都会替换 Qoder 模型 key 映射,Qoder 复用过的 key 不会再路由到错误的模型。 diff --git a/changelog/unreleased/qoder-pat-meaningful-upstream-timeout.md b/changelog/unreleased/qoder-pat-meaningful-upstream-timeout.md deleted file mode 100644 index f0c65c82..00000000 --- a/changelog/unreleased/qoder-pat-meaningful-upstream-timeout.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Qoder PAT in-process ChatStream now bounds the wait for a meaningful SSE data line after a 200 (reuses `QODER_STREAM_TTFB_MS`); heartbeat-only upstreams fail over with `upstream_empty` instead of hanging. (#344) -- QwenWork ChatStream applies the same meaningful-upstream deadline for consistency. - -### 中文 - -- Qoder PAT 进程内 ChatStream 在收到 200 后等待有意义 SSE 数据行时也会受 `QODER_STREAM_TTFB_MS` 约束;仅心跳的上游会以 `upstream_empty` 失败并切换,而不再挂起。(#344) -- QwenWork ChatStream 同样加上有意义上游数据的等待上限,保持一致。 diff --git a/changelog/unreleased/qoder-stream-lifecycle.md b/changelog/unreleased/qoder-stream-lifecycle.md deleted file mode 100644 index 67180240..00000000 --- a/changelog/unreleased/qoder-stream-lifecycle.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Qoder responses now finish as soon as the upstream sends `[DONE]`, even if the connection stays open. -- Closing a Qoder streaming response early now releases the upstream connection and its converter goroutine. - -### 中文 - -- 上游发送 `[DONE]` 后 Qoder 响应立即结束,即使连接仍保持打开。 -- 提前关闭 Qoder 流式响应时,现在会释放上游连接和转换协程。 diff --git a/changelog/unreleased/qoder-tool-call-aggregation.md b/changelog/unreleased/qoder-tool-call-aggregation.md deleted file mode 100644 index 1d10cfc2..00000000 --- a/changelog/unreleased/qoder-tool-call-aggregation.md +++ /dev/null @@ -1,9 +0,0 @@ -### English - -- Non-streaming Qoder responses now keep the full tool call (ID, function name and all argument fragments) instead of only the last fragment. -- An empty `tool_calls` array from Qoder is no longer reported as a tool call or turned into a `tool_calls` finish. - -### 中文 - -- Qoder 非流式响应现在保留完整的工具调用(ID、函数名和全部参数片段),不再只剩最后一个片段。 -- Qoder 返回的空 `tool_calls` 数组不再被当作工具调用,也不再生成 `tool_calls` 结束原因。 diff --git a/changelog/unreleased/qoder-unique-completion-id.md b/changelog/unreleased/qoder-unique-completion-id.md deleted file mode 100644 index 54e12bf9..00000000 --- a/changelog/unreleased/qoder-unique-completion-id.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- Qoder streaming responses now carry a unique completion `id` per request, shared by every chunk of that request, so clients no longer merge replies from different requests. - -### 中文 - -- Qoder 流式响应现在每个请求使用唯一的 completion `id`,同一请求的所有分片保持一致,客户端不再把不同请求的回复合并在一起。 diff --git a/changelog/unreleased/upstream-align-auth-queue-quota.md b/changelog/unreleased/upstream-align-auth-queue-quota.md deleted file mode 100644 index 98847b7c..00000000 --- a/changelog/unreleased/upstream-align-auth-queue-quota.md +++ /dev/null @@ -1,15 +0,0 @@ -### English - -- WorkBuddy: an HTTP 401 on chat now refreshes the token once and retries the same account; only a failed refresh surfaces as an auth error (failover / re-login). TLS certificate verification failures are reported with a trust-store hint and are no longer retried or failed over to other accounts. -- WorkBuddy: `X-Private-Data` is configurable via `WORKBUDDY_PRIVATE_DATA=auto|true|false` (default `auto`: CLI identity sends `false` for personal and `true` for enterprise accounts; explicit values override every identity). -- Qoder: a 403/401 with code 10605 (upstream queue) no longer cools down, kills, or fails over the account (session affinity is kept); the client gets 429 with `Retry-After` from `retryAfterSeconds`. HTTP 430 is surfaced as "client version too low". -- Qoder: optional per-account traffic guard, off by default: `QODER_TRAFFIC_GUARD=on` (concurrency `QODER_TRAFFIC_GUARD_CONCURRENCY`, default 1; start interval `QODER_TRAFFIC_GUARD_INTERVAL_MS`, default 400). -- Devin: daily and weekly usage-quota exhaustion are told apart; without a reset hint the cooldown follows that window's reset time from GetUserStatus, and accounts cooled by a chat-path quota error are re-probed so the cooldown lifts early once usage has recovered. - -### 中文 - -- WorkBuddy:对话遇到 HTTP 401 时先刷新一次 token 并在同一账号重试;只有刷新失败才按鉴权错误处理(换号 / 需重新登录)。TLS 证书校验失败会给出信任证书提示,不再重试、也不再换号重试。 -- WorkBuddy:`X-Private-Data` 可通过 `WORKBUDDY_PRIVATE_DATA=auto|true|false` 配置(默认 `auto`:CLI 身份个人号发 `false`、企业号发 `true`;显式取值对所有身份生效)。 -- Qoder:带 10605 的 403/401(上游排队)不再冷却、判死或换号(保留会话亲和),客户端收到 429 并按 `retryAfterSeconds` 返回 `Retry-After`;HTTP 430 显示为"客户端版本过低"。 -- Qoder:新增可选的单账号流量守卫,默认关闭:`QODER_TRAFFIC_GUARD=on`(并发 `QODER_TRAFFIC_GUARD_CONCURRENCY`,默认 1;请求间隔 `QODER_TRAFFIC_GUARD_INTERVAL_MS`,默认 400)。 -- Devin:区分日额度与周额度耗尽;无重置提示时按 GetUserStatus 中对应窗口的重置时间冷却,并会对因对话额度错误冷却的账号重新探测,额度确认恢复后提前解除冷却。 diff --git a/changelog/unreleased/workbuddy-max-effort.md b/changelog/unreleased/workbuddy-max-effort.md deleted file mode 100644 index fbc95ed6..00000000 --- a/changelog/unreleased/workbuddy-max-effort.md +++ /dev/null @@ -1,7 +0,0 @@ -### English - -- WorkBuddy no longer silently downgrades `max` reasoning effort to `xhigh` when the model catalog advertises `max`. - -### 中文 - -- WorkBuddy 在模型目录声明支持 `max` 时,不再把 `max` 推理档位静默降级为 `xhigh`。