zhouwei713
dsh-daily-kit
DeepSeek Harness 日常插件集合:16 个插件 + 4 个一键组合 bundle,权限透明、读取优先、零 native 依赖
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-daily-kit
DeepSeek Harness(dsh)日常插件集合:16 个面向日常使用的小型插件 + 4 个一键组合的 bundle,以 monorepo 形式统一工程规范、统一兼容性 CI。
⚠️ 状态声明:dsh 与本集合均处于 developer preview。全部插件已通过
tsc --noEmit类型检查与 596 个单测(node:test),但尚未发布 npm、尚未在真实 dsh 运行时中端到端验证。各插件 README 均附手动验证步骤;使用中遇到任何断裂或不实描述,欢迎提 issue。
为什么选这个集合
- 权限透明:每个插件 README 都有「权限透明」章节,逐条交代读写位置、网络域名、凭证持有、确认点、日志内容——装之前就知道它会碰什么。
- 读取优先:涉及外部服务的插件(mail、calendar)默认只读,写操作(创建日程、回复草稿)要么默认关闭,要么只落本地、绝不发送。
- 零 native 依赖:全部插件纯 JS/TS 实现(pdfjs-dist 仅 lazy 加载),Node
^22.19 || >=24直接跑,不需要编译工具链。 - 596 个单测:决策逻辑全部写成不依赖 dsh 运行时的纯函数模块,
node:test全覆盖。 - 兼容性 CI 每日巡检:
.github/workflows/compat.yml每日对 dsh 最新 rc 跑类型检查与单测,上游签名断裂第一时间发现。 - bundle 一键组合:四个场景化 bundle 用
cordis.patch.yml一次插入多个插件行,带钉版的合理默认值。
快速开始
前置
- Node.js
^22.19或>= 24 - 已安装 dsh(developer preview),参考 deepseek-harness
安装
三种方式,按场景选:
# 1. 装单个插件(包名规范 dsh-daily-<短名>)
dsh plugin add dsh-daily-notify
# 2. 装 bundle(一次组合多个插件 + 默认配置)
dsh plugin add dsh-daily-bundle-dev-buddy
# 3. 开发期从本地路径安装
dsh plugin add ./packages/notify
安装后改配置
插件配置写在 dsh 的 cordis.yml(或用户配置层)。注意:dsh 的配置层叠是整行覆盖,不是深合并——在你自己的配置层写一个与已有行相同 id 的插件行,该行会整体替换原行,原来的 config 不会被保留合并。要改任何一个字段,需要把该行连同你要保留的配置一起重写;省略 config 的部分由插件自身 schema 的内置默认值兜底(本集合所有插件的每个配置叶子都有默认值)。
插件总览
| 插件 | 一句话用途 | 主要工具 | 凭证需求 |
|---|---|---|---|
approval-guard | 统一高风险操作审批门(L0–L3 风险分级)+ 脱敏 + 审计 | 无(hook 插件) | 无 |
notify | 触发×渠道分离通知:任务完成/待审批/出错 → 桌面/Webhook | notify_send、notify_channels 等 4 个 | webhook URL(可选,配置内) |
cost-meter | 按模型定价表算真实花费:会话/日/7日报告、预算告警 | cost_report、cost_budget、cost_pricing | 无 |
session-export | 会话事件流导出 Markdown/自包含 HTML(可打印 PDF) | session_export、session_export_preview | 无 |
ollama-adapter | 本地 Ollama 模型接入(原生 NDJSON 协议) | 无(注册 provider 路由 ollama) | 无(OLLAMA_HOST 可选) |
context-budget | 上下文水位监控:阈值分档告警、回落重置 | context_status、context_config | 无 |
documents | PDF/DOCX/XLSX/PPTX 解析 + 引用位置回传 + 可选 VLM OCR | document_extract、document_search 等 5 个 | VLM 端点 API Key(可选,默认关) |
local-memory | 文件夹持续索引 + 关键词检索 + 文件:行号 引用 | memory_index、memory_search 等 5 个 | 无 |
scheduler | cron 风格全局调度:跨会话任务、运行历史、latest-only 补跑 | schedule_create、schedule_history 等 7 个 | 无 |
watcher | 内容理解型监控:RSS/Atom 去重、网页正文判变、文件夹新增 | watch_add、watch_check 等 6 个 | 无 |
calendar | 日历读取(Google/CalDAV 双 Provider)、空闲查询,写默认关 | calendar_list、calendar_freebusy 等 5 个 | Google token 或 CalDAV 账号 |
mail | Gmail 搜索/阅读/线程,本地回复草稿(不发送) | mail_search、mail_read 等 4 个 | Gmail OAuth token |
tasks | 跨会话持久待办:优先级/截止/标签/四桶统计 | task_add、task_list 等 5 个 | 无 |
location | 天气/地点/营业时间/路线距离:免 key Provider 开箱即用 | weather_get、place_search 等 4 个 | 无 |
receipts | 票据识别(VLM/纯文本规则)、确认流、消费报告 | receipt_scan、receipt_report 等 4 个 | VLM 端点 API Key(可选,默认关) |
transcription | 音视频转录(云端 Whisper API / 本地 whisper.cpp)、章节与待办提取 | transcribe_file、transcript_format | 云端转录 API Key(本地引擎则免) |
插件详述
P0 · 开发者工具线
给编码 Agent 装的安全、可观测与成本底座。
approval-guard
统一的高风险操作审批门,挂在 tools/pre-execute waterfall 上:内置 L0(只读,自动放行)→ L3(删除/付款/发布,默认硬拒绝)四级风险分级表;支持路径/域名白名单降级、L3 高危命令模式升级、审批审计(会话事件 approval-guard/decision,兜底写 JSONL)与敏感信息脱敏(参数摘要 + 工具结果文本投影)。无工具、无网络、无凭证。
| 配置要点 | 说明 |
|---|---|
defaultLevel | 未知工具(如 MCP 工具)的风险级,默认 2(每次 ask) |
overrides | 覆盖/追加工具分级 |
allowedPaths / allowedDomains | 命中白名单的 L1/L2 调用降为 L0 |
l3AsAsk | true 时 L3 由 deny 降级为 ask |
redaction.redactResults | 是否脱敏进入会话的工具结果文本 |
- id: approval-guard
name: dsh-daily-approval-guard
config:
enabled: true
defaultLevel: 2
allowedPaths: [D:/code/scratch] # 命中前缀的写操作降为 L0
l3AsAsk: false
redaction: { redactResults: true }
auditLog: { enabled: true, filePath: approval-guard-audit.jsonl }
提示词:「启用审批门后,对我的工具调用按风险分级管控:删除类直接拒绝,改文件和执行命令每次问我,读操作直接放行。」
notify
触发 × 渠道分离的通知插件。触发层监听三个 dsh 事件(运行结束 agent/status → idle、等待审批 approval/asked、运行出错 agent/error),带去重窗口与最短运行时长过滤(短任务不打扰);渠道层内置 webhook(JSON POST,超时+重试)与桌面通知(Win/macOS/Linux 三平台),新渠道实现 NotificationProvider 接口即可接入。发送前与记录前默认脱敏。
| 工具 | 作用 |
|---|---|
notify_preview | 预览通知内容与去向,wouldNotify 告知是否会真正发出,不实际发送 |
notify_send | 手动发送一条通知(L1 级副作用) |
notify_history | 查询本进程内发送历史 |
notify_channels | 列出渠道状态;test: true 向每个已启用渠道发测试通知 |
- id: notify
name: dsh-daily-notify
config:
enabled: true
channels:
webhook:
enabled: false
url: '' # 例:https://open.feishu.cn/open-apis/bot/v2/hook/xxx
desktop: { enabled: true }
triggers:
runFinished: { enabled: true, minRunMs: 30000 }
dedupeWindowMs: 10000
提示词:「调 notify_channels 并 test 一下渠道,然后任务跑完或需要我审批时给我发通知。」
cost-meter
按模型定价表算真实花费。订阅会话事件 assistant/message 采集 token 用量(含缓存命中),按会话/按天/按模型聚合;费用在出报告时按当前定价表计算,只持久化 token 数,改定价追溯生效。内置定价表整理于 2026-08,务必自行核对当前价格并用 pricing 覆盖。
| 工具 | 作用 |
|---|---|
cost_report | 花费报告(scope: session / today / 7days / all),按模型分解、预算状态 |
cost_budget | 查看或设置每日/近 7 日预算(USD),超限警告 |
cost_pricing | 查看生效定价表及来源,测试某模型的定价命中 |
- id: cost-meter
name: dsh-daily-cost-meter
config:
enabled: true
persistence: { enabled: true, filePath: cost-meter-data.json }
budget: { dailyUsd: 5, weeklyUsd: 30 }
pricing: # 覆盖/追加定价,USD/百万 tokens
deepseek-chat:
inputPerMillion: 0.27
outputPerMillion: 1.10
cachedPerMillion: 0.07
提示词:「查一下今天的花费,按模型分解;把每日预算设成 5 美元,超了提醒我。」
session-export
把当前会话的结构化事件流导出为可分享/归档的文档:Markdown 完整时间线,或自包含单文件 HTML(内联 CSS,浏览器打开后可打印为 PDF)。工具结果截断长度、推理内容、时间戳均可开关,导出前默认脱敏;目标文件已存在时报错,绝不覆盖。
| 工具 | 作用 |
|---|---|
session_export | 导出当前会话为文件,返回路径 + 字节数 + 统计 |
session_export_preview | 不落盘预览前 N 行,确认格式与脱敏效果后再导出 |
- id: session-export
name: dsh-daily-session-export
config:
enabled: true
outputDir: ./exports
format: markdown # markdown / html
includeToolResults: true
includeReasoning: false
redact: true
提示词:「先 session_export_preview 看下效果,没问题就把这次会话导出成 HTML 存到 ./exports。」
ollama-adapter
把本地 Ollama 模型接入 dsh,注册 provider 路由 ollama。选原生 /api/chat(NDJSON)协议而非 OpenAI 兼容端点:thinking 用独立 message.thinking 字段流式输出并支持 think 档位,与 dsh 的 reasoning-delta / reasoningEffort 一一对应;usage 固定在终态分块返回。前提:本机已运行 Ollama 并拉取模型(如 ollama pull qwen3)。
| 配置要点 | 说明 |
|---|---|
baseURL | 省略时读 $OLLAMA_HOST,再回退 http://localhost:11434 |
reasoningEffort | off / low / medium / high / max,映射到 think 参数 |
keepAlive | 透传 keep_alive;"0" 立即卸载,-1 常驻 |
models | 模型目录(advisory),与 /api/tags 结果合并 |
- id: ollama-adapter
name: 'dsh-daily-ollama-adapter'
config:
enabled: true
reasoningEffort: high
keepAlive: 30m
models:
- id: qwen3:8b
name: Qwen3 8B
contextWindow: 32768
# agent 侧路由到本插件
- id: agent-loop
name: '@deepseek-ai/dsh-agent-loop'
config:
agents:
- id: main
provider: ollama
model: qwen3:8b
提示词:「把 main agent 切到本地 ollama 的 qwen3:8b,然后正常对话。」
context-budget
上下文水位监控。每次模型调用后根据 usage 估算水位(inputTokens + cacheReadTokens + cacheWriteTokens + outputTokens),越过阈值时写会话事件 context-budget/warning 并打警告日志;每会话每档只报一次,回落后重新武装。窗口来源三级解析:适配器上报 → 配置 contextWindows → fallbackWindow。
| 工具 | 作用 |
|---|---|
context_status | 估算占用、窗口、比例、档位、窗口来源 |
context_config | 查看或临时调整 warnAt / criticalAt(仅进程内存生效,重启丢失) |
- id: context-budget
name: dsh-daily-context-budget
config:
enabled: true
warnAt: 0.7
criticalAt: 0.85
contextWindows:
deepseek-chat: 128000
fallbackWindow: 128000
提示词:「看下当前上下文水位;到 70% 提醒我,85% 时建议我压缩或新开会话。」
P1 · 个人助手线
documents
本地办公文档解析(PDF / DOCX / XLSX / PPTX + 可选 VLM OCR),核心差异化是引用位置回传:PDF 到页码、XLSX 到 工作表!单元格、PPTX 到幻灯片号(含备注页)、DOCX 到标题路径。先搜索定位、再按需提取,避免整文档灌入上下文。只读工具,不写任何文件;VLM OCR 默认完全关闭、零网络。
| 工具 | 作用 |
|---|---|
document_inspect | 快速探测格式/页数/工作表名/文档属性,不提取正文 |
document_extract | 提取带引用的结构化内容块,按 maxChars 截断 |
document_search | 关键词搜索,返回引用位置 + 上下文片段 |
spreadsheet_read | XLSX 专用 A1 区域读取(上限 20000 单元格) |
ocr_image | VLM 桥接 OCR(OpenAI 兼容端点),默认关闭 |
- id: documents
name: dsh-daily-documents
config:
enabled: true
defaultMaxChars: 20000
searchMaxResults: 20
vlm: # 可选:默认完全关闭、零网络
enabled: true
baseURL: https://api.openai.com/v1
apiKeyEnv: OPENAI_API_KEY # Key 从该环境变量读取,不写进配置
model: gpt-4o-mini
提示词:「用 document_inspect 看下这份 PDF 的结构,搜索『违约金』命中的页码,再提取那几页的内容。」
local-memory
文件系统级本地资料检索层:持续索引磁盘上指定的真实文件夹,增量更新(mtime+size 比对),关键词检索返回 文件路径:行号 引用。自研倒排索引(拉丁词 + CJK 二元组,中文免分词器),存储只是一个 JSON 文件;.git/node_modules/.ssh/.aws 等敏感目录默认排除。全程本地、零网络、零 native。
| 工具 | 作用 |
|---|---|
memory_index | 索引指定文件夹(递归);重复调用即增量更新 |
memory_search | 关键词检索,命中带 路径:起始行-结束行 引用与上下文 |
memory_get_source | 按引用取原文片段(仅限已索引文件夹内) |
memory_remove | 删除指定文件夹的索引,绝不改动原始文件 |
memory_status | 索引状态:文件夹数、文件数、块数、占用空间 |
- id: local-memory
name: dsh-daily-local-memory
config:
enabled: true
# indexDir: D:/data/dsh-index # 默认 ~/.dsh/local-memory
# maxFileBytes: 1048576
# extraExcludes: ['family-photos']
# searchMaxResults: 20
提示词:「用 memory_index 索引我的 notes 文件夹,然后搜一下『rust 生命周期』相关的笔记,给出文件和行号。」
scheduler
cron 风格的全局定时任务调度器。与核心 dsh-schedule 分工:核心的 after_seconds/every_seconds 是会话内「提醒我一下」;本插件用标准 5 段 cron 表达「每天 9 点」「每周一」,任务持久化跨会话跨重启,到点在新建隔离会话或指定会话中执行 prompt,并记录结构化运行历史;重启后按 latest-only 补跑最近一次漏触发。
| 工具 | 作用 |
|---|---|
schedule_create | cron + prompt + 目标(isolated 默认 / session),返回未来 3 次触发预览 |
schedule_list / schedule_update / schedule_pause / schedule_delete | 任务管理面 |
schedule_history | 结构化运行历史(成功/失败/跳过、耗时、输出摘要) |
schedule_run_now | 立即手动触发一次并等待结果 |
- id: scheduler
name: dsh-daily-scheduler
config:
enabled: true
# timeZone: Asia/Shanghai # 缺省用系统时区
# dataFile: scheduler-store.json
# catchUp: true # 启动时 latest-only 补跑
提示词:「建一个任务:每个工作日早上 8:05 提醒我整理今日待办,cron 用 5 8 * * 1-5。」
watcher
内容理解型监控:RSS/Atom 条目级 GUID 去重 + etag/last-modified 条件请求、网页正文提取 + 归一化 hash 判变、文件夹新增文本文件预览注入。变化通过 followup 投递到新建隔离会话或指定会话;首次检查只建基线,连续失败指数退避,遇登录墙/抓取限制自动暂停并说明原因。与 dsh-sentinel(边沿信号型监控)互补,可共存。
| 工具 | 作用 |
|---|---|
watch_add | 新增监控:kind(rss / webpage / folder)+ target + 可选间隔与投递目标 |
watch_list / watch_pause / watch_remove | 监控管理 |
watch_check | 立即检查一次(暂停中也可手动触发) |
watch_history | 检查历史(unchanged/changed/blocked/error、是否投递) |
- id: watcher
name: dsh-daily-watcher
config:
enabled: true
dataFile: watcher-store.json
defaultIntervalSeconds: 1800
maxItemsPerDelivery: 10
summarize: false # true 时由目标会话 agent 自行总结
提示词:「用 watch_add 订阅这个 RSS 源,每 30 分钟检查一次,有新条目时投递给我并列出标题。」
calendar
读取优先的日历访问:统一 CalendarProvider 接口下接 Google Calendar(API v3)与通用 CalDAV(iCloud / Fastmail / Nextcloud)。写操作(创建/修改事件)默认关闭,writesEnabled: true 才注册。凭证务实方案:无内置 OAuth 跳转,用户自备 token 走环境变量(获取步骤见 packages/calendar/README.md);配齐 refresh 三件套后过期自动刷新。
| 工具 | 作用 | 注册条件 |
|---|---|---|
calendar_list | 按时间范围列出事件(默认今天起 7 天) | 始终 |
calendar_get | 单个事件详情 | 始终 |
calendar_freebusy | 合并忙碌块 + 足够长的空档 | 始终 |
calendar_create / calendar_update | 创建/修改事件(标注高风险 L2) | 仅 writesEnabled: true |
- id: calendar
name: dsh-daily-calendar
config:
enabled: true
provider: google # google | caldav
writesEnabled: false
timeZone: Asia/Shanghai
google:
calendarId: primary
accessTokenEnv: GOOGLE_CALENDAR_TOKEN
# caldav: { serverUrl: https://caldav.icloud.com, usernameEnv: CALDAV_USERNAME, passwordEnv: CALDAV_PASSWORD }
提示词:「列出我这一周的日程,然后找一个明天下午两小时的空档。」
邮箱读取、分类浏览、摘要与回复草稿。首版只读 + 本地草稿:不调用任何发送、删除、改标 API。Provider 首版实现 gmail(Gmail API v1,全部 GET);自研 MIME 解析(嵌套 multipart、base64/quoted-printable、RFC 2047 编码头、UTF-8/GBK)。回复草稿写本地目录(.eml 带 X-Unsent: 1 与正确的 In-Reply-To/References),由用户自查后自行发送。
| 工具 | 作用 |
|---|---|
mail_search | 按关键词/发件人/时间范围/未读/标签搜索,返回摘要列表 |
mail_read | 读取单封完整正文;附件默认只返回元数据 |
mail_thread | 展开会话线程,按时间正序 |
mail_draft_reply | 生成回复草稿写入本地草稿目录,绝不发送(L1 本地写入) |
- id: mail
name: dsh-daily-mail
config:
enabled: true
provider: gmail
draftDir: ./mail-drafts
downloadAttachments: false
gmail:
accessTokenEnv: GMAIL_ACCESS_TOKEN
# refreshTokenEnv / clientIdEnv / clientSecretEnv 三件套可选:配齐后 401 自动刷新
提示词:「搜一下过去三天的未读邮件,挑出需要回复的,各写一份简短草稿放到草稿目录,不要发送。」
tasks
跨会话的持久个人待办清单(GTD)。与内置 todo_write 分工:后者是 agent 单次任务的执行计划,会话结束即止;本插件是跨会话的长期待办。本地 JSON 存储(原子写),Provider 接口已为 v2 远程后端(Todoist / Microsoft To Do)预留。
| 工具 | 作用 |
|---|---|
task_add | 新增待办:标题、优先级、截止日期、标签、备注、来源标记 |
task_list | 过滤列表:状态/标签/优先级/截止范围/关键词 |
task_update | 改字段、迁移状态(open/done/cancelled) |
task_get | 单条详情 |
task_summary | 四桶总览:逾期 / 今日到期 / 本周 / 无日期 |
- id: tasks
name: dsh-daily-tasks
config:
enabled: true
provider: local # v1 仅 local
local:
dataFile: tasks-store.json
提示词:「把『周五前交周报』加成高优先级待办;然后给我 task_summary 的四桶总览。」
location
天气查询、地点搜索、营业时间查询、路线距离——全部只读,全部走免密钥公共服务(Open-Meteo / OSM Nominatim / Overpass / OSRM 公共实例),开箱即用,无需任何凭证。
| 工具 | 作用 | 数据源 |
|---|---|---|
weather_get | 地名 → 当前天气 + 逐小时/逐日预报(1–16 天) | Open-Meteo |
place_search | 关键词(可带城市/坐标偏置)→ 结构化地点列表 | OSM Nominatim |
place_hours | 营业时间解析 + 「是否营业中」判定 | Overpass API |
route_distance | 两点距离/时长(驾车/步行/骑行),附直线距离 | OSRM 公共实例 |
- id: location
name: dsh-daily-location
config:
enabled: true # 以下为默认值,可不写
language: zh
defaultForecastDays: 7
retry: true
提示词:「查一下上海明天的天气,再找陆家嘴附近现在还在营业的咖啡馆。」
receipts
发票/收据/支付截图识别与消费报告。两条识别路径:VLM 桥接(图片 → OpenAI 兼容端点,默认关;票据图像会发往所配端点,介意请走纯文本路径)与纯文本规则解析(完全离线)。识别结果带 uncertain 待确认标记,用户核对修正后落库本地 JSON 账本;报告按类别/商户/月份聚合,自动标记疑似重复票据与金额离群,可导出 CSV。
| 工具 | 作用 |
|---|---|
receipt_scan | 识别单张票据(不落库):text 规则解析 / path 走 VLM |
receipt_confirm | 核对/修正后写入本地账本 |
receipt_list | 账本查询(日期范围/类别/商户过滤) |
receipt_report | 消费报告 + 异常标记;传 exportDir 导出 CSV |
- id: receipts
name: dsh-daily-receipts
config:
enabled: true
dataFile: receipts-ledger.json
defaultCurrency: CNY
vlm: { enabled: false, baseURL: https://api.openai.com/v1, apiKeyEnv: OPENAI_API_KEY, model: gpt-4o-mini } # 图片识别路径,默认关
提示词:「用 receipt_scan 识别这段收据文本,不确定的字段列给我核对,确认后落库,月底给我一份分类消费报告。」
transcription
音/视频文件转录 + 章节与待办提取。双引擎:openai-compatible(默认,云端 /audio/transcriptions,Groq 等兼容端点改 baseURL 即可)与 local-whisper(本地 whisper.cpp 子进程,全离线)。章节与待办均为本地启发式(静音分章/关键词命中),不做模型调用。视频输入与时间范围裁剪依赖 ffmpeg(不内置)。无说话人分段(两引擎都不做 diarization)。
| 工具 | 作用 |
|---|---|
transcribe_file | 转录音/视频为结构化结果:transcript(带时间分段)+ chapters + actionItems |
transcript_format | 导出 plain / srt / vtt 到指定目录 |
- id: transcription
name: dsh-daily-transcription
config:
enabled: true
provider: openai-compatible # 或 local-whisper(全离线)
ffmpegPath: '' # 视频输入/云端裁剪必需
openai: { baseURL: https://api.openai.com/v1, apiKeyEnv: OPENAI_API_KEY, model: whisper-1 }
# whisper: { binaryPath: whisper-cli, modelPath: ggml-base.bin } # local-whisper 时必填 modelPath
提示词:「用 transcribe_file 转录这段会议录音,给我章节概览和待办清单,然后导出 srt 字幕。」
凭证与环境变量汇总
所有凭证一律从环境变量读取——配置文件里只写变量名,插件从不把凭证写进配置、日志或历史。不需要凭证的插件(approval-guard、cost-meter、session-export、context-budget、local-memory、scheduler、watcher、tasks、location)未列入。
| 环境变量 | 插件 | 用途 | 必需性 |
|---|---|---|---|
GOOGLE_CALENDAR_TOKEN | calendar | Google Calendar access token | provider=google 时必需 |
GOOGLE_CALENDAR_REFRESH_TOKEN + GOOGLE_CALENDAR_CLIENT_ID + GOOGLE_CALENDAR_CLIENT_SECRET | calendar | token 过期自动刷新三件套 | 可选 |
CALDAV_USERNAME / CALDAV_PASSWORD | calendar | CalDAV 账号 / App 专用密码 | provider=caldav 时必需 |
GMAIL_ACCESS_TOKEN | Gmail access token | 必需 | |
GMAIL_REFRESH_TOKEN + GMAIL_CLIENT_ID + GMAIL_CLIENT_SECRET | 401 自动刷新三件套 | 可选 | |
OPENAI_API_KEY(默认变量名,可配 apiKeyEnv) | documents / receipts / transcription | VLM OCR、票据图片识别、云端转录端点的 API Key | 对应功能开启时必需 |
GROQ_API_KEY(示例) | transcription | 换 Groq 等兼容转录端点时的 Key | 按端点而定 |
OLLAMA_HOST | ollama-adapter | Ollama 端点地址(非凭证) | 可选,回退 http://localhost:11434 |
| —(webhook URL 写在配置内) | notify | webhook URL 本身即凭证(如飞书/钉钉机器人 URL 含密钥),请按凭证标准保管配置文件 | 启用 webhook 渠道时 |
Bundle
bundle 本身不含代码,只做组合与默认值钉版:安装时应用包内 cordis.patch.yml,向 cordis.yml 插入各插件行。覆盖配置遵循整行覆盖规则(见「快速开始」)。
dev-buddy — 编码 Agent 安全与成本底座
组合 approval-guard + notify + cost-meter:风险分级审批门、运行结束/待审批/出错通知、token 花费与预算警告。
dsh plugin add dsh-daily-bundle-dev-buddy
bundle 默认要点:defaultLevel: 2、L1 会话记忆开、L3 硬拒绝、审计开;notify 只开桌面渠道;cost-meter 用内置定价表、持久化开、预算关闭(设 dailyUsd/weeklyUsd 启用)。
evidence-wall — 持续话题跟踪
组合 watcher + local-memory + documents + notify:监控信息源、建立本地资料库、解析文档、关键变化通知。
dsh plugin add dsh-daily-bundle-evidence-wall
示例提示词:
持续跟踪这个话题:[填写话题]。用 watch_add 订阅我给你的信息源,优先读取原始公告、论文和项目资料。
发现的资料用 memory_index 收入资料库,文档用 document_extract 提取。
每条证据写清来源、发布日期、能证明什么和无法证明什么。
发现关键变化时用 notify_send 通知我,证据不足时保留暂时结论。
inbox-zero — 收件箱清零
组合 mail + tasks + calendar + approval-guard:把未处理邮件分成需要回复、可以归档、应转成待办三类,所有写操作先经你确认。前置:Gmail 访问凭证(GMAIL_ACCESS_TOKEN)。
dsh plugin add dsh-daily-bundle-inbox-zero
示例提示词:
检查过去三天的未读邮件。按需要回复、可以归档和应转成待办分类。
为需要回复的邮件生成简短草稿,应转成待办的用 task_add 建任务并带上邮件来源。
任何发送、归档和创建待办操作都先让我确认。
daily-briefing — 晨间简报
组合 calendar + tasks + location + watcher + scheduler + notify:每个工作日早上自动生成一份只保留「会影响今天行动」的简报。前置:日历凭证(Google token 或 CalDAV 账号);无需天气/地图 key。最常改的是 scheduler 的 timeZone(bundle 默认 Asia/Shanghai)——改时记得整行重写。
dsh plugin add dsh-daily-bundle-daily-briefing
示例提示词:
用 watch_add 订阅这五个信息源:[填写 RSS/网页]。
用 schedule_create 建一个任务:cron `5 8 * * 1-5`,内容如下——
读取今天的日历和 task_summary 的未完成任务,查询[你的城市]天气,再检查 watch_history 里订阅源的变化。
只保留会影响今天行动的内容,把需要我确认的事项放在最前面,最后用 notify_send 通知我简报已就绪。
组合玩法
证据墙流(watcher → local-memory → documents → notify):watcher 盯住的 RSS/网页出现新条目后,投递消息驱动 agent 把资料落进 local-memory 索引;遇到 PDF/表格类附件用 documents 按引用位置提取;关键变化用 notify 推到桌面。memory_search 返回的 文件:行号 引用让每条证据都可回查原文——这正是 evidence-wall bundle 的预设流程。
收件箱流(mail → tasks,approval-guard 把关):mail_search 筛出未读,mail_draft_reply 起草回复落本地草稿目录,行动项用 task_add 带上 source: mail:<id> 溯源;approval-guard 确保每次写操作都经你确认。邮件绝不自动发送——草稿由你检查后用邮件客户端发出。
晨报流(scheduler 触发,calendar + tasks + location + watcher 供料,notify 投递):scheduler 的 cron 任务到点在隔离会话里执行简报 prompt,依次读今日日程、待办四桶、天气和订阅源变化,汇总后经 notify 通知你。各插件互不感知,靠 prompt 编排——换掉任何一个供料源(比如不要天气)只需改任务 prompt。
已知边界
- 进程存活才调度:scheduler 与 watcher 都是进程内调度——dsh 不运行时无人触发。重启后 scheduler 按 latest-only 补跑最近一次漏触发(
catchUp: false可关);watcher 的账本持久化,旧条目不重复推送。 - 未经真实运行时端到端验证:CI 只覆盖类型检查与纯函数/注入替身单测。各插件 README 的「手动验证」章节给出了接入真实 dsh 后的逐步核对清单。
- developer preview 版本锁定:全部插件
peerDependencies锁@deepseek-ai/cordis: >=4.0.1-rc.4 <4.0.2窄区间,Node engines 锁^22.19 || >=24。上游 rc 签名随时可能变化,兼容性 CI(见下)用于第一时间发现断裂。
开发指南
前置:Node.js ^22.19 或 >= 24,包管理器使用 npm(workspaces)。
npm install # 安装所有 workspace 依赖
npm run build # 构建全部插件
npm run typecheck # 全部插件 tsc --noEmit
npm test # 全部插件单测(node:test)
新建插件
node scripts/create-plugin.mjs <plugin-name>
npm install # 让根 workspace 识别新包
生成器会在 packages/<plugin-name>/ 下产出完整骨架:package.json(含 dsh.bundle.patch 声明)、tsconfig.json、cordis.patch.yml、src/index.ts(name/Config/apply 模板)、src/config.ts、占位单测、README(含权限透明章节模板)、SECURITY.md、CHANGELOG.md。
插件工程约定
- 对齐 dsh 官方插件风格:函数插件导出
name/inject/apply(ctx, config);Config 用@deepseek-ai/schemastery,schema 与接口同名导出,叶子字段带.default()。 peerDependencies锁窄区间(如@deepseek-ai/cordis: >=4.0.1-rc.4 <4.0.2),dsh 类型包放devDependencies用于编译期核对。- 决策逻辑写成不依赖 dsh 运行时的纯函数模块,
index.ts只做接线,保证node:test可全覆盖。 - 代码注释用英文(对齐 dsh 源码风格),README/SECURITY 用中文。
仓库结构
dsh-daily-kit/
├── packages/ # 16 个独立的 dsh 插件
│ ├── approval-guard/ notify/ cost-meter/ session-export/ ollama-adapter/ context-budget/ # P0 开发者工具线
│ ├── documents/ local-memory/ scheduler/ watcher/ calendar/ mail/ tasks/ location/ receipts/ transcription/ # P1 个人助手线
├── bundles/ # 4 个组合 bundle(无代码,cordis.patch.yml 钉版)
│ ├── dev-buddy/ evidence-wall/ inbox-zero/ daily-briefing/
├── scripts/
│ └── create-plugin.mjs # 插件模板生成器
├── .github/workflows/
│ └── compat.yml # 生命线 CI:每日对 dsh 最新 rc 做类型与单测验证
└── tsconfig.base.json # 所有插件共享的 TS 基线(NodeNext ESM strict)
兼容性 CI
.github/workflows/compat.yml 是本集合的生命线:每日定时 + push 触发,安装 npm 上 dsh 主线最新 rc 的类型依赖后,对全部插件跑 tsc --noEmit 和单测。dsh 处于 developer preview,上游签名随时可能变化,此 CI 用于第一时间发现断裂。