← 返回
未分类

Echo

Patch a locally installed OpenClaw Control UI so that finishing an assistant reply plays a short Web-Audio two-tone "ding-dong" chime in the browser tab. Loc...
对本地已安装的 OpenClaw ControlUI 进行补丁,使助手回复结束时在浏览器标签页中播放一段短促的 Web‑Audio 两音“叮咚”提示音。
symbolstar
未分类 clawhub v1.0.0 1 版本 99742.9 Key: 无需
★ 0
Stars
📥 388
下载
💾 0
安装
1
版本
#control-ui#latest#notification#openclaw#patch#sound

概述

echo 🔔

> ClawHub package name: echo-cue (the slug echo is taken by another publisher; product is called echo locally).

>

> Source:

!echo floating picker widget

Click the floating 🔔 in the bottom-right corner to open the picker: enable / disable, choose a preset, Preview each sound — no DevTools required.

A zero-build local patch for OpenClaw Control UI (webchat) that plays a short

two-tone chime (A5 → E5, ~900ms) when an assistant reply finishes streaming.

Designed as a stop-gap until upstream PR

openclaw/openclaw#73894

(issue #69186) lands.

Why this exists

OpenClaw Control UI has no completion sound on main yet. PR #73894 implements

it but has been OPEN without review since 2026-04-29. This skill injects an

equivalent IIFE into the bundled UI dist so it works today, and gracefully

steps aside when upstream ships.

What you get

  • Short ding-dong when the assistant finishes a reply
  • Skipped for NO_REPLY / empty silent completions
  • Always rings by default (foreground + background); set onlyHidden=on to limit to hidden tabs only
  • 4-second hard rate-limit + content-fingerprint dedup → never double-rings on streaming re-renders
  • Per-browser localStorage toggles (no UI surface added)
  • One-shot apply / remove with backup
  • Cache-bust: rewrites index.html to a new bundle filename so plain Cmd+R picks up the patch
  • Patches every detected OpenClaw install (brew + nvm + OPENCLAW_HOME) so it works

even when Gateway runs under a different node than which openclaw resolves

  • Auto-detects upstream PR landing → skips itself

Install

bash apply.sh

Then refresh your Control UI browser tab (regular Cmd+R is enough, the script

cache-busts the bundle filename). Click or press a key once on the page to

unlock the AudioContext (this happens automatically the first time you send a

message).

Verify

DevTools console:

window.__milly_cue_v1__   // → true

Send a question, switch to another tab — you should hear a ding-dong when the

assistant finishes.

Toggle (per browser)

// Disable entirely
localStorage.setItem('milly.completionCue', 'off')

// Re-enable
localStorage.removeItem('milly.completionCue')

// Ring even when the tab is in foreground (default behaviour as of 0.2.0):
localStorage.removeItem('milly.completionCue.onlyHidden')

// Limit ringing to hidden / unfocused tabs only:
localStorage.setItem('milly.completionCue.onlyHidden', 'on')

Sound presets

Click the floating 🔔 button (bottom-right of Control UI) to open the picker:

enable / disable, switch preset (with Preview button per row), toggle

"Only when tab is hidden". Settings are stored in localStorage per browser.

keygroupdescription
---------
chime (default)BasicOriginal two-tone bell (A5 → E5, ~900ms). 叮咚。
tritoneBasicApproximation of the classic iPhone SMS "Tri-tone" — three quick bright pings (E6 / C6 / G6, ~420ms).
popBasicSingle bubble pop — quick upward swoop, ~110ms. 🫭
twinkleBasicFast C → E → G arpeggio (triangle, ~280ms). ✨
dropletBasicWater droplet — downward sine sweep (1600 → 520 Hz, ~180ms). 💧
fishbiteAnimal CrossingFish-bite plonk (low sine plop + tiny splash, ~220ms). 🐟
villagerAnimal CrossingDialog "blip" — soft triangle chirp like villagers talking (~90ms). 🐾
acbellAnimal CrossingItem ding — single bright bell tone with shimmer (~260ms). 🔔
coinSuper MarioClassic two-note coin chirp (B5 → E6 square, ~220ms). 🪙
mariojumpSuper MarioJump — fast upward square pitch sweep (~150ms). 🍄
oneupSuper Mario1-Up fanfare — ascending arpeggio E5-G5-E6-C6-E6-G6 (~450ms). 🍄
powerupSuper MarioMushroom power-up — fast ascending climb (~360ms). 🌟
pipeSuper MarioWarp pipe — descending square slide (~280ms). 🟢
bumpSuper MarioBlock bonk — short low square thump with a click (~120ms). 🧱
nokiaRetroNokia tune — iconic 13-note phrase from Tárrega's Gran Vals (square, ~1.2s). 📱
modemRetroDial-up modem mini-impression — hi/low tones + brief screech tail (~600ms). 📞

Add more presets by appending to the SOUNDS array in

inject/completion-cue.iife.js (each entry needs key, label, play(ctx, master)),

then re-run bash apply.sh. The widget picks them up automatically.

Hide the floating button

localStorage.setItem('milly.completionCue.widget', 'off')
localStorage.removeItem('milly.completionCue.widget')   // bring it back

DevTools fallback (still works):

__milly_cue_sounds__              // list available presets
__milly_cue_preview__('tritone')  // preview without sending a message
localStorage.setItem('milly.completionCue.sound', 'tritone')

Uninstall

bash remove.sh

Restores the original bundle from index-*.js.milly.bak and the original

index.html from index.html.milly.bak.

After openclaw update

The update overwrites dist/control-ui/..., dropping the patch. Re-run:

bash apply.sh

apply.sh is idempotent and detects upstream:

  • Already patched → skip
  • Upstream responseCompletionSound shipped → skip + advise uninstall

Known limits

  • Anchor: .chat-group.assistant DOM class. If OpenClaw renames it the patch

silently does nothing (fail-quiet, no breakage).

  • AudioContext requires one user gesture per page load (browser policy).
  • Webchat only. TUI / iOS / macOS / Android clients are not covered (they have

their own native notification stacks).

  • Single audible cue per assistant turn regardless of message length.

File layout

FilePurpose
------
apply.shDetect every OpenClaw install, idempotent inject IIFE, backup, cache-bust
remove.shRestore from .milly.bak files
inject/completion-cue.iife.jsThe patch payload
tests/manual.md7-step verify checklist

Related

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-05-21 13:43 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

Shipcheck

symbolstar
预发布安全网:在发布前扫描 npm 包、OpenClaw 技能文件夹或 Git 仓库,以捕获个人信息泄露(绝对路径、邮箱、内部信息等)
★ 0 📥 283

Agent Token Usage UI (deprecated)

symbolstar
已废弃— 已合并到 `agent-token-usage` 技能 (v0.2.0+)。请改用安装 `agent-token-usage`,并运行 `bash apply-ui.sh` 以打开 📊 按钮。此包...
★ 0 📥 354

magpie

symbolstar
通过本地 magpie 守护进程查询 A 股行情、资金流向、K 线、自选股、警报规则及龙虎榜。适用于用户询问...
★ 0 📥 274