Repository navigation
Releases
Releases · zchuxi/dsh-restart-task
v1.5.1 — a settled retry leaves no record
已结束的重试不再留下记录 · A settled retry leaves no record
中文
- 重试进行中的那条倒计时始终保留 —— 那是「可见重试」的全部意义。
- 重试结束之后(成功、或随回合关闭而取消),那条「已重试模型请求(N/M)」「模型请求重试已取消(N/M)」记录不再留在对话里。
- 判据全部取自产品自己的渲染:
data-chat-flow-kind="model-retry"加上只在等待退避时出现的data-active,所以不会误伤别的行,也不需要猜某次重试是谁发起的。 - 新增设置项
hideSettledRetry(默认开)。关掉「启用可见重试」时该项自动失效:那时对话里的重试属于产品自带预算,不该由本插件隐藏。 - 支持 DSH 0.1.7 / 0.2.x。
English
- The countdown shown while a retry is waiting out its backoff always stays -- that is the whole point of a visible retry.
- Once a retry settles -- it went out, or the turn closed and cancelled it -- the "已重试模型请求 (N/M)" / "模型请求重试已取消 (N/M)" record no longer stays in the transcript.
- The rule is keyed entirely on the product's own rendering:
data-chat-flow-kind="model-retry"plusdata-active, which only appears while a retry is scheduled. It cannot catch someone else's row, and nothing has to guess whose retry it was. - New setting
hideSettledRetry(default on). It yields automatically while "visible retry" is off: those retries belong to the product's own budget and are not this plugin's to hide. - DSH 0.1.7 / 0.2.x supported.
See README.md §2.1 for install and settings.
v1.5.0 — recover inside the turn, visibly
同一步内可见地重试 · Retry inside the turn, in the open
中文
- 请求失败不再由插件私自静默重试:改为放大产品自带的重试预算,因此每一次重试都是产品自己渲染的那一条 —— 带实时倒计时,可以看着它走完,也可以随时取消。
- 4xx(429 除外)属于确定性错误,永不重试,直接交回宿主。
- 输出被截断时在同一轮里续写;可选的新开一轮继续,现在也覆盖停在输出上限的答案。
- 输入框里有草稿、或收件箱里有排队消息时,「继续」会自动让位,不与用户已经发出的内容争抢。
- 被隐藏的轮次不再在轮次导航轨道上留下空洞。
- 支持 DSH 0.2.x。
English
- A failed request is no longer retried silently by the plugin. It widens the product's own retry budget, so every attempt is the one the product already renders -- a live countdown you can watch and cancel.
- 4xx other than 429 is treated as deterministic and handed straight back to the host.
- Truncated output keeps its in-turn continuation, and the opt-in continuation turn now also covers an answer that stopped at the output ceiling.
- The continuation affordance stands down while the composer holds a draft or the inbox holds a queued message.
- Hidden rounds no longer leave a gap in the round rail.
- DSH 0.2.x is supported.
See README.md for install and settings.
v1.2.4 — send-button and rail behaviour
The 1.2.x line, everything since the 0.1.7 port:
- v1.2.2 — a round whose events are not loaded is attributed from the host's whole-log projection (
estartTaskRounds), and a hidden rail mark no longer leaves a hole: the rail is measured and compacted. - v1.2.3 — the send-button takeover no longer outlives the empty composer: the draft is re-read every pass and again at the click, and releasing restores the product's verdict for an empty composer.
- v1.2.4 — the round control steps aside while the composer holds a message, keyed on the product's own primary control.
Prebuilt package: dsh-restart-task.tgz (version-free asset name on this pinned tag, so the link never rots).
v1.2.1 — awesome-dsh-plugin submission conformance
- peerDependencies (and the declarative engines.dsh) now carry an explicit
prerelease branch per supported tuple:
">=0.1.7-rc.1 <0.1.8-0 || >=0.1.8-rc.1 <0.2.0-0". node-semver only lets a
prerelease satisfy a range when a comparator on that exact major.minor.patch
tuple carries a prerelease tag, so the previous open-ended ">=0.1.7-rc.2"
admitted the next stable patch while silently excluding its release candidates.
The floor moves to 0.1.7-rc.1 after checking that runtime: it already ships
SettingsForms (no settings.register) and volatile config updates in
cordis-plugin-loader, so the settings seam this plugin needs is present there.
"<0.2.0-0" keeps the next major out on purpose: 0.2.0 is unverified, and an
explicit skip beats an unverified load. - screenshots.json declares the two settings-card images for storefronts, with
paths relative to the manifest and inside the package, as the list requires. - docs/awesome-dsh-plugin-entry.yml is the one-file submission for the list,
ready to copy to data/plugins/zchuxi__dsh-restart-task.yml. - Both READMEs explain the range's two branches and list the new files. Version
1.2.1 so the release can carry a prebuilt tarball. - Harness: 307 assertions; the range itself is pinned, including the rule that
every supported tuple needs its own prerelease branch.
Prebuilt package: dsh-restart-task.tgz (attached; the asset name carries no version, so this pinned-tag link never rots).
v1.2.0 — DSH 0.1.7 adaptation
Port the plugin to the 0.1.7 plugin contract and repair the surfaces that had
silently stopped working.
Host half
- Declare the policy as a volatile
Configand read it through the live
references the loader handsapply. The retired
settings.register(namespace, schema)seam is gone, and the settings form now
addresses the profile entry id (restart-task); the plugin records that it
ships its own page withsettings.configure({ auto: false }, ctx.fiber). - The plugin requires DSH >= 0.1.7-rc.2 through the enforced
peerDependencies["@deepseek-ai/dsh"]range, and@deepseek-ai/schemastery
^3.18.4 - the first release whose schemas can be.volatile().
Browser half
- Register the settings card into the Plugins page's
plugins.bundle.config
seat, keyed by the bundle package name, and acquire the form through
configFormsinside an optional child, so the composer control survives a
composition without the settings domain. - Continuation rows: the old
:has([data-context-source=...])rule could never
match - the attribute is valueless and the producer name is text - and a round
this plugin opens renders as a non-human trigger notice that carries no
provenance at all. Attribution now reads the session event window: a round is
this plugin's when one of its messages is that round's first input. The set
accumulates while the transcript stays on one session, so folding a completed
round or paging history can no longer take a round back. - Turn rail: read the 0.1.7 mark DOM (
button[data-index]inside the marks
container) and take the rounds from the window rather than from tagged rows, so
a tier-2 steer never hides the human's own round. - Send button (
sendBecomesContinue, default on): while a continuation is on
offer and the composer is empty, the shipped send button carries it - the one
control the product disables in exactly that state. The takeover clears
disabled, intercepts the click in the capture phase, and runs the composer
control's own action; every other click passes through, a composer the human is
typing in is never touched, and the release leavesdisabledto the product. - Both injected stylesheets declare their owner with
data-plugin, so the module
system cannot adopt them for another plugin and delete them on its unload.
Harness
- 305 assertions across four layers: pure rules, platform wiring, real host
behaviour through a stub Cordis context, and the transcript/rail/send-button
passes over a stub DOM whose event fixtures are copied from a real
session.v4.jsonl.
Packaging
- English and Chinese README, icon, licence,
.gitattributes, and a CI workflow
that installs the single runtime dependency, syntax-checks both halves, runs
the harness and packs the published artifact.