DSH 0.2.0-rc.1 moved the live running label out of button[data-turn-process]
(which now carries only completed text) and into a new div[data-chat-running]
indicator rendered through TextShimmer.
- Discover the label host newest-layout-first: [data-chat-running], then
[data-turn-process], then [role="status"] as a legacy-only fallback.
- Rewrite every matching text node in a host, not just the first: TextShimmer
renders the label twice (visible layer + aria-hidden decorative overlay), and
leaving one behind paints the stock wording back on top of the phrase.
- Skip nested live regions while scanning, so the screen-reader announcement
survives now that it sits inside the label host.
- Extend hostOf() to the new hook so the per-second rewrite is still restored
synchronously, before paint.
Tests cover all three layouts, including 0.2.0 precedence over a finished
process row and both shimmer layers staying in sync.
DSH 0.1.7-alpha.2 removed the visible [role="status"] turn status. The
running label now lives inside a <button data-turn-process> and reads
"Deep diving for 12s" (en) / "深度求索中,用时12s" (zh), rewritten every
second with the live duration. The only remaining [role="status"] is a
visually hidden screen-reader announcement, which the plugin previously
rewrote by mistake while the visible label went untouched.
- Locate the label via [data-turn-process], falling back to the legacy
[role="status"] text node on DSH <= 0.1.5.
- Match running labels by locale-aware prefix so duration rewording and
future locales keep working.
- Release the claim when the label stops meaning "a turn is running", so
the final "Worked for 12s" is never clobbered.
- Restore the label synchronously from the MutationObserver fast path:
observer callbacks run before paint, so React's per-second duration
rewrite no longer flashes the stock text through.
- Never touch the visually hidden announcement; screen readers still get
the real status.
- Wrap the effect in try/catch so an unexpected error disables the plugin
instead of breaking the chat view.
- 29 new phrases (125 total).
- Test suite expanded to twelve checks covering both DOM layouts,
turn-end release, and phrase-list integrity.
DSH web-profile plugin bundle that replaces the static "Deep diving..."
turn-status label with 96 rotating loading phrases. Entirely browser-side:
it claims the [role="status"] label text node, re-asserts the claim when
React reconciles the stock string back, and rotates phrases on a 2.2s
timer so the label keeps moving even when streaming never re-renders it.
The elapsed-time clock, aria-live, and shimmer styling are untouched.
Includes a headless DOM-stub test covering initial claim, clock
preservation, React revert, timer rotation, localized-label detection
(Deep diving... / 深度求索中...), and clean disposal.
Architecture inspired by ldgeng/dsh-claudecode-tips (MIT).