dsh-loopx-plugin
loopx-project/loopxLoopX——面向长周期 Agent 的提供商中立、本地优先状态内核与控制平面:在 DeepSeek Harness 执行层之上持久化 Goal、Todo、门禁、证据、配额、恢复与交接状态;插件负责引导安装 CLI 与技能、准入有界的同会话续跑,并为精确绑定的工作循环提供本地 GoalBar。
当原生可续接 DSH 子代理因明确的 max-tokens 终止时自动续接一次,然后停止介入。
A DSH plugin that safely recovers native continuable subagents from one high-confidence failure: explicit max-tokens termination.
When a native continuable DSH subagent ends because it hit
max-tokens, Watchdog automatically continues the same child conversation once, then stops. No loops.
When you delegate a task to a continuable subagent in DSH and the child runs out of output tokens mid-task, the runtime ends the turn with stopReason: 'max-tokens', reports the failure to the delegating agent, and stops. The work sits unfinished; the parent has to notice the failure, decide it is recoverable, and manually continue the child.
Watchdog does exactly that one recovery — deterministically, at most once — using only official DSH seams.
max-tokens on a continuable child — Watchdog observes the terminal turn/end { kind: 'max-tokens' }, starts one official durability checkpoint (sessions.flush) while the child session is still live, waits for normal settlement and checkpoint resolution, then sends exactly one continuation through the official subagents.followup() seam. The same durable child conversation cold-resumes in a new activation epoch with a short instruction to continue the unfinished task from its existing state.max-tokens again, or an explicit runtime/provider error) — Watchdog stops intervening and delivers one notice to the delegating parent with the failure facts and the official manual options (manual send_message, interrupt_agent, or re-delegating a fresh subagent).max-tokens. Provider/model errors are reported, never auto-retried.The continue-once guarantee is enforced against the child's durable session id (stable across activation epochs) plus a continuation marker written into the child's own durable log — repeated events, plugin restarts, or duplicate settlements cannot cause a second automatic continuation.
Through the ordinary DSH plugin path (verified on dsh 0.1.1-rc.2):
dsh plugin --profile <profile> add dsh-subagent-watchdog
or from a local tarball:
npm pack
dsh plugin --profile <profile> add ./dsh-subagent-watchdog-0.1.0.tgz
The package declares dsh.bundle.patch; dsh plugin add reconciles it into the profile's bundle stack automatically. Zero dependencies, no build step, Node >= 20.
max-tokens is the only automatic recovery trigger.Live-tested end-to-end against @deepseek-ai/dsh 0.1.1-rc.2 only. No broader compatibility is claimed or tested.
lib/index.js and the derived dynamic-package body) against real cordis/dsh-subagent/dsh-session dispatch — node --test test/watchdog.test.mjs.max-tokens, the same durable child session id start a new activation under a fresh runId 68 ms after settlement, exactly one durable subagent-watchdog/relay marker remain present across later inspection, and the recovered activation complete normally with no watchdog failure notice.AbortSignal plumbing are supported by prior instrumented live probes plus the deterministic suite; they were not independently emitted as explicit records in the final packaged trace.The full verified seam survey and evidence log lives in docs/DSH-SEAMS.md. The final acceptance phase crossed its original one-run/STOP boundary during debugging; that protocol deviation and the resulting evidence calibration are recorded in docs/PROTOCOL-DEVIATION-2026-08-23.md.