Introduction¶
When developing agents or orchestrating workflows with DeepSeek Harness Web, developers often need to repeatedly switch browser tabs to check whether the workspace has finished, whether errors occurred, or whether approvals or questions are pending. dsh-tab-watchdog, as a persistent plugin, solves this pain point. It displays visual feedback on the browser tab title and icon, allowing developers to monitor workspace status without switching pages.
Plugin Positioning¶
This is a client-side plugin for DeepSeek Harness Web, maintained by the developer andreagosto. It bundles the logic of the original dynamic plugin into a persistent bundle, so it starts with the DSH process and remains running.
Core Features¶
- Pending Count Display: Shows the current total number of pending items in the browser tab title.
- Visual Flashing Prompt: When a status change occurs, the tab title and icon flash green or yellow.
- Persistent Runtime: The plugin supports DSH restarts and browser refreshes (F5), without requiring reactivation.
- Multi-Event Listening: Monitors events for work completion (green), errors, approvals, and questions.
- Favicon Status Hint: Uses the Favicon (whale icon) to indicate status changes without replacing the original icon.
Installation and Activation¶
This plugin is managed through npm packages. Before installation, make sure pnpm is installed, or let the dsh plugin command handle it automatically.
In the terminal containing the dsh-tab-watchdog directory, run:
npx @deepseek-ai/dsh@latest plugin --profile web add ./dsh-tab-watchdog
After installation, restart dsh web to activate the browser-side logic.
Remove Plugin:
npx @deepseek-ai/dsh@latest plugin --profile web remove dsh-tab-watchdog
Working Principle¶
The plugin uses a dual-half structure, consistent with official plugins:
- Host Half (
index.js): Responsible for registering the plugin as a Loader entry. It configurescordis.patch.ymlanddsh.bundle.patchto include the browser-side code in the startup manifest. - Browser Half (
lib/client.js): Loaded in thewindow.__ModuleLoader__format, it subscribes to events forwarded by the Host and handles status logic.
Trigger Logic:
- Green: Triggered when
api-session/status(sessionId, running=false)is fired, indicating that the workspace has completed a round of work. - Yellow: Triggered when
api-session/erroroccurs, or when an approval or answer is pending (question/plan review).- Note: For approvals and questions, the yellow flash does not depend on a specific forwarded event; instead, it polls the application’s own
uiSession.pendingInteractions.getSnapshot()status.
- Note: For approvals and questions, the yellow flash does not depend on a specific forwarded event; instead, it polls the application’s own
- Color Alternation: When both “completed only” and “pending” states exist, green and yellow flash alternately.
Favicon Logic:
The plugin captures the original whale icon when loaded. When the page is not focused and there are pending items, the original icon and the green/yellow icon alternate until the user returns to the page or the pending items reach zero.
Notes¶
- No Settings Interface: This plugin does not provide a Web settings page. To disable it, use the
dsh plugin removecommand or setdisabled: truein the configuration file. - Browser-Side Limitation: The browser side only receives events while the page is open. If the page is not open, new events are recorded as “pending” until the user returns to the page.
- Error State Frozen: If a session encounters an error, its state remains frozen in yellow. Even if the session status later changes to
running=true(restart), the error state does not automatically downgrade to green. - Version Compatibility: The current tested version is
@deepseek-ai/dsh 0.1.2-rc.1.