dsh-plugin-onenote:在 DSH 里只读你勾选的 OneNote 笔记本

前言

在 DeepSeek Harness(DSH)里做联网或知识型智能体时,笔记往往还在 Microsoft OneNote 里:会议记录、项目 wiki、个人日志分散在不同笔记本中。把内容整份导出再喂给模型,既难同步,也容易把不该暴露的笔记本一并送进上下文。

下面介绍社区插件 dsh-plugin-onenote(维护者 hestudio-community):通过 Microsoft Graph 以只读方式接入 OneNote,登录一次后在设置页勾选允许读取的笔记本;未勾选的笔记本在插件层就被挡在 Graph 请求之外,智能体只能调用固定的四个读工具,不能代你登录或改白名单。

这是什么

dsh-plugin-onenote 属于 DSH 社区目录中的「联网工具」类插件。一句话定位:在 Harness 内读取你选择的 OneNote 笔记本内容。

与「把整个 OneDrive/笔记目录交给模型」不同,该插件把边界写进实现:白名单保存在本地 settings.json,每次读页面前先解析页面所属笔记本并校验白名单;即使用户或页面内容试图诱导模型去读其他笔记本,也没有对应工具路径可以绕过校验。

核心功能

设置页:登录与白名单

唯一可以登录、登出或修改可读笔记本的地方是 Settings → Plugins → OneNote。界面大致包括:当前 Microsoft 账号、可读笔记本列表(勾选框)、刷新列表、保存。只有被勾选的笔记本可以被列出、搜索或读取。

智能体工具(只读)

智能体获得四个只读工具;它们不能登录、登出或修改白名单——这些只能由用户在设置卡片中操作。

工具 作用
onenote_status 报告当前账号与哪些笔记本可读
onenote_list_pages 在允许的笔记本内浏览:笔记本 → 分区 → 页面
onenote_search 先匹配页面标题,再匹配最近修改页面的开头文本
onenote_read_page 读取单页内容为 Markdown(标题、列表、表格、链接、代码等)

页面正文来自 OneNote 的 HTML 方言,插件内置解析转为 Markdown,不依赖第三方库,也不下载媒体文件。

搜索与 Graph API 说明

OneNote 不支持仅应用身份(app-only)访问,因此必须已登录用户,权限为委托型 Notes.Read。Microsoft 已在 2024 年弃用 GET /me/onenote/pages?$search=,本插件因此在各允许笔记本内列出页面元数据、本地匹配标题,再读取最近修改页面的开头片段,成本可控且始终不离开白名单集合。

安装与启用

插件随包提供公共 clientId,开箱可用。安装任选其一(与 README 一致):

# 从插件管理器安装(推荐)
dsh plugin install hestudio-community/dsh-plugin-onenote

# 或从 npm
dsh plugin install dsh-plugin-onenote

安装完成后打开 Settings → Plugins → OneNote,按提示完成 Microsoft 登录(设备码流程),勾选允许智能体读取的笔记本并保存。

运行环境要求(见 package.json):Node >=22,DSH 版本需满足 >=0.2.0-rc.1 且落在 README 声明的兼容区间内。许可证为 MIT(当前资料中版本号为 0.2.4)。

配置与状态目录

可选配置字段如下(通过 Cordis patch 覆盖整行 config 时需写全所需字段):

字段 默认值 含义
clientId 内置公共应用 Azure 应用程序(客户端)ID
tenant common 租户 ID 或域;common 支持工作与个人 Microsoft 账号
maxPagesPerList 100 onenote_list_pages 默认页面数量上限
maxPageChars 60000 onenote_read_page 默认 Markdown 字符上限

使用自有 Azure 应用注册(个人以上场景更推荐)时,在 Azure 门户注册公共客户端、开启 Allow public client flows,添加 Graph 委托权限 Notes.Read、offline_access、User.Read,无需客户端密钥;工作账号可能需要管理员一次性同意。将 clientId 写入 patch,例如:

# ~/.dsh/cordis.patch.yml(作用于所有 profile)或某 profile 的 cordis.patch.yml
- id: onenote
  name: 'dsh-plugin-onenote'
  config:
    clientId: 00000000-0000-0000-0000-000000000000
    tenant: common

本地状态位于 $DSH_HOME/onenote/(通常为 ~/.dsh/onenote/),目录权限 0600,包含 tokens.json(访问与刷新令牌)、signin.json(进行中的设备码登录)、settings.json(笔记本白名单)。删除该目录可重置插件;不会向工作区写入数据。

若登录报错 missing 'redirect_uri',README 说明常见原因是在设备登录页未先输入完整邮箱而走了 Passkey/Hello 捷径;修复方式是在浏览器中先手动输入完整 Microsoft 账号邮箱再下一步,或用 InPrivate/无痕窗口打开验证链接。

典型用法

  1. 安装插件并在 OneNote 设置页完成登录,勾选例如「Work」笔记本,保存。
  2. 在对话中让智能体先调用 onenote_status,确认可读笔记本名称与系统提示一致。
  3. 用 onenote_search 或 onenote_list_pages 定位分区与页面,再用 onenote_read_page 拉取 Markdown 内容做摘要、对照任务或引用段落。

系统提示会向模型说明当前可读笔记本名称,并明确其余笔记本故意不可读。

适用场景与注意

适合:已在 OneNote 沉淀笔记、希望 DSH 智能体在明确边界内只读引用;需要设备码登录、按笔记本粒度授权的个人或小团队场景。

注意:

  • 插件以当前 DSH 进程权限运行,令牌与白名单在 ~/.dsh/onenote/;安装前请查看 GitHub 源码与 LICENSE,确认符合你的安全与合规要求。
  • DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系,不要当作官方应用商店。
  • 仅只读;不能通过智能体工具修改 OneNote 或扩大白名单。

结尾

dsh-plugin-onenote 把 OneNote 接进 DSH 的方式收敛为:一次登录、笔记本级白名单、四个读工具。若你的知识库在 OneNote 且需要可控的 Graph 只读访问,可按上文命令安装并在设置页完成授权。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