Skip to content

Releases

v0.9.6

Choose a tag to compare

@github-actions github-actions released this 11 Nov 05:25

🚀 Coding Usage v0.9.6 更新说明 / Release Notes

🇨🇳 中文
  • 本地 Agent 用量卡在扫描结果为空时显示正常空态,而不是红色未翻译的「no data」错误
  • 修复 Cursor 套餐卡额度不准:原先读 cursor.com/api/usage-summary,而该接口在改用周额度的账号上仍返回旧的月度池(实测显示 0%,面板实际 67%)。现在优先调用 Cursor 当前构建自己用的 api2.cursor.sh/…/GetCurrentPeriodUsage,读到的百分比与面板一致(实测 70%,重置日 2026-11-17 与面板相同);该接口无可用池时回退旧接口,套餐名(Premium)从 GetPlanInfo 补上
  • 修复 Cursor 套餐卡不显示额度:新版 Cursor 用 Electron safeStorage 加密了 cursorAuth/accessToken,探针遇到加密值就直接放弃;现在按 Qoder 同一套方式(DPAPI 解出 Chromium 密钥 → AES-256-GCM 解 v10)在本机内解开,实测解出有效 JWT 并正常返回额度。仅 Windows 可解,其它平台仍报「无法读取」而不是「未登录」
  • 额度窗口按实际池呈现:周/统一额度下 total 与 Auto 是同一个数,只显示一行,不再重复打印两行相同百分比;旧式分开计量时仍分别列出
  • 本地 Agent 用量不再为 Cursor 保留特殊行:Cursor 不提供 token 级明细(官方事件接口对周额度账号返回空,本地会话与 CLI transcript 也不记录 token),因此 Cursor 只保留套餐额度卡,不再出现在本地用量统计中;tokscale 若日后能同步出数据,仍会像其他 agent 一样自动出现
🇬🇧 English
  • The local-agent usage card now shows its normal empty state when a scan finds nothing, instead of a red, untranslated "no data" error
  • Fix the Cursor plan card reporting the wrong allowance: it read cursor.com/api/usage-summary, which still answers with the legacy monthly pool on an account moved to the weekly allowance (measured: 0% there, 67% in the IDE). The probe now prefers api2.cursor.sh/…/GetCurrentPeriodUsage, the endpoint current builds themselves use, and its percentage matches the panel (measured 70%, reset 2026-11-17 as the panel shows); the legacy summary remains the fallback and the plan name (Premium) comes from GetPlanInfo
  • Fix the Cursor plan card showing no quota: current Cursor builds seal cursorAuth/accessToken with Electron safeStorage and the probe gave up on a sealed value; the token is now recovered in-process the same way the Qoder probe does it (DPAPI-unwrapped Chromium key → AES-256-GCM v10), measured on this machine as a valid JWT returning the quota. Windows only — other platforms keep reporting "cannot be read here" rather than "not signed in"
  • The windows now follow the real pool: under a weekly/unified allowance total and Auto are the same number, so it is printed once instead of twice; a legacy split allowance still lists them separately
  • The local-agent usage card keeps no special row for Cursor: Cursor exposes no token-level detail (its events endpoint returns nothing for a weekly-allowance account, and neither local sessions nor CLI transcripts record tokens), so Cursor is represented by its plan card alone; if tokscale can ever sync data for it, the row reappears like any other agent

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.5

Choose a tag to compare

@github-actions github-actions released this 10 Nov 14:56

🚀 Coding Usage v0.9.5 更新说明 / Release Notes

🇨🇳 中文
  • invalid_grant 不再立即终止客户端遍历:按 RFC 6749 它也可能表示「令牌由另一个候选客户端签发」,立即终止会把活登录误判成死登录;现在全部候选失败、至少一次 invalid_grant 且没有候选因网络未获答复才判凭据被拒,401/403 重试分支也用同一分类
  • 修复 Antigravity 新版安装下额度卡报「登录凭据已失效」的问题:新版(appx 式布局)不再写 ~/.gemini/<flavour>/bin/agentapi.bat,以它为锚点的客户端发现扫到零个 OAuth 候选,刷新一次都没尝试就被判失败;现在直接从标准安装目录(%LOCALAPPDATA%\Programs / %PROGRAMFILES%,含 _ 布局)读 IDE bundle,实测刷新成功、额度正常返回
  • 额度卡的刷新失败文案与「凭据被拒」分开:只有 Google 明确回 invalid_grant(令牌真失效)才提示重新登录;找不到客户端或刷新服务不可达时显示「无法刷新凭据,登录本身可能仍有效」,不再误导重登录
