DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Goal Pause Guard — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
G

dsh-goal-pause-guard

Goal Pause Guard

DSH plugin: asks for confirmation in a modal before pausing a running goal. Confirming pauses the goal, which also aborts the in-flight round so running subtasks stop immediately; cancelling does nothing.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:frederico-kluser/dsh-goal-pause-guard#da751ec533cb0b484377fea152aff90b45702625
READMECompatibilityVersions

Compatibility and provenance

Goal Pause Guard is published as dsh-goal-pause-guard and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/18/2026

Versions

0.1.0stable
9/18/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 1
Weekly downloads
0
Last push
9/18/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in productivity-workflow.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio and its curated slide templates as a native DeepSeek Harness conversation view.

README

dsh-goal-pause-guard

Plugin para o DeepSeek Harness: modal de confirmação antes de pausar uma atividade rodando.

Pausar uma goal não é um gesto pequeno: ela interrompe a rodada atual e todas as subtarefas em execução na hora. O plugin pede confirmação antes.

Modal de confirmação antes de pausar a goal


Porquê

No harness, pausar uma goal armada dispara uma cascata (motorizada no goal-round-driver, goal/changed → agent.cancel, keepInbox):

  1. a rodada em andamento é abortada — o agente para de executar no meio do que estava fazendo;
  2. as subtarefas em execução param junto (tools, comandos, subagentes);
  3. a continuação automática fica desarmada — nada de novas rodadas até um resume humano.

É exatamente esse efeito que o plugin coloca atrás de um portão: um clique acidental no botão de pause não pode desligar uma atividade que está rodando.

O que o plugin faz

clique em "Pause goal" (clique humano, trusted)
        │
        ▼
  ┌──────────────┐   captura no document (capture phase, antes do React)
  │ GUARD        │   isPauseButton? ── não ──► o clique passa (fail-open)
  └──────┬───────┘
         ▼ sim
  MODAL DE CONFIRMAÇÃO  (pt-BR / en / zh, tema claro-escuro do host)
     ├── Cancelar / Esc / fundo ──► nada acontece
     └── Confirmar ──► re-clique UNTRUSTED no botão de pause ATUAL
                          │  (passa pelo guard sem re-gate)
                          ▼
                    GoalBar → goals.pause (Remote RPC)
                          ▼
                    host: goal paused + rodada abortada + subtasks param
  • Detecção por dois canais — o botão é reconhecido pelo aria-label localizado (Pause goal / 暂停目标, os dois dicionários da barra de goal) ou pelo path SVG do ícone de pause (IconPauseOutline16), sempre dentro de [data-goal-bar] (o marcador que o próprio e2e oficial usa).
  • Fail-open por projeto — se o botão não for identificável, o clique passa e o pause se comporta exatamente como sem o plugin. Um portão de confirmação nunca pode quebrar a ação que protege.
  • Sem loop, sem referência velha — o confirm re-localiza o botão de pause atual antes de re-clicar (um re-render entre abrir e confirmar nunca transforma "confirmar" em "clicar outra coisa"); botão desabilitado ou removido nesse meio-tempo = nada acontece.
  • Um modal por vez — Esc, fundo e Cancelar fecham; o foco vai ao botão de confirmar e volta ao botão de pause no fechar.
  • Determinismo — sem timers, sem rede, sem storage. A metade host é um apply vazio (mesmo padrão do @deepseek-ai/dsh-client-ui-goal): nenhum estado do harness é tocado.

Instalação

Como bundle do profile web — o dsh.bundle.patch do pacote ativa a camada sozinho (insert próprio, sem colidir com nenhum outro id):

dsh plugin --profile web add /caminho/para/dsh-goal-pause-guard
dsh web   # reinicie a instância; plugins entram no boot

Desinstalar: remova a linha do bundle do ~/.dsh/profiles/web/package.json (dsh plugin --profile web remove dsh-goal-pause-guard) e reinicie.

Verificação

Toda a verificação roda isolada — nenhum teste toca uma instância real do DSH (nem a porta 3080, nem o $DSH_HOME):

pnpm install
pnpm run typecheck   # tsc estrito
pnpm run build       # dist/ (host) + lib/client.js (browser, closure-factory)
pnpm test            # 23 testes: detector + comportamento + e2e do artefato
CamadaProva
Detector (unit, jsdom)os dois canais de identificação; rejeição de todo o resto (resume/edit/clear, botões fora da barra, ícones estrangeiros, prefixos parecidos)
Comportamento (jsdom)clique humano abre o modal e nunca chega ao app; confirmar re-clica UMA vez como untrusted; cancelar/Esc/fundo não pausam; segundo clique engolido; botão removido/desabilitado no confirm não dispara; disposer remove tudo
E2E do artefatoo lib/client.js enviado é carregado como o harness carrega (window.__ModuleLoader__.load({id, factory})) e o fluxo inteiro é dirigido sobre ele

O screenshot acima é real: capturado num boot isolado ( $DSH_HOME temporária + porta própria) com Chromium headless, clicando no botão de pause de verdade (evento trusted via CDP) — o guard abriu o modal e o cancelamento não enviou pausa nenhuma.

Estrutura

dsh-goal-pause-guard/
├── package.json             # dsh.bundle.patch + dsh.client (platform web) + exports["./client"]
├── cordis.patch.yml         # camada 1 (bundle): insert próprio, sem !!js, sem config
├── src/index.ts             # host half: apply vazio (entrada do Loader)
├── client/
│   ├── guard-core.ts        # TODA a lógica: detector, textos, modal, install (0 imports)
│   ├── index.ts             # plugin body: inject [] + apply(ctx) via ctx.effect
│   ├── guard.css            # modal com tokens --dsw-* (claro/escuro), classes gpg-
│   └── client.d.ts          # declaração do subpath ./client
├── scripts/build-client.mjs # esbuild → lib/client.js (closure-factory, CSS embutido)
├── test/                    # jsdom + node:test, offline por projeto
└── dist/, lib/              # produtos do build (host half / browser bundle)

Compatibilidade

Verificado contra DSH 0.1.5-alpha.2 (a linha viva instalada, bootada do source). O detector ancora em dois fatos estáveis da superfície — data-goal-bar e o aria-label do action.pause do dicionário goal. Se o harness mudar os dois ao mesmo tempo, o guard fica fail-open (pause sem modal) — nunca quebrado.

Licença

MIT © Frederico Kluser