DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

minyang2020 /

minyang2020/dsh-migrate-on-429

Verified

DeepSeek Harness (dsh) plugin: automatic session handoff when a session keeps hitting 429 TPM rate limits — cancel old, summarize handover, continue in a fresh session. True handoff, never parallel.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: master@f253c435

dsh-migrate-on-429

中文 · English

DeepSeek Harness (dsh) 插件:当会话频繁触发 429 TPM 限流(通常因为上下文过长,每次请求携带超大输入)时,自动总结当前会话并迁移到新会话继续任务 —— 先取消旧会话、再启动新会话,保证交接而非并行。

旧插件 dsh-auto-continue-429 只会反复发 continue 重试(每次 continue 都重新发送全部超大上下文 → 继续 429 → 纯烧额度)。本插件是它的超集:阈值前照常自动 continue 重试,仍持续失败就真正"换一个干净会话"续跑。

工作原理

  1. 检测:监听 agent/request-error(请求级,prepend 优先于 dsh-llm-retry)与 session/event 的 turn/end,统计 RATE_LIMIT(429)/ QUOTA / CONTEXT_WINDOW_EXCEEDED 失败。
  2. 阈值前:按退避延迟自动向当前会话发 continue(与旧插件行为一致)。
  3. 达到阈值(默认 3 次连续失败):
    • agent.cancel() 中止旧会话运行中的轮次并清空收件箱 —— 先停旧的;
    • 等待旧会话 whenIdle() 真正空闲 —— 确保不并行;
    • 从会话事件日志生成交接摘要(结构化提取:原始任务 / 用户后续指示 / 助手最近输出 / 涉及文件 / cwd / 预设 / 模型;可选再尝试一次 LLM 精炼,失败自动回退结构化);
    • 交接文档写入 ~/.dsh/migrations/<会话id>-<时间戳>.md;
    • ctx.agents.create() 创建全新会话(沿用同 cwd / 同 agent preset / 同模型,完整装配工具与系统提示),把"交接总结 + 原任务 + 继续规则"作为首条用户消息注入 —— 新会话自动出现在 Web UI 侧边栏,从尚未完成的部分继续;
    • 旧会话永久解除武装(不再自动 continue),并追加一条可见说明。

配置

配置文件 ~/.dsh/migrate-on-429.json(可在 Web 设置页「429 自动迁移」tab 里改;也可用环境变量 DSH_MIGRATE_ON_429_CONFIG 重定向到其它路径,便于测试/多 profile 隔离):

键 默认 说明
enabled true 主开关
quickOn true 对话框快捷开关(与主开关独立)
migrateThreshold 3 连续失败达到此数触发迁移(2–50)
windowMs 180000 请求级 429 滚动统计窗口(30s–1h)
llmSummary true 尝试 LLM 精炼交接摘要(失败自动回退结构化)
continueMessage "continue" 阈值前自动 continue 的消息内容

HTTP API(客户端 / 手动操作)

端点 说明
GET /api/migrate-on-429/state 状态:设置 + activeSessionId + 各会话 turnStreak/request429s/migrated + lastMigration
POST /api/migrate-on-429/toggle 主开关
POST /api/migrate-on-429/toggle-quick 快捷开关
POST /api/migrate-on-429/hide-button 隐藏输入区按钮
POST /api/migrate-on-429/set-config 改 migrateThreshold/windowMs/llmSummary
POST /api/migrate-on-429/migrate-now 手动立即迁移(body 可选 {sessionId},缺省用当前活跃会话)

界面指示器计数模型:徽标显示当前活跃会话的 turnStreak(连续失败次数,与阈值同口径);迁移中 ⏳、已迁移红色 ⇄。请求级 429 只在快速通道内部使用,不再混入展示计数。

工作区登记 / 启动对账

迁移用 ctx.agents.create 直接创建新会话,不走应用自身的 session.create 流程,因此新会话不会自动出现在侧边栏工作区下。插件在迁移后主动调用 workspace.attachSession,把新会话登记进源会话所属工作区(同一 cwd),保证侧边栏能在正确工作区看到它。

同时,插件每次加载后延迟执行一次启动对账(config.reconcileDelayMs,默认 3000ms):扫描全部会话(活跃 + 持久化),凡 cwd 能解析到某工作区但尚未登记的会话,自动补 attachSession(幂等)。这样即使升级前已产生过「未登记」的历史孤儿会话,重启后也会被自动补进正确工作区。可在 profile 的插件行配置里用 reconcileDelayMs 调整(设为 0 则插件加载后立即对账)。

打包 / 安装

⚠️ 与旧插件 dsh-auto-continue-429 的关系(安装前必读)

  • 本插件取代 dsh-auto-continue-429:两者监听同一批 429 事件,不要同时启用,否则会互相抢着重试/迁移。安装本插件前,请先把旧插件从 dependencies 和 dsh.profile.bundles 里移除。
  • 两个包名不同(@minyang2026/dsh-migrate-on-429 vs dsh-auto-continue-429),npm / 安装器解析不会撞名。
  • 若你之前装过 dsh-auto-continue-429:卸载它 → 安装本插件 → 重启应用。
  • 本插件已发布到 npm:@minyang2026/dsh-migrate-on-429(scoped 包)。

本地开发(link 依赖)

// profiles/web/package.json dependencies
"dsh-migrate-on-429": "link:C:/path/to/dsh-migrate-on-429"
// profiles/web/package.json dsh.profile.bundles 追加
"dsh-migrate-on-429"

移除旧的 dsh-auto-continue-429(bundles + dependencies),然后:

cd <profiles>/web && pnpm install

重启 DeepSeek Harness 桌面应用生效。

从 npm 安装(推荐)

dsh plugin --profile web add @minyang2026/dsh-migrate-on-429

dsh 是 DeepSeek Harness 的命令行入口(桌面应用内置;独立 CLI 可用 npm i -g @deepseek-ai/dsh 安装)。dsh plugin 会把参数转发给 profile 目录下的 pnpm,从 npm registry 安装后重启应用生效。

注意:DSH Web 的「插件市场」目前只收录 awesome-dsh-plugin.com 精选列表里的插件(curated list),不是 npm registry 的全量搜索 —— 本插件尚未提交收录,市场里暂时搜不到,请用上面的 dsh plugin 命令安装。

从 GitHub 安装

git clone https://github.com/minyang2020/dsh-migrate-on-429.git
# 然后按上面的「本地开发(link 依赖)」方式,把 package.json 里的
# link 路径换成你 clone 下来的本机目录,再 pnpm install + 重启。

已发布为 npm 包:@minyang2026/dsh-migrate-on-429(见上方「从 npm 安装」)。插件市场(awesome-dsh-plugin.com 精选列表)收录为后续计划。

设计要点

  • 交接而非并行:迁移是串行的 —— cancel(旧) → await whenIdle(旧) → create(新) → followup(新)。旧会话迁移瞬间即被解除武装,永远不会与新会话同时跑同一任务。
  • 双端安全:宿主入口 lib/index.js 顶层零 node builtins / 零 @deepseek-ai import(客户端 bundler 也能 parse);Node 端在 apply() 内懒加载 node:fs/path/os。SessionId 与模型选择注入(system-prompt/assemble + agent/request)全部内联实现,规避 profile 插件运行时无法可靠裸导入核心包的问题。
  • 健壮性:所有观测型监听不抛异常;LLM 精炼带 25s 超时与降级;迁移失败仅解除本会话武装并记录日志,不影响其它会话。

License

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit f253c435532d

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout