alfadb
ae2735cdb6
feat(opencode): 用量窗口支持同 Key 组共享、活动防抖与超窗强刷
与 Ollama Cloud usage 对齐:OpenCode Go 作为同 Key 聚合订阅,
多个 openai/apikey/base_url=opencode.ai/zen/go/v1 账号共享同一份
用量状态与刷新节奏:
- 组共享:组指纹 sha256("opencode.ai\0"+api_key);auto_refresh 开关
与 snapshot 按组写(事务 + FOR NO KEY UPDATE + 锚点 CAS + 纯合并,
写 snapshot 不会抹掉开关);列表/详情经 ResolveAccounts 组内共享;
账号换 Key → IdentityChanged → 组级关闭 auto_refresh 并清快照
- 活动防抖 + 超窗强刷:settings 新增 debounce_minutes(默认 1,
1-60,必须小于 interval_minutes);模型请求活动经网关 5 处调用点
驱动刷新,due = min(lastUsed+debounce, fetchedAt+maxWait),
成功路径有 5 分钟最小抓取间隔,失败路径退避优先
- 手动刷新限频 10s→30s 且按组;singleflight/RunDue 按组去重;
ListDue 在 SQL 内按组算 due(CTE 分组取组内 MAX(last_used_at))
验证:go build + 五包回归 OK;新增组共享/三态 due/组单飞/
IdentityChanged/debounce 校验单测全绿;vitest 11 例全绿;
vue-tsc 零错误。
2026-09-23 15:26:35 +08:00
..
2026-07-19 14:42:01 +08:00
2026-07-23 13:43:57 +08:00
2026-07-23 13:43:57 +08:00
2026-07-14 15:00:52 +08:00
2026-09-13 17:23:24 +08:00
2026-08-26 12:46:31 +09:00
2026-07-30 18:03:54 +08:00
2026-07-15 16:13:22 +08:00
2026-07-14 15:00:52 +08:00
2026-09-03 23:32:34 +09:00
2026-09-20 14:39:36 +08:00
2026-08-01 22:11:09 +08:00
2026-07-14 15:00:52 +08:00
2026-09-07 09:20:48 +08:00
2026-07-01 12:21:45 +08:00
2026-09-23 15:26:35 +08:00
2026-07-25 15:37:06 +08:00
2026-07-23 15:50:44 +08:00
2026-09-23 15:26:35 +08:00
2026-09-23 15:26:35 +08:00
2026-07-01 12:21:45 +08:00
2026-07-01 12:21:45 +08:00
2026-07-15 23:58:46 +08:00
2026-07-15 23:58:46 +08:00
2026-08-25 10:34:46 +08:00
2026-09-05 16:05:17 +08:00
2026-09-04 10:14:29 +08:00
2026-09-07 09:20:48 +08:00
2026-09-23 01:24:59 +08:00
2026-09-23 01:24:59 +08:00
2026-07-17 09:33:18 +08:00
2026-09-18 06:56:27 +08:00
2026-07-14 15:00:52 +08:00
2026-09-20 16:41:49 +08:00
2026-09-20 16:41:49 +08:00
2026-07-16 16:30:19 +08:00
2026-09-11 10:05:24 +08:00
2026-07-14 12:24:42 +08:00
2026-08-15 10:37:51 +00:00
2026-09-19 20:52:31 -04:00
2026-09-19 20:52:31 -04:00
2026-08-28 23:32:11 +08:00
2026-07-10 11:43:44 +08:00
2026-08-28 23:32:11 +08:00
2026-08-28 23:32:11 +08:00
2026-08-28 23:32:11 +08:00
2026-08-07 12:38:49 +08:00
2026-08-07 16:36:12 +08:00
2026-09-06 08:11:23 +08:00
2026-09-02 11:50:33 +08:00
2026-09-02 11:50:33 +08:00
2026-08-08 01:07:19 +08:00
2026-08-24 12:02:53 +08:00
2026-07-16 18:18:28 +08:00
2026-08-30 16:36:13 +08:00
2026-09-01 04:34:24 +09:00
2026-09-11 10:05:24 +08:00
2026-08-31 19:21:31 +08:00
2026-09-07 18:33:39 +08:00
2026-09-11 10:05:24 +08:00
2026-09-13 11:49:03 +08:00
2026-09-20 14:38:29 +08:00
2026-08-02 21:32:31 +08:00
2026-09-20 14:38:29 +08:00
2026-09-20 15:47:53 +08:00
2026-09-20 15:47:53 +08:00
2026-07-18 00:11:18 +08:00
2026-09-11 10:16:32 +08:00
2026-07-14 14:55:30 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-02 20:04:47 +00:00
2026-07-14 01:29:46 +08:00
2026-07-14 01:29:46 +08:00
2026-07-14 01:29:30 +08:00
2026-07-23 10:26:46 +08:00
2026-07-23 10:26:46 +08:00
2026-09-19 11:25:56 +08:00
2026-09-13 17:23:24 +08:00
2026-09-13 17:23:24 +08:00
2026-09-13 17:23:24 +08:00
2026-09-08 13:38:41 +08:00
2026-09-05 23:56:59 +08:00
2026-09-23 13:35:44 +08:00
2026-07-16 00:40:46 +08:00
2026-06-26 16:19:41 +08:00
2026-08-29 17:28:00 +08:00
2026-08-29 17:28:00 +08:00
2026-09-13 00:14:16 -04:00
2026-09-11 00:50:17 +08:00
2026-08-04 15:09:29 +08:00
2026-08-26 19:07:39 +08:00
2026-07-20 00:09:21 +08:00
2026-09-23 13:35:44 +08:00
2026-09-23 13:35:44 +08:00
2026-09-13 12:33:35 +08:00
2026-09-13 11:49:03 +08:00
2026-07-19 22:40:44 +08:00
2026-07-19 22:40:44 +08:00
2026-08-28 23:32:11 +08:00
2026-08-28 23:32:11 +08:00
2026-08-28 23:32:11 +08:00
2026-07-18 10:46:42 +08:00
2026-07-18 10:46:42 +08:00
2026-07-18 10:46:42 +08:00
2026-07-18 10:46:42 +08:00
2026-07-18 10:46:42 +08:00
2026-09-10 16:41:58 +08:00
2026-09-10 16:41:58 +08:00