dsh-done
其他 活跃维护

dsh-done

mba1398/dsh-done

提供不消耗API调用额度的终端交互插件,基于本地预设规则实现指令解析与结果反馈,无需调用大模型接口即可完成常规终端操作,避免Token浪费的同时保障操作流畅无卡顿。

1
Stars 标星
0
Forks 分支
1
Watchers 关注
0
Open Issues
TypeScript
主要语言
None
开源协议
28 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:mba1398/dsh-done
git clone https://github.com/mba1398/dsh-done.git
git clone git@github.com:mba1398/dsh-done.git
README.md main

dsh-done

Task completion celebration popup with sound for DeepSeek Harness.
When an agent finishes a task (status goes running → idle), a celebratory
popup appears in the page (confetti + fanfare), then auto-dismisses.

Features

  • 🎉 Popup overlay in the shell.overlay slot when a task completes
  • 🎊 Confetti animation + bounce-in
  • 🔊 Web Audio fanfare (ascending C5-E5-G5-C6), no external audio file
  • ⏳ Auto-closes after ~3.2 s
  • 🎲 Random encouraging message on each completion

Install

dsh plugin --profile web add dsh-done

or from a local checkout:

dsh plugin --profile web add /path/to/dsh-done

Then restart the profile.

Build (for contributors)

pnpm install
pnpm run build          # tsc (host) + tsdown (client bundle)
pnpm publish
  • Host entry: src/index.ts → lib/index.js
  • Client bundle: src/client/index.tsx → lib/client.js

Publish / distribute

  • Publish to npm, then tag the GitHub repo with the dsh-plugin topic so
    DSH users can discover it.
  • To appear in the marketplace lists, open a PR in the relevant community
    curated list (e.g. awesome-dsh-plugin-series repositories).

How it works

  • Host (src/index.ts): listens to agent/status; when status is idle,
    records the completion timestamp. Exposes celebration/check RPC.
  • Client (src/client/index.tsx): polls celebration/check every 500 ms;
    on a fresh completion, shows the popup in shell.overlay.

Runtime adaptation (important)

This plugin installs as a static bundle (loaded by the Loader via
{id, name}), so it uses the webServer route scheme for Host↔Client
communication — the harness/host bridge only exists inside the dynamic
Cordis plugin sandbox and is not present on a static bundle's ctx:

  • Host (src/index.ts): inject: ['webServer'], registers the
    GET /dsh-done/check route via
    ctx.effect(() => ctx.webServer.register({ kind: 'exact', path: '/dsh-done/check', handler })).
  • Client (src/client/index.tsx): polls fetch('/dsh-done/check?since=…')
    every 500 ms; on a fresh completion, shows the popup in shell.overlay, and
    also registers a sidebar.footer.action entry (🎉 manual trigger button).

Restart the profile after installing so the host route registers; the client
bundle is served dynamically by dsh-client-modules, so a page refresh picks
it up.

License

MIT