DWJZ/dsh-mail-reader ↗★ 0

dsh-mail-reader

DeepSeek Harness 只读邮件插件:一个 email_read 工具读取 Gmail 与 Outlook,不实现发送、回复、删除、移动、标记或归档。 / Read-only mail for DSH: one email_read tool over Gmail and Outlook, with no send, reply, delete, move, mark, or archive capability. 适合需要让 Agent 安全读取邮件但禁止发送、删除等操作的任务。

パッケージ
dsh-mail-reader
互換性
未検証
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/09/20

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:DWJZ/dsh-mail-reader

ドキュメント

README 全文を読む ↗

Configuration

FieldDefaultMeaning
accounts[]The mailboxes the model may read; none by default
accessTokenTtlSeconds3000Access-token validity used when the provider omits expires_in
authorizationTimeoutMs300000Longest a first-time browser authorization may take
requestTimeoutMs30000Deadline for one mailbox API call
readtrueRegister the email_read tool; false mounts the plugin with no tool
defaultLimit10Messages returned when a call omits limit
maxLimit50Hardest limit a call may request
maxResultChars60000Character bound on one rendered result
maxProviderResponseBytes16777216Largest provider response read; a larger one is refused before it is parsed
maxRawBodyChars100000Largest raw message body; a larger one is omitted before HTML conversion
maxNormalizedBodyChars20000Largest converted body kept for the model

An account entry accepts only provider, clientIdEnv, clientSecretEnv, and (Outlook) tenant. There is no endpoint override: a field that could redirect a request is an error at load, not a deployment option. The account id is simultaneously the model-facing account argument and the credential record id, so it must be a lowercase hyphenated identifier.

How a response is bounded

The order is the guarantee:

HTTP response read  →  refused past maxProviderResponseBytes, before parsing
JSON parse
raw body size       →  past maxRawBodyChars, omitted before conversion
HTML → text
normalized body     →  cut at maxNormalizedBodyChars, with a marker
result              →  cut at maxResultChars, keeping whole messages

A body that is omitted for size is reported as "textOmitted": true and renders as [message body omitted: too large]; a body that was cut renders with an explicit [body truncated] marker. Neither case fails the call, and neither converts the oversized document first.