dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH plugin for agent email tools: send, mass send (CSV-personalised), scheduled queue, inbox read, domains. Multi-provider: Lettermint, AgentMail, Resend, OVH SMTP, manual SMTP, local self-host.
Agent email tools for the DeepSeek Harness. Send, mass-send (CSV-personalised), schedule, read inbox, list domains, and queue emails for manual review — all from the sidebar Mail tab, with 6 provider backends.
| ID | Backend | Auth | Inbox read |
|---|---|---|---|
| lettermint | Lettermint API | x-lettermint-token | no |
| agentmail | AgentMail API | Bearer | yes |
| resend | Resend API | Bearer | no |
| ovh | OVH SMTP | user/pass | via IMAP (planned) |
| smtp | Manual SMTP | user/pass | via IMAP (planned) |
| local | Self-host SMTP | user/pass | via IMAP (planned) |
The Mail tab (order 91) shows:
cd /opt/stacks/llm/plugins/dsh-mail
pnpm install # dev deps (esbuild)
pnpm build # bundle src/client.jsx → lib/client.js
Then add the plugin to the web profile:
# In ~/.dsh/profiles/web/package.json, add to dependencies:
" \"dsh-mail\": \"file:/opt/stacks/llm/plugins/dsh-mail\","
# And to the bundles array:
" \"dsh-mail\","
pnpm install --dir ~/.dsh/profiles/web
Restart dsh-web to mount the plugin (ask the user first — this session runs inside dsh-web).
Settings live in ~/.dsh/settings.yaml under the dsh-mail namespace.
Credentials are auto-populated from estate files on first use:
~/.config/lettermint/credentials (LETTERMINT_API_KEY)~/.config/agentmail/credentials (AGENTMAIL_API_KEY, AGENTMAIL_TEST_INBOX)Credentials are never hard-coded in the repo. They are read at call time and merged with settings (settings win only when non-empty).
Credential provenance on this estate (2026-09-19): the populated
LETTERMINT_API_KEYlives in~/.config/erioun-prod/credentialson Main (the Erioun prod service's key — samex-lettermint-tokenauth the plugin uses). It was filled into the emptyLETTERMINT_API_KEY=line of the local~/.config/lettermint/credentialson BlackServer so dsh-mail's estate discovery picks it up. Verified live: POST /v1/send with an empty payload returns 422 (auth accepted, validation rejects), never 401. No key value is stored in this repo, in settings.yaml, or in any artifact.
Set DSH_MAIL_DISABLE=1 in the environment or disabled: true in cordis
to disable the plugin.
lib/index.js host half — tools, settings, routes, timer
lib/providers.js multi-provider transport layer
lib/staging.js queue management, CSV parsing, template personalisation
lib/security.js 4-layer route security (loopback, trust fence, capability, cookie)
src/client.jsx browser half — sidebar tab UI
scripts/build.mjs esbuild bundler
See docs/DESIGN.md for the full architecture.