🇬🇧 English
  • invalid_grant no longer stops the client walk early: per RFC 6749 it can also mean "the token was issued to another candidate client", and stopping there would sentence a live login to death; the login is declared rejected only when every candidate fails with at least one invalid_grant and no candidate was left unanswered by the network, and the 401/403 retry branch applies the same classification
  • Fix the Antigravity quota card reporting a dead login on current installs: the appx-style layout no longer writes ~/.gemini/<flavour>/bin/agentapi.bat, so launcher-anchored discovery found zero OAuth candidates and every refresh was declared failed without a single attempt; the IDE bundle is now also read straight from the standard install roots (%LOCALAPPDATA%\Programs / %PROGRAMFILES%, _ layout included) — measured on this machine: refresh succeeds and the quota returns
  • The card now separates a probe-side refresh failure from a rejected credential: re-login is advised only when Google itself answers invalid_grant (a truly dead token); a missing client or unreachable refresh service reads as "could not refresh, the sign-in itself may still be valid" instead of misleading re-login advice

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.4

Choose a tag to compare

@github-actions github-actions released this 09 Nov 15:02

🚀 Coding Usage v0.9.4 更新说明 / Release Notes

🇨🇳 中文
  • 关窗到托盘不再只是隐藏窗口,而是销毁窗口与其渲染进程(Electron 的隐藏渲染进程无论看不看得见都占用约 115 MB):实测空闲常驻内存由 410.8 MB / 4 进程降到 287–291 MB / 3 进程(-30%),代价是重开窗口有一次短暂加载,窗口位置会恢复
  • 无窗口期间的后台工作不重写:主进程每 autoRefreshMin 开一个隐藏窗口跑一轮原有的刷新、告警推导、推送与快照,页面回报 background:done 后销毁(超时 90 秒兜底)。实测每个周期占用约 4 秒、峰值约 115 MB,其余时间回到 3 进程
  • 因此所有状态仍然只有一份(同一份 localStorage):已读告警不会在窗口重开后重推,推送冷却与推送日志在后台周期与前台之间共享,趋势快照与日归档不断档
  • 修掉同一批告警被并发推送多次的问题:推送批次改为串行执行,后续批次看到已推送记录后直接跳过(实测同一周期由 3 条重复发送降为 1 条)
🇬🇧 English
  • Closing to the tray now destroys the window and its renderer instead of hiding it (a hidden Electron renderer holds about 115 MB whether or not it is visible): measured idle footprint goes from 410.8 MB / 4 processes to 287–291 MB / 3 processes (-30%), at the cost of a short load when the window comes back, which restores its last position
  • The work that used to happen in the hidden window is not reimplemented: every autoRefreshMin the shell opens a hidden window that runs the renderer's own refresh, alert derivation, pushes and snapshots, and the page reports background:done so it is closed (with a 90 s timeout). Measured, a cycle lasts about 4 seconds and peaks around 115 MB, then the process tree drops back to three
  • That keeps every piece of state in one place (the same localStorage): a read alert is not pushed again when the window reopens, the push cooldown and push log are shared between background cycles and the visible window, and trend snapshots and daily archives do not develop gaps
  • Overlapping push batches no longer send the same alert several times: batches run one at a time, so a later batch sees the pushed ids and stays quiet (measured: three duplicate sends per cycle down to one)

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.3

Choose a tag to compare

@github-actions github-actions released this 07 Nov 16:58

🚀 Coding Usage v0.9.3 更新说明 / Release Notes

