Repository navigation
Releases
1.1.1
界面上的倒计时:每次等待都会在开始前写一条持久的 llm/retry 记录(正常结束时补 llm/retry-started),与内置 llm-retry 完全同构。会话界面因此用它自己的 model-retry 卡片渲染这次等待 —— 实时倒计时 + 第几次,不需要任何客户端代码。
- 两条链各用独立
policyKey(cooldown-retry/capacity与cooldown-retry/mislabeled),预算互不影响 - 编号按会话历史推导而非内存计数器,插件重挂 / 会话恢复后接着数,而不是从 1 重来
- 失败字段按不变式重建:
message/code必须非空,越界的status、非正的providerRetryAfterMs、空requestId一律剔除 - 被中断的等待只留排期记录、不写收尾记录,因为那次尝试从未开始
验证:随附 dsh-llm-retry 自己的不变式 0 违规;测试 61 → 76 例全过。README(中英)新增「界面上的倒计时卡片」一节,dynamic/ 的浮动徽标因此成为可选装饰。
同时包含 1.0.3(此前未单独发布)
- 接管网关熔断重放的伪
400(400001 Audio modality is not supported):只在该 provider 近期出现过容量冷却时生效,独立预算 3 次 - 新增选项
mislabeledClientError/mislabeledMaxRetries/mislabeledBaseDelayMs/mislabeledEvidenceMs
安装 / 升级
dsh plugin --profile web add github:dboycht/dsh-cooldown-retry附件 dsh-cooldown-retry-1.1.1.zip,SHA256 E7DB62EC5BDB6C03581A08A42CFAE7AD1383502275206F8BF2831B0C4B45F544。
hmr 行是 disabled,patch 层的热重载不会重新导入插件模块(纯配置改动才热生效)。
1.0.2
dsh-cooldown-retry 1.0.2
文档修正版。 1.0.1 发布后做了一次用户端安装实测,发现两处文档与发布包实际情况不符,本版修正。插件行为与 1.0.1 完全一致,无代码改动。
修正
-
开发章节的
npm test跑不起来:package.json的files白名单不含test/,所以dsh plugin add装进 profile 的包里没有测试文件,用户照 README 在node_modules里跑npm test必然失败。已改为先git clone再跑,并明确说明test/不属于安装包。 -
安装验证方法无法复现:原文写「插件清单里应出现
cooldown-retry且phase=active」,但这个说法没有可复现的获取途径。已改为实测可用的方法:dsh --profile web --dump-config | grep -A2 'cooldown-retry'
并补充说明该行必须位于内置
llm-retry之后 ——agent/request-error是 waterfall,后注册的监听者绑定为内层监听者,这个位置决定了本插件能否对每次失败拥有优先接管权,而不是被内置快速重试短路。
用户端安装实测结论(全部通过)
在隔离的 DSH_HOME 下完整验证了第三方用户按 README 安装的路径:
| 检查 | 结果 |
|---|---|
| 仓库匿名可 clone(不带凭据) | ✅ |
dsh plugin --profile <p> add github:dboycht/dsh-cooldown-retry |
✅ pnpm 4.7s 装成,exit 0 |
自动登记 bundle 层(dsh.profile.bundles) |
✅ |
--dump-config 确认行已插入 |
✅ 且位于 llm-retry 之后 |
| 从用户 profile import 该包 | ✅ 解析到 profiles/<p>/node_modules/dsh-cooldown-retry/index.js |
| 真实 Cordis 上下文挂载 | ✅ fiber state = 2 (ACTIVE) |
不提供 commands 服务也能挂载 |
✅ 仍 ACTIVE 并正常接管重试 |
最后一项印证了设计意图:inject 只声明 timer,commands / logger 全部走 ctx.get 优雅降级,因此残缺 profile(headless / ACP)不会因为一条装饰性命令而把插件卡在 waiting。
功能(自 1.0.1 起不变)
上游网关返回容量类 429 并附带重试提示时(例如 "All upstream providers are cooling down. Please retry after 28 seconds."),按上游给出的延时长等待后重试,而不是让内置 llm-retry 在冷却窗口里用两次快速重试撞死。
- 预算按 turn + provider 计,多步 turn 共享(
acrossSteps: false可恢复旧行为) - 每次等待与放弃走
ctx.logger(名为cooldown-retry),/cooldown-retry可查计数器 - 可选
hintlessBackoff:对无提示的容量冷却也做指数退避
前置条件
github: 写法需要 PATH 上有 git(底层 pnpm 走 git 克隆)。插件本身零依赖、无需 API key。
安装
dsh plugin --profile web add github:dboycht/dsh-cooldown-retry附件
dsh-cooldown-retry-1.0.2.zip— 源码包(12 条目、扁平结构、package.json在根)- SHA256:
C6074DC403508AF47B508F8913F3D627FF2E9DD0D1586743D59329A77A34A54E
注:
1.0.1的 tag 与 Release 保持原样不动(未改写已发布历史),其 README 含上述两处瑕疵;请优先使用 1.0.2。
1.0.1
dsh-cooldown-retry 1.0.1
上游网关返回容量类 429(例如 "All upstream providers are cooling down. Please retry after 28 seconds.")时,按上游给出的延时耐心等待后重试,而不是让内置 llm-retry 在冷却窗口里用两次快速重试撞死、直接中断本轮对话。
本版在 1.0.0 基础上补齐了可观测性、配置扩展,并修正了计数语义与两处 bug。
新增
- 具名日志:等待与放弃改走
ctx.logger,日志归属cooldown-retry,不再用裸console.log:[cooldown-retry] upstream cooling down for nuaa (turn 3 step 2): retrying in 28000ms (1/5) /cooldown-retry命令:在输入框查看计数器 —— 本 turn 与累计的重试次数、累计等待、放弃次数、无提示容量失败次数、按 provider 分布。- 新配置项
键 默认 含义 acrossStepstrue一个 turn 的各 step 共享一份重试预算;设 false恢复「每 step 各一份」hintlessBackofffalse连无提示的容量冷却也接管,用指数退避 hintlessBaseDelayMs5000无提示退避的第一步延时 extractDelayMs支持裸retryAfter字段(秒);毫秒字段providerRetryAfterMs仍优先。isCapacityFailure增补适配器为 429 铸造的 code:RATE_LIMIT、rate_limit_exceeded、QUOTA_EXCEEDED、RESOURCE_EXHAUSTED、TOO_MANY_REQUESTS、HTTP 429、overloaded、server busy。
变更
- 计数语义:由「每
turn/step/provider」改为「每turn/provider」。多步 turn 里每一步都撞同一冷却时共享一份预算,而不是每步各拿一份新的 5 次。需要旧行为请显式设acrossSteps: false。 maxRetries上限为 100(异常大值不再被原样接受)。
修正
- 统计输出单位重复:
formatWaits()已自带单位,调用方又拼了一次ms,输出中出现1.0sms。现拆分为「只选单位」与「唯一拼装点」,并补三分支回归测试。 - 新 turn 的 session 统计不重置:turn 记账原先写在计数器内部,而 skip 分支在它之前就
return next(),导致新 turn 首个失败若不带提示时,session 计数仍停留在上一轮。现提为beginTurn(),置于所有分支之前。 ctx.logger改用可调用形式ctx.logger('cooldown-retry')(Cordis 的 logger 服务既可调用又直接挂.info/.warn),并保留普通对象兜底;移除未使用的解构与死参数。
其它
inject仍只有timer:commands与logger全部走ctx.get优雅降级,没有commands服务的 profile(headless / ACP / 残缺 profile)照样挂载、照样重试,只是没有那条命令。- README(英文 / 中文)新增可观测性章节、配置表改版。
- 测试 42 → 48 例,全绿。
校验
- 在真实 Cordis 上下文(真
Context+ 真 timer 插件 + 真 logger exporter)挂载验证:带提示等待、无提示指数退避、跨 step 共享预算、命令输出、日志归属均通过。
安装
dsh plugin --profile web add github:dboycht/dsh-cooldown-retry附件
dsh-cooldown-retry-1.0.1.zip— 源码包(12 条目、扁平结构、package.json在根)- SHA256:
568FD8A49C437DD7DB779B1DA93E1B798616BCECF4A3A4F0B88D736BDD38B82E