nanshang328/dsh-desk-card ↗★ 0

dsh-desk-card

Bottom-right native desktop cards for DSH approvals, questions, turn completion and errors: a self-drawn WPF card that can be approved in place, and is skipped while a fullscreen app or Do-Not-Disturb is active. 适合在 Windows 上需要就地审批、回答问题或接收运行结束通知的用户。

Package
dsh-desk-card
Compatibility
Unverified
Version
0.1.0
License
MIT
Last updated
Oct 14, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:nanshang328/dsh-desk-card

Configuration

Everything has a built-in default, so this section is optional. To change something, add a row with the same id from your profile's own cordis.patch.yml (~/.dsh/profiles/desktop/cordis.patch.yml):

- insert:
    - id: dsh-desk-card
      name: dsh-desk-card
      config:
        doneTimeoutSeconds: 10
        scale: 1.0
        language: en

Only the keys you list are changed — a config object replaces the whole object, and every key you leave out falls back to the defaults below.

keydefaultmeaning
timeoutSeconds0auto-close seconds for cards that wait for you (approval / question). 0 = stay until answered
doneTimeoutSeconds5auto-close seconds for the completion card. 0 = keep it until clicked
scale1.2card scale factor
skipWhenFullscreentrueskip cards while a fullscreen app is in the foreground, or while Windows says Do-Not-Disturb
notifyQuestionstrueshow the question card
notifyErrorstrueshow the error card
notifyDonetrueshow the completion card
languageautoauto (follow the DSH locale), zh or en
hostProcessDeepSeek Harnessthe process whose window is brought to front when you click a card

The three notify* switches only control the cards — approvals and questions always keep working, the card just does not appear.

The fullscreen gate

A card is not drawn when either of these is true:

  • SHQueryUserNotificationState reports a fullscreen app, presentation mode or Do-Not-Disturb; or
  • the foreground window covers its whole monitor and is not the desktop (this keeps games that hide the real state from being interrupted).

When a card is skipped the approval is handed back to the normal DSH UI (with prepend: true this plugin speaks first, and a skipped card always delegates to the next answerer), so nothing gets stuck. Two test tools reproduce the condition without a game:

powershell.exe -File test/gate-probe.ps1 -MaxSeconds 20          # watch the gate flip blocked -> free
powershell.exe -File test/fake-fullscreen.ps1 -HoldSeconds 8     # paint a fullscreen window for 8s