Introduction¶
In DSH’s Web UI, messages are sent quickly: pressing Enter, Ctrl/Cmd+Enter, or clicking the send button results in content leaving the local client. Long conversations often involve changing phrasing and resending, or accidental sends due to incomplete sentences. These are high-frequency scenarios. Since the client lacks a pre-send confirmation step, such requirements can only be met by a plugin.
Below is an introduction to a-2788553793/dsh-wait, maintained by A-2788553793. It is a client-side plugin that prompts for confirmation before sending a message in the DSH Web UI; canceling keeps the draft unchanged. It is listed in the community directory under the admin-security category.
What is this¶
dsh-wait attaches to the DSH client, inserting a confirmation window before the message is actually sent, displaying the full content to be sent. Confirmation triggers the send, while cancellation keeps the draft unchanged for further editing. It targets developers who use the DSH Web UI for daily chat and want an extra confirmation step before sending.
The plugin directory structure is small: index.js is the entry point, client.js contains the client logic, and there are cordis.patch.yml, locale/*.json, and icon.svg. package.json declares platform: web, immediately: true, and injects @deepseek-ai/dsh-client-ui-conversation.
Core Features¶
It intercepts three sending methods: Enter, Ctrl/Cmd+Enter, and clicking the send button. The confirmation window displays the full draft; the preview truncates when exceeding 4000 characters, but the full content is still sent.
Cancelling doesn’t lose the draft: Esc, clicking the overlay, or clicking the “Cancel” button can close the window, leaving the draft in the input box.
Confirmation actions inside the window: Enter / Ctrl/Cmd+Enter / clicking “Send” confirms the action. Tab switches between “Cancel” and “Send”. The window defaults to focusing “Send”, so pressing Enter twice triggers the actual send—the first is intercepted and the window appears, the second confirms.
Several edge cases are covered:
* The first message in a new session (hero input box) also prompts for confirmation.
* Messages sent during busy queues / interruptions also prompt.
* Slash commands starting with / are not intercepted and are handled by DSH’s own command menu.
* Interface text follows DSH’s language settings (Chinese / English).
Finally, there is fail-open behavior: if the plugin encounters an internal exception or the modal fails to mount, the guard allows the message through and does not block it.
Installation and Enabling¶
Execute the following in a DSH session:
plugin_manager action=install_bundle target="dsh-wait"
After installation, a hard refresh (Ctrl+Shift+R) is required to reload the client logic.
To uninstall or disable:
plugin_manager action=set_bundle target="dsh-wait" enabled=false
The package.json version is 0.1.3, and the license is MIT.
Typical Usage¶
- Enter a message normally.
- Press
Enter,Ctrl/Cmd+Enter, or click the send button—the message won’t send immediately; instead, a confirmation window appears. - Choose within the window:
- Press
Enter/Ctrl/Cmd+Enteror click “Send”: Confirm and send - Press
Esc, click the overlay, or click “Cancel”: Close the window, draft remains unchanged - Press
Tab: Switch between “Cancel” and “Send”
- Press
Note for daily use: The window defaults to focusing “Send”, so pressing Enter twice is the fixed rhythm: the first opens the window, the second sends. Pressing Enter once only opens the window.
Implementation Details¶
The DSH client does not expose a sending interception API, so the plugin installs keydown / click listeners in the document capture phase directly within apply:
- The send button is identified as the last
<button>inside[data-composer-card], and the editor is[contenteditable="true"]within the card. - After the user confirms in the window, the plugin replays the original event, preserving
Ctrl/Cmdsemantics and the click path, rather than directly callinginputActions.submit()—the latter forces the queue mode. - The modal is registered in the root-level
shell.overlayslot, so it can be displayed even for new sessions that haven’t started yet. - The guard only takes effect when the modal component is mounted; internal exceptions allow the message through without blocking it.
Applicable Scenarios and Considerations¶
It is suitable for developers who chat daily in the DSH Web UI and want to double-check content before sending, as well as for long conversations where accidental sends are costly (e.g., scripted operations). No code changes are needed; just install and refresh the page.
Several limitations should be clear:
- Sending “pure attachments with no text” in normal sessions will not prompt for confirmation, as that location might be a stop button and cannot be distinguished from a send button based solely on DOM.
- The plugin depends on the host DOM structure (
data-composer-card/data-composer-overlay/ button order). After DSH client updates, the guard might become invalid automatically, and it won’t throw an error, resulting in the modal no longer appearing. - Messages triggered through entry points other than the input box (non-composer) are not affected.
Additionally, permission boundaries need to be clear: the plugin runs with the permissions of the current DSH process and can access not just the chat interface but also local resources and credentials accessible to the process. Before installation, you should read the source code (the repository is public), verify the patch content in cordis.patch.yml, and check the license (MIT).
Conclusion¶
dsh-wait solves a very specific problem: turning the “send” action, which is instant, into a confirmable one that can be reverted. It does not change the way DSH is used, and does not lose drafts when cancelled, at the cost of an extra Enter press and a dependency on DOM structure.
Directory: https://www.skillhub.cn/plugins/A-2788553793/dsh-wait
Source: https://github.com/A-2788553793/dsh-wait