🇨🇳 中文
  • DSH(DeepSeek Harness)用量改为主进程自行读取,不再交给 tokscale:后者的 DSH 解析器遇到一个解析不了的事件会把整份会话丢弃且不报错(本机实测:一个 21 MB、3,020 次调用、约 12.6 亿 token 的会话因末尾一个事件被整份跳过)。新读取器逐帧解压追加式 zstd、逐行容错,并同时读 DSH 应用自己的用量插件存储(~/.dsh/storages/dsh-app-plugin-usage/usage.jsonl)——转录只能覆盖仍在磁盘的会话,被应用清理掉的会话只剩那份记录;两个来源逐事件合并:转录能记账的每个 sessionId#seq 先占位,账本只补转录真没覆盖到的事件,既不会重复也不会因为一段坏尾巴 / 截断丢掉整会话。实测本机 DSH 由 tokscale 的 23.3 亿回到 112.6 亿 token / 36,151 次调用,与应用内用量插件(去重后 112.5 亿)一致
  • DSH 读取器的计数修正:真实 v4 的 fork 边界是 session/end-seed 的 data.inherited(不是 header.seedLength,忽略它会把父会话前缀重算一遍);compaction/summary 的 provider/model 在 data 上而非 data.message.source,否则这些调用会落到 dsh/unknown 而无法定价;同一 message id 的递增快照取最终值;两个来源改为逐事件合并——转录知道的每个 sessionId#seq(已计、继承、被取代,以及“早期零计数快照但同代已有最终快照”的那些)都记为已占用,账本只补转录真没覆盖到的事件,既不会重复也不会因为一段坏尾巴 / 截断丢掉整会话。已解析会话按 inode/ctime/mtime/size 缓存,重复扫从 ~5.3 秒降到 ~0.15 秒
  • 随之移除 electron/dsh-aliases.ts:不再需要把版本化转录硬链接成 tokscale 认的名字
