nanshang328/dsh-desk-card ↗★ 0

dsh-desk-card

提供右下角原生桌面卡片通知与审批 适合在 Windows 上需要就地审批、回答问题或接收运行结束通知的用户。

包名
dsh-desk-card
兼容性
待验证
版本
0.1.0
许可证
MIT
最近更新
2026年10月14日

安装

$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