Skip to content
dsh.fish
Bundle

dsh-done

Task completion celebration popup with sound for DeepSeek Harness · 任务完成后弹出庆祝弹窗并播放音效

Source
mba1398
stars
1 stars
License
MIT
Updated
Updated 2 days ago

Readme

# 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

```sh
dsh plugin --profile web add dsh-done
```

or from a local checkout:

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

Then **restart** the profile.

## Build (for contributors)

```sh
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

Install

dsh plugin --profile web add github:mba1398/dsh-done

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source