🇬🇧 English
  • DSH (DeepSeek Harness) usage is now read by the main process instead of tokscale: tokscale's DSH reader discards an entire transcript when it meets one event it cannot parse, silently (measured here: a 21 MB session with 3,020 calls and ~1.26 B tokens was skipped wholesale because of one event near its end). The new reader decodes the append-only zstd frames one by one, tolerates unparsable lines, and also reads the DSH app's own usage-plugin store (~/.dsh/storages/dsh-app-plugin-usage/usage.jsonl) — transcripts only cover sessions still on disk, while sessions the app has deleted survive only in that store. The two sources are merged event by event: every sessionId#seq a transcript can account for (counted, inherited, superseded by a later snapshot) is claimed, and the store only contributes events no transcript covers — so nothing is counted twice and neither a damaged tail nor a truncated transcript can discard a session. Measured here, DSH goes from tokscale's 2.33 B to 11.26 B tokens / 36,151 calls
  • Three counting fixes in that reader: the real v4 fork boundary is session/end-seed with data.inherited (not header.seedLength, which double-billed a child session's inherited prefix); a compaction/summary names its channel on data, not on data.message.source, so those calls no longer land in dsh/unknown where they could not be priced; and a repeated message id keeps its final snapshot. The two sources are now merged event by event: every sessionId#seq a transcript can account for is claimed — counted, inherited, superseded by a later snapshot, or an early counter-less snapshot of a generation that later reports — and the store only contributes events no transcript covers — so nothing is counted twice and neither a damaged tail nor a truncated transcript can discard a session. Parsed sessions are cached by inode/ctime/mtime/size, taking a repeat scan from ~5.3 s to ~0.15 s
  • electron/dsh-aliases.ts is gone with it: versioned transcripts no longer need hard-linked canonical names for tokscale

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.2

Choose a tag to compare

@github-actions github-actions released this 07 Nov 05:41

🚀 Coding Usage v0.9.2 更新说明 / Release Notes

🇨🇳 中文
  • 灵动岛(告警浮层)改为两套主题下恒定的深色表面:以前它用「前景色作底、背景色作字」,于是浅色主题下是黑底白字、深色主题下反而变成了浅底深字;现在它像硬件遮蔽区一样始终是深底浅字,叠在页面之上不会跟着主题翻色
🇬🇧 English
  • The alert island now paints a constant dark surface in both themes: it used foreground-on-background, so light theme gave a black pill with white text while dark theme flipped it to a light pill with dark text. It now stays dark-backed like the hardware cutout it imitates, instead of inverting with the page

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.1

Choose a tag to compare

@github-actions github-actions released this 07 Nov 02:57

🚀 Coding Usage v0.9.1 更新说明 / Release Notes

🇨🇳 中文
  • 订阅额度卡与套餐卡全部改为铺满所在网格单元,同一行的卡片等高;留白处不再是一块空区:有可补的信息先补(只有余额的卡写供应商 tagline),剩下的用品牌单色字形压一枚 6% 淡水印(样式已在 DESIGN_SYSTEM.md §1.1 记为明确的例外)
  • 订阅额度卡的对齐:Antigravity 卡有多个模型分组时改为占两列并排展示,不再把一个格子拉成两倍高、让同行其他卡片半空着;只有一组或没数据时仍是单格(窄屏下全部单列)
  • 套餐卡的对齐:只有余额没有用量窗口的卡片(如 DeepSeek)现在填满所在网格单元,卡头下面补一行供应商 tagline、余额块在剩余高度里居中,与同行的 MiniMax 卡等高;以前它会在被拉伸的格子里缩短,给人一种行不齐的感觉
  • 本地 Agent 用量支持 Qoder 国际版:~/.qoder 的会话归到独立的一行「Qoder Global」,国内版仍读 ~/.qoder-cn。国际版不返回 token,只有 credits,所以这一行按 credits 记账(行内明细与模型行都标出 Credits),token 列显示 — 而不是伪 0
  • 计划页新增 Qoder 国际版的官方额度卡:主进程解 IDE 本地登录(auth.v1.dat,Windows 走 DPAPI)后调 openapi.qoder.sh 的用量接口,卡片显示已用/总量与百分比;凭据只在主进程内存,不进渲染层、不落盘。macOS/Linux 无法读该登录,卡片明确提示而不是谎报「未登录」
  • 修复历史库回填丢失 credits 的问题:旧扫描不再上报的 credits 计费客户端被保留时,其 credits 现在也计入当日合计,否则「未分类」口径会把差额吞掉、头部数字偏小
  • 跨构建去重按会话文件名 + 消息 id 计算:同一会话被复制到两个根时仍只算一次,但不同会话里重复的消息 id 不再会互相删掉;byok: 模型 id 不再被当成厂商(否则每个 BYOK 配置会在供应商分布里多一行)
🇬🇧 English
  • Every subscription-quota card and plan card now fills its grid cell, so cards in one row are the same height; the leftover space is no longer a void — real information goes in first (a balance-only card carries its provider tagline), and whatever is left gets the brand's mono glyph as a 6% watermark (recorded as an explicit exception in DESIGN_SYSTEM.md §1.1)
  • Subscription-card alignment: the Antigravity card now spans two columns and lays its model groups side by side when it has more than one, instead of stretching one cell to twice the height and leaving its row neighbours half empty; with a single group or no data it keeps one cell (everything is a single column on narrow screens)
  • Plan-card alignment: a card that carries only a balance and no usage windows (DeepSeek, for instance) now fills its grid cell — its provider tagline goes under the header and the balance block centres in the remaining height — matching the height of its row neighbours; it used to shrink inside the stretched cell and make the row look unfinished
  • Local agent usage now covers Qoder's international build: sessions under ~/.qoder get their own "Qoder Global" row while the domestic build keeps reading ~/.qoder-cn. The international build returns no tokens — only credits — so that row is accounted in credits (the row detail and its model rows both label Credits) and the token columns show — instead of a fake 0
  • The plans page gains an official quota card for Qoder's international build: the main process reads the IDE's local login (auth.v1.dat, DPAPI on Windows) and calls openapi.qoder.sh's usage endpoint, and the card shows used/total plus a percentage. The credential stays in main-process memory, never reaching the renderer or disk. macOS and Linux cannot read that login, and the card says so instead of claiming "not signed in"
  • Fixed carried-over history dropping credits: when a credits-billed client the fresh scan no longer reports is kept from the store, its credits now join the day total too — otherwise the "unclassified" derivation would absorb the difference and the headline would under-report
  • Cross-build deduplication is scoped to the session file name plus message id: a session copied into both roots still counts once, while a message id repeated in a different session can no longer delete the second session's usage, and byok: model ids no longer become vendors (which would have added one provider row per BYOK profile)

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 14:22

🚀 Coding Usage v0.9.0 更新说明 / Release Notes

🇨🇳 中文
  • 灵动岛浮层隐藏后不再常驻一个渲染进程:隐藏 30 秒后销毁窗口,下一条告警按需重建。实测释放 113 MB 工作集 / 38–55 MB 私有内存,重建到告警可见约 220 ms;该进程此前会一直挂在后台(JS 堆不足 10 MB,其余全是 Chromium 的单进程底座)
  • 修复浮层的首条告警可能丢失:待发告警原来在页面加载完成时回放,此时渲染层还没订阅监听器;改为渲染层就绪(新增 island:ready)后再投递,重建出来的窗口也能收到第一条告警
  • 三张按 20px 显示的 Agent 品牌图标改用 128px 源图(原为 512 / 1024px),资源体积 1,020 KB → 62 KB,显示效果不变
  • 发布说明的页脚不再只写「Windows」:改为列出 Windows(NSIS / 便携版)、macOS(dmg / zip,含未签名的首次打开提示)与 Linux(AppImage)三平台;本地预览时的 CRLF 也会归一成 LF,与 workflow 生成的正文一致
🇬🇧 English
  • The island overlay no longer keeps a renderer process alive after it hides: the window is destroyed 30 seconds after it goes away and recreated on the next alert. Measured: releases 113 MB of working set / 38–55 MB of private memory, with about 220 ms from recreate to a visible alert; the process used to sit in the background for the whole session (its JS heap is under 10 MB — the rest is Chromium's per-process baseline)
  • Fixed the overlay dropping its first alert: pending batches were replayed when the page finished loading, before the renderer had subscribed; they are now delivered once the surface reports it is listening (new island:ready), so a freshly created window receives its first alert too
  • The three agent brand icons drawn at 20px now ship 128px sources instead of 512 / 1024px ones: 1,020 KB → 62 KB of assets, identical on screen
  • The release-notes footer no longer claims Windows only: it now lists all three platforms — Windows (NSIS / portable), macOS (dmg / zip, with the unsigned first-launch note) and Linux (AppImage) — and a local preview normalizes CRLF to LF so it matches the body the workflow generates

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.8.9

Choose a tag to compare

@github-actions github-actions released this 06 Nov 11:03

🚀 Coding Usage v0.8.9 更新说明 / Release Notes

🇨🇳 中文
  • 本地 Agent 用量:Cindy 的读取器现在会找出机器上所有 Cindy 构建的 agent home(国内版 %APPDATA%/Cindy、国际版 %APPDATA%/CindyGlobal),并各自成为用量卡里的独立一行(Cindy / Cindy Global)。此前只认 Cindy 一个目录,换成国际版的用户那一行直接没有数据
  • 目录名改为按 Cindy 前缀扫描,构建改名不会再让这一行静默消失;认不出的构建名归到国内版那一行,不会被丢掉。跨构建按 entry id 去重:国际版首次启动迁移过来的会话只算一次,并留在实际产生它的那一行
  • 网关的 auto/<模型> 模型 id(国际版的路由写法)不再把 auto 当成厂商:前缀剥掉后归到实际提供服务的 provider,同一个模型在国内版和国际版里落到一行、同一份价格
  • 供应商分布里表里没有的 provider id 改为可读写法:- / _ 分隔的 slug 按词首字母大写显示(little-jochen → Little Jochen),没有分隔符的 id 保持原样,不凭空造名
🇬🇧 English
  • Local agent usage: the Cindy reader now discovers every installed Cindy build's agent home (%APPDATA%/Cindy for the domestic build, %APPDATA%/CindyGlobal for the international one) and gives each its own row on the usage card (Cindy / Cindy Global). It used to know only Cindy, so a user who moved to the international build saw no data on that row at all
  • Build userData directories are now found by the Cindy prefix instead of a hard-coded name, so a renamed build can no longer make the row vanish silently; a build name the table does not know feeds the domestic row instead of being dropped. Entry ids are deduplicated across builds, so a session migrated over on the international build's first run is counted once and stays on the row that produced it
  • Gateway model ids of the form auto/<model> (the international build's routing spelling) no longer turn auto into a provider: the prefix is stripped and the generation is attributed to the provider that actually served it, so one model lands on one row and one price across both builds
  • Provider ids the label table has not learned yet now read as words: a - / _ slug is title-cased (little-jochen → Little Jochen), while an id with no separator is left exactly as it is — no name is invented

安装包见下方 Release 附件:Windows(NSIS 安装版 / 便携版)、macOS(dmg / zip,未签名,首次打开请右键 App →「打开」)、Linux(AppImage,chmod +x 后运行)。
Installers are attached below: Windows (NSIS installer / portable), macOS (dmg / zip, unsigned — right-click the App → Open on first launch) and Linux (AppImage, chmod +x then run).

v0.8.8

Choose a tag to compare

@github-actions github-actions released this 06 Nov 05:43

🚀 Coding Usage v0.8.8 更新说明 / Release Notes

🇨🇳 中文
  • 修复 Antigravity 用量把历史会话算到「今天」的问题:本地会话库里缺少逐行时间戳的行,原先按数据库文件(含 -wal / -shm 附属文件)的修改时间归档;而 Antigravity 打开或关闭时会做 checkpoint,刷新这些时间,于是没在用它也每天显示新增用量。现在这类行改按会话文件的创建时间归档,完全不再参考附属文件;连创建时间都取不到的行直接跳过,不再落到 1970-01-01
  • 补充回归测试:有逐行时间戳时按其日期归档;无时间戳时按创建时间归档且不受文件 mtime 影响;重复 response id 只计一次
🇬🇧 English
  • Fixed Antigravity usage being credited to "today": rows in a local conversation database that carry no per-row timestamp were dated by the database file's mtime, including its -wal / -shm sidecars — and Antigravity rewrites those on every checkpoint when it opens or closes, so a dormant account showed fresh usage every day. Such rows are now dated to the conversation file's creation time and never consult the sidecars; a row with no usable date at all is skipped instead of landing on 1970-01-01
  • Added regression tests: timestamped rows keep their own dates, timestamp-less rows use the creation date and ignore the file mtime, and a repeated response id is counted once

安装包见下方 Release 附件(Windows)。
Installers are attached below (Windows).

v0.8.7

Choose a tag to compare

@github-actions github-actions released this 03 Nov 13:47

🚀 Coding Usage v0.8.7 更新说明 / Release Notes

🇨🇳 中文
  • 套餐计划页的卡片可以拖动调整顺序,官方订阅额度那九张卡同样支持;顺序保存在本地设置里,重载、重启后保持,导入导出也一并带上。键盘也能排序:聚焦卡片后用方向键移动,屏幕阅读器会播报新位置
  • 筛选状态下拖动只重排当前可见的卡片,被筛掉的卡片保持原位置;新增或删除账号不会打乱已排好的顺序
  • 修复拖动时卡片不跟手、整体偏移的问题:换位会移动卡片的 DOM 节点并让浏览器释放指针捕获(改为在 window 上监听),悬停动画与拖拽共用同一个位移值互相覆盖(悬停改为阴影提示),位置基准用了不含滚动量的 offsetLeft/offsetTop(改为按视口矩形减去自身位移计算)
  • 修复套餐计划页出现两条竖向滚动条:屏幕阅读器的播报区用了绝对定位且没有定位祖先,把文档撑高;改为 fixed,不再参与布局
🇬🇧 English
  • Cards on the plans page can be dragged into your own order, including all nine official-subscription cards. The order is saved in local settings and survives reloads and restarts, and is carried by settings export/import. Reordering also works from the keyboard: focus a card and use the arrow keys, with the new position announced to screen readers
  • While a filter is active, dragging reorders only the visible cards; filtered-out cards keep the slots they already occupied, and adding or removing an account does not disturb an arrangement you already made
  • Fixed the dragged card drifting away from the pointer and landing offset: reordering moves the card's DOM node, which makes the browser release pointer capture (now listened for on window), the hover animation and the drag shared one offset value and overrode each other (hover now shifts a shadow instead), and the position baseline used offsetLeft/offsetTop, which ignore the ancestor's scroll (now the viewport rect minus the element's own transform)
  • Fixed the plans page showing two vertical scrollbars: the screen-reader live region was absolutely positioned with no positioned ancestor, which pushed the document taller than the viewport; it is now fixed and takes no part in layout

安装包见下方 Release 附件(Windows)。
Installers are attached below (Windows).