在会话界面随手记下问题与待办,一键插入对话框
30/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add RestRegular/dsh-notepad该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-notepad
在 DeepSeek Harness 的会话界面里放一张属于当前工作区的分段便签浮窗:一行一个问题、一段一个卡片,回车就能拆出下一段;需要时把某一段、或选中后的多段一起插入 / 替换 / 发送到对话框。除了文字,也可以直接粘贴或选择图片,输入框里会用缩略芯片显示并可点击预览。0.4 起支持选中、拖拽排序、合并多段;0.5 起空标题只在点击后显示输入框,方向键可切换分段,AI 优化只处理选中的分段并支持撤销 / 缓存;0.6 起插入 / 发送按钮 hover 时展开成「当前会话 / 新会话」按钮组,图片可在浮窗内预览,底部快捷键提示点击轮换,复制全部排除归档,发送行为跟随「设置 > 通用设置」的繁忙发送策略;0.7 起分段改为从上到下、旧→新排列,回车拆分的新卡片紧跟原卡片,段首 Backspace 与上一段合并,空分段按 Backspace 或点删除会直接移除,插入 / 发送 / 归档+删除按钮组会稍候再展开以避免快速划过闪烁,文本达到最大高度才出现滚动条,复位快捷键改为 Ctrl/Cmd + Shift + R。
展开完整文档(README 剩余 1 节)
dsh-notepad
在 DeepSeek Harness 的会话界面里放一张属于当前工作区的分段便签浮窗:一行一个问题、一段一个卡片,回车就能拆出下一段;需要时把某一段、或选中后的多段一起插入 / 替换 / 发送到对话框。除了文字,也可以直接粘贴或选择图片,输入框里会用缩略芯片显示并可点击预览。0.4 起支持选中、拖拽排序、合并多段;0.5 起空标题只在点击后显示输入框,方向键可切换分段,AI 优化只处理选中的分段并支持撤销 / 缓存;0.6 起插入 / 发送按钮 hover 时展开成「当前会话 / 新会话」按钮组,图片可在浮窗内预览,底部快捷键提示点击轮换,复制全部排除归档,发送行为跟随「设置 > 通用设置」的繁忙发送策略;0.7 起分段改为从上到下、旧→新排列,回车拆分的新卡片紧跟原卡片,段首 Backspace 与上一段合并,空分段按 Backspace 或点删除会直接移除,插入 / 发送 / 归档+删除按钮组会稍候再展开以避免快速划过闪烁,文本达到最大高度才出现滚动条,复位快捷键改为 Ctrl/Cmd + Shift + R。0.8 起设置面板新增「记事本」标签页(主题、毛玻璃、字体字号、自动 / 手动保存、撤销步数、提示词预设、按钮组与 hover 阈值、卡片最大高度、默认尺寸);插件提供撤销 / 重做(输入框内仍是浏览器原生撤销);分段可折叠、可批量归档 / 删除 / 复制;AI 在分段内有选中文字时只优化选中部分并在完成后重新选中;归档按最新在上并自动滚动;顶部工作区改为只列出有内容工作区的下拉列表;图片不显示名称,删除按钮移到缩略图右上角。0.9 起撤销 / 重做把输入文字也算进历史,不再吞掉文本;批量删除的按钮悬停变红;移除标题栏复位按钮;工作区下拉只保留存在未归档且非空分段的工作区;AI 预设提示词在只读文本框中展示;设置侧栏换成插件线条图标;主题配色同步作用于设置页;窗口设置可把当前面板位置和尺寸存为默认;AI 优化提高短内容输出预算并在空正文时自动用内置提示词重试一次;工具栏改回单行不换行布局,按钮居右并压在左侧文本之下,溢出时被左侧元素遮盖而不是滚动;Backspace 删除空分段也会播放退出动画;按钮组在鼠标点击后移出会恢复折叠;批量操作时「取消选择」放在按钮栏最左侧;撤销 / 重做按钮移到标题栏「复制全部」左侧,工具栏高度随内容收紧、不再保留滚动条空隙;新会话发送会先打开并通过 live binding 等待可发送状态;AI 优化、撤销 / 重做等程序化改写后会重新测量文本区高度,行数变多也能自动撑开;Backspace 删除最后一条活动分段时保留全部归档。0.10 起在对话框成功发送一条消息时,会把该消息作为一个归档分段自动保存到当前工作区的笔记里,并按内容去重;归档区每条分段都可以折叠 / 展开,自动保存的对话消息默认折叠,手动归档和通过记事本发送按钮归档的分段默认展开。0.11 起撤销 / 重做也记录插入 / 替换输入框(撤销恢复对话框内容、重做再放回,过期的那一步自动作废),发送操作不进入撤销 / 重做,已发送归档的分段不会被历史撤回或重发。0.11.2 起「在新会话中发送」按 workspaceId 建会话,新会话直接归属当前工作区而不是落到侧边栏「未分组」。0.12 起方向键只在分段文本的最开头(↑)/ 最末尾(↓)切换相邻分段,首行 / 末行中间列和长文本软换行都不再误跳;侧边栏工作区角标立即跟随当前笔记的未发送数,保存成功后还会主动唤醒其它会话的角标刷新,15 秒轮询只作为外部改动的兜底。0.13 起可以把记事本脱离 DSH 界面,在独立窗口里继续记录:DSH 最小化或关闭页面时窗口仍在,独立窗口自己最小化 / 还原也不影响 DSH;浮窗在脱离期间收起为右下角的小圆钮,独立窗口关闭或点「收回面板」后浮窗自动回来,设置页也能打开 / 收回。0.14 起独立窗口默认用本机 Edge / Chrome 的 app 模式打开,无地址栏和标签页;设置页可在「独立应用窗口」与「系统浏览器窗口」之间切换,找不到浏览器时自动回退。
每个工作区一个浮动分段记事本,供 DeepSeek Harness 会话使用。卡片按从旧到新排列;按 Enter 在来源卡片之后拆分,在文本开头按 Backspace 则合并到上一张卡片,空卡片由 Backspace 或删除操作移除,不弹提示。空标题是空白点击区域,方向键只在文本最开头 / 最末尾时才会在卡片之间切换,AI 改进只作用于选中的卡片——按钮会切换成撤销,内容没变时复用缓存结果。悬停分组会稍等片刻再展开:插入/发送包含当前会话和新会话操作,归档+删除共用一个分组,替换保持单独一组。0.8 新增独立设置标签页(主题、毛玻璃、字体、保存模式、AI 提示词预设、按钮分组、卡片高度、几何默认值),插件级撤销/重做绝不覆盖 textarea 的历史,卡片可折叠并支持批量归档 / 删除 / 复制,AI 改写会感知选区并重新选中其输出,归档按最新在前排列并自动滚动,工作区下拉框只列出存在未归档非空分段的工作区,图片 chip 的移除按钮位于缩略图角落。操作栏是单行不换行:左侧的选区标签位于右对齐按钮上方,溢出内容滑到下方而不是滚动;鼠标点击分组会释放焦点,指针离开时分组即收起。Backspace 删除空卡片使用与删除按钮相同的退出动画,批量选择时「取消选择」放在最左侧。图片 chip 打开面板内预览,页脚轮换显示快捷键提示,全部复制跳过归档内容,发送遵循 General Settings 的忙碌发送策略,textarea 只在达到高度上限时滚动。自动刷新保留列表滚动位置,Ctrl/Cmd + Shift + R 重置几何,面板绝不遮挡宿主标题栏,笔记存放在 <workspace>/.dsh/notepad.json,由该工作区的每个会话共享。0.10 把每次成功的聊天输入框发送镜像到工作区归档(按内容去重),并让归档卡片可折叠:捕获的聊天消息默认折叠,手动归档和记事本发送默认展开。0.12 让方向键留在卡片内,除非光标位于其文本的最开头 / 最末尾,并立即刷新侧边栏工作区徽标——保存完成后会唤醒其他会话的徽标,而不是等待 15 s 轮询。0.13 可以把记事本移到独立窗口:浮动面板收起为恢复胶囊,DSH 最小化或其界面关闭时独立窗口继续工作,该窗口关闭或从其标题栏、恢复胶囊、设置标签页中退役时,面板自动回归。0.14 默认以 Edge/Chrome 应用模式窗口打开,没有标签页和地址栏,设置中可切回普通浏览器窗口,没有可用 Chromium 浏览器时自动回退。
安装
dsh plugin --profile web add @restregular/dsh-notepad
安装后重启 / 重新打开 DSH(或刷新页面),打开任意一个会话即可看到右下角的「记事本」浮窗。
界面
┌────────────────────────────────────────────┐
│ ● 记事本 [workspace ▾] 保存 复位 复制 归档+ 折叠 最小化 │ │ ☐ 全选 已选 2 段 展开/折叠 ↺ ↻ 复制 ↙ ⇄ ➤ ⊕ 合并 ✦ 归档 │ │ ┌────────────────────────────────────────┐ │ │ │ ▾ 01 [标题] 🖼 ⧉ ↙ ⇄ ➤ ✦ 归档 │ │ │ 记录较早的一段…… │ │ │ └────────────────────────────────────────┘ │ │ ┌────────────────────────────────────────┐ │ │ │ ▸ 02 [标题] 🖼 ⧉ ↙ ⇄ ➤ ✦ 归档 │ │ │ 记录最新的一段……(折叠后只显示预览) │ │ │ └────────────────────────────────────────┘ │ │ 已保存 · 42 字符 · 2 段 Enter 新建分段… │ └────────────────────────────────────────────┘
- 顶部工作区:工作区名是一个自定义下拉列表,只列出存在未归档且非空分段的工作区;点选后会切到该工作区的新会话,浮窗随即加载对应工作区的笔记。
- 排列方向:卡片从上到下按旧分段到新分段排列;+ 新建的分段追加在列表底部,拖拽后按你的顺序保存。
- 折叠分段:序号左边的 ▾ / ▸ 是折叠按钮,折叠后只保留卡片头和一行预览;工具栏的「全部展开 / 全部折叠」也是按钮组。归档中的分段同样可以折叠 / 展开:自动保存的对话消息默认折叠,手动归档和通过发送按钮自动归档的分段默认展开。
- 对话框发送自动归档:在会话输入框里成功发送一条消息后,插件会把这条消息作为一个已归档分段写进当前工作区的 .dsh/notepad.json,并按内容去重(活动分段和归档分段都会参与比较)。插入 / 替换输入框不算发送;记事本自己的发送按钮仍按原逻辑把分段移入归档。
- 选择分段:点击序号选中 / 取消,选中卡片用强调色边框和浅底色区分;顶部「全选」一次选中所有活动分段。不再使用勾选框。
- 标题:空标题不显示任何占位文字,只保留一块可点击的空白;点击后才出现输入框。已有标题的卡片直接显示输入框,边输入边自动保存;在输入框里清空后不会立刻消失,失焦才回到空白状态。
- AI 优化:选中分段后,顶部工具栏的 ✦ 只优化选中的分段;卡片工具栏的 ✦ 优化此段。当分段内有文字被选中时,按钮变为「AI 优化选中内容」,只把选中的片段发给模型,优化后替换回原位置并重新选中被优化的部分。优化成功后按钮变成「撤销优化」;相同且未改动的内容复用缓存。
- 方向键:光标在分段文本最开头时按 ↑ 跳到上一张卡片末尾;在文本最末尾时按 ↓ 跳到下一张卡片开头。分段内(包括首行 / 末行的中间列、以及长文本软换行出来的行)始终是正常光标移动,不会误跳。
- 按钮组:插入、发送、归档+删除、全部展开/折叠按钮在鼠标 hover 到阈值(默认约 0.18 秒,可在设置里调整)后才横向展开,并用细圆角边框框起;设置里关闭「按钮组模式」后所有次级按钮直接平铺显示:
- 插入 / 发送组:当前会话 + 在同一工作区新会话中执行,两种新会话图标不同;
- 归档+删除组:归档(主按钮)+ 删除(悬停后出现的危险按钮,活动分段批量选择时即批量删除);
- 替换按钮保持单键。
- 按钮栏:工具栏是一行不换行、高度随内容收紧的布局(不再为滚动条留空)。左侧「全选 / 已选 N 段」文本在上层,底色为半透明毛玻璃(跟随面板表面色与模糊度 --np-blur,右缘 12px 渐隐过渡),右侧操作按钮整体右对齐、层级更低;按钮宽度超出时从左侧滑到文本下方并被毛玻璃遮住,不滚动、不换行。按钮组被鼠标点击后释放焦点,鼠标移出即恢复折叠。
- 回车拆分:在分段中按回车会从光标处拆开,新卡片紧跟原卡片下方;在末尾回车就是在该段后面新建一个空分段。
- Backspace 合并 / 删除:光标在段首按 Backspace 会与上一段合并;如果当前段完全为空(无标题、无文字、无图片),则播放与删除按钮相同的退出动画后再删除,不弹确认框。删除按钮对空分段同样跳过确认。
- 撤销 / 重做:Ctrl/Cmd + Z 与 Ctrl/Cmd + Shift + Z。输入框内的撤销仍由浏览器原生处理,插件绝不再拦一次;拆分、合并、归档、恢复、排序、批量操作、AI 优化,以及「插入到输入框 / 替换输入框内容」都由插件记录,最多 50 步(可调),切换工作区或外部内容刷新时丢弃历史。插入 / 替换记录的是对话框内容的「操作前 / 操作后」文本:撤销会把对话框恢复成操作前的内容,重做再放回;如果之后又改过对话框或发送过消息,这一步会自动作废,不会吞掉新输入。发送不进入历史:记事本发送、发送到新会话、对话框发送后的自动归档都不记录,撤销 / 重做既不会撤回已发送的分段,也不会重新发送;被发送归档的分段固定在归档里,不会被历史快照恢复成未发送状态。「在新会话中插入」作用于另一个会话的输入框,也不进入当前会话的撤销历史。标题栏的 ↺ / ↻ 按钮位于「复制全部」左侧,AI 优化按钮自己的「撤销优化」继续保留。
- 图片预览:点击任意图片缩略图会在浮窗内打开预览(带「打开原图」和关闭按钮),点击遮罩或按 Esc 关闭。图片芯片不再显示文件名,右上角的 × 用于移除引用。
- 删除分段:非空分段的删除按钮位于归档+删除按钮组的展开项中,点击后弹窗二次确认,并明确提示删除后无法恢复;确认后播放消失动画再移除,不进入归档。
- 复制:卡片头部的复制按钮复制这一段;选中若干段后工具栏出现「复制选中的 N 段」。标题栏的复制按钮仍然只复制全部未归档内容。
- 快捷键提示:底部一次只显示一条快捷键提示,点击它会轮换显示下一条。
- 发送行为:发送按钮在智能体繁忙时使用「设置 > 通用设置 > 繁忙时的发送行为」中选择的排队 / 插话策略;空闲时按普通发送处理。
- 复位浮窗:Ctrl/Cmd + Shift + R 把位置和尺寸恢复为设置里的默认值(初始 420 × 460,右下角),最小化 / 归档展开等状态不变;标题栏不再放复位按钮。
- 高度上限:分段文本区默认最大 240px,可在设置里调整;只有内容确实超过该高度时才出现纵向滚动条。
- 合并:选中 2 段以上后点顶部工具栏的合并按钮,合并结果留在最靠上的选中位置。
- Enter:拆分当前分段(见上);Shift + Enter 是分段内换行;Ctrl / Cmd + Enter 把当前分段(有选中时改为选中的多段)插入对话框。
- 卡片上的 ↙ 插入此段;⇄ 用此段替换整个对话框内容;➤ 直接发送此段。
独立窗口
标题栏新增一个「↗」按钮,设置页「窗口」下方也新增「独立窗口」卡片。点击后:
- 默认用本机 Edge / Chrome 的 app 模式(--app=URL)打开独立应用窗口:没有标签页、没有地址栏,有自己的任务栏窗口和最小化 / 还原。设置页可切回「系统浏览器窗口」;找不到可用浏览器时自动回退。
- 插件在回环地址上按需启动一个只属于自己的小 HTTP 服务(随机端口 + 随机 token),把同一份 <工作区>/.dsh/notepad.json 渲染成记事本页面;它不再经过 DSH 的登录 Cookie,所以能在独立的 Chromium 窗口里读写。
- DSH 浮窗立即收起,只保留右下角的小圆钮(圆钮变成独立窗口图标)。独立窗口有自己的最小化 / 还原 / 关闭,不受 DSH 窗口影响;DSH 最小化或关闭页面时,已经打开的独立窗口继续显示并可继续编辑。
- 独立窗口的「收回面板」会关闭自己并通知 DSH;如果浏览器不允许脚本关闭窗口,页面会显示「已收回面板,可以关闭此窗口」,DSH 浮窗同时恢复。直接关掉独立窗口时,DSH 也会通过心跳检测到并自动收回。
- 浮窗的 ↗、右下角小圆钮、设置页的「收回独立窗口」都可以收回;设置页会显示当前是否有独立窗口连接。
- 独立窗口支持分段标题、编辑、Enter 拆分、段首 Backspace 删除空段、归档 / 恢复 / 删除、复制、AI 优化、图片预览、自动 / 手动保存、深色模式和主题字号;数据实时写回同一份工作区笔记。它专注记录,不提供插入 / 发送到对话框、工作区切换、批量选择、拖拽排序和撤销 / 重做;这些仍在 DSH 浮窗里使用。独立窗口只读取工作区 .dsh/notepad/images/ 下的图片,通过桌面桥直接引用工作区外原路径的图片会显示空白(浮窗里仍可预览)。
- 独立窗口页面由 lib/detached.html、lib/detached.css、lib/detached.js 提供,宿主端在 lib/detached-server.js,应用窗口启动器在 lib/app-window.js。token 只对当前插件进程有效,服务只监听 127.0.0.1,所有 API 都要求 token + 同源,图片只能读取该工作区 .dsh/notepad/images/ 下的文件。
为什么不是 DSH 自己的 BrowserWindow? DSH 桌面端的主进程 setWindowOpenHandler 会把所有 http(s) 交给系统浏览器,preload 只暴露 browser lease / deviceInfo / keyboard / shortcuts / updates,没有创建 BrowserWindow 的 IPC;profile 里的插件也拿不到 Electron 主进程代码。因此纯插件能做到的“新窗口”就是本机 Chromium 的 app 模式窗口;真正的 Electron BrowserWindow 需要 DSH 桌面端新增一个窗口 IPC(上游改动或本地补丁),不属于 npm 插件能独立完成的范围。
如果整个 DSH 桌面进程退出,宿主进程连同这个回环服务一起结束;独立窗口会保留最后的页面和本地缓存,但无法再写盘,重新打开 DSH 后需要从 DSH 再打开一次独立窗口。浏览器 / 系统窗口是否能在 DSH 退出后继续存在,由浏览器和操作系统决定;插件不依赖 Electron 的私有窗口 API。
设置(「设置 > 记事本」)
设置面板新增独立的「记事本」标签页,全部改动即时生效(保存在本机浏览器 localStorage)。启用 / 禁用项使用 toggle,选项使用与其它插件一致的自定义下拉列表;配色主题同时作用于浮窗和设置页,并沿用宿主 --dsw-alias- token,深色模式自动适配。设置侧栏中的「记事本」使用插件自己的 16px 单色线条图标,而不是宿主默认齿轮。
| 设置 | 说明 |
| 配色主题 | 跟随宿主 / 海蓝 / 紫罗兰 / 翠绿 / 琥珀 / 玫瑰;只改强调色和一层很淡的底色,不破坏宿主主题 |
| UI 风格 | 纯色扁平 / 毛玻璃模糊;毛玻璃的模糊程度 0–40px 可调 |
| 字体与字号 | 跟随宿主 / 无衬线 / 衬线 / 等宽;字号 11–20px |
| 保存方式 | 自动保存(约 0.5 秒防抖)/ 手动保存;手动模式下标题栏出现保存按钮,Ctrl/Cmd + S 也可保存 |
| 撤销步数 | 5–200,默认 50;只影响插件记录的操作,不影响输入框原生撤销 |
| 按钮组模式 | 开启时次级按钮 hover 展开;关闭时全部按钮平铺 |
| 展开 hover 时间阈值 | 0–1000ms,只在按钮组模式开启时显示 |
| AI 提示词 | 通用润色 / 精简压缩 / 专业文档 / 分点大纲 / 自定义;下方文本框展示当前预设的完整提示词(只读),选择「自定义」后同一位置切换为可编辑输入框 |
| 分段卡片最大高度 | 80–800px,决定文本区何时出现滚动条 |
| 默认位置和尺寸 | 宽高可调;「将当前位置和尺寸设为默认」把浮窗此刻的位置与尺寸写成默认,复位快捷键随后回到这里;也可以立即恢复浮窗,或恢复出厂数值 |
| 独立窗口 | 显示当前独立窗口状态;「窗口形式」可选「独立应用窗口(无地址栏)」或「系统浏览器窗口」;「在独立窗口打开」把笔记本移到一个不受 DSH 最小化 / 关闭影响的窗口,「收回独立窗口」让浮窗回来 |
| 快捷键绑定 | 显示 / 隐藏、复位、撤销、重做、保存五项,点击输入框后直接按新组合键即可;可一键恢复默认 |
功能
| 操作 | 入口 | 说明 |
| 新建分段 | 标题栏 +,或分段末尾按回车 | 新卡片追加在列表底部(旧→新),并自动获得焦点 |
| 回车拆分 | 分段文本内按 Enter | 从光标处拆开,新卡片紧跟当前卡片下方 |
| Backspace 合并 | 光标在分段最前面按 Backspace | 与上一张卡片合并,光标停在新旧文字交界处 |
| 空分段删除 | 空分段内按 Backspace,或空分段的删除按钮 | 无标题、无文字、无图片时跳过确认,并播放退出动画后删除 |
| 编辑分段 | 点击卡片文本区 | 自动模式下停止输入约 0.5 秒后保存;手动模式下等保存按钮 / Ctrl+S |
| 分段标题 | 空标题的空白点击区 / 已有标题的输入框 | 空标题不显示文字和 hover 效果,点击后才出现输入框;保存方式同上 |
| 选中分段 | 点击左上角序号 | 卡片的强调色边框表示已选;再点一次取消,选中的段参与批量操作 |
| 折叠 / 展开分段 | 序号左边的 ▾ / ▸ | 折叠后隐藏编辑器,只保留标题和一行预览;工具栏可全部展开 / 折叠 |
| 拖拽排序 | 按住左上角序号拖动到另一张卡片的上 / 下半区 | 松开后按新顺序保存,序号自动重排;可撤销 |
| 合并分段 | 选中 2 段以上 → 顶部工具栏合并按钮 | 按当前显示顺序合并文字、标题和图片,可撤销 |
| AI 优化此段 | 卡片工具栏的 ✦ 按钮 | 用当前默认模型润色这一段,保留图片;成功后按钮变为「撤销优化」 |
| AI 优化选中内容 | 在分段里选中文字后点卡片 ✦ | 只把选中的片段发给模型,结果替换回原位置并重新选中该段结果 |
| AI 优化选中分段 | 选中分段 → 顶部工具栏的 ✦ 按钮 | 只优化选中的非空未归档分段(段内选中文字时只优化该片段),显示进度;可整体撤销 |
| 撤销优化 | 优化后的 ✦ 按钮(或顶部工具栏) | 恢复优化前的文字;再次优化相同内容时直接复用上次结果 |
| 撤销 / 重做 | Ctrl/Cmd+Z / Ctrl/Cmd+Shift+Z,或标题栏 ↺ / ↻(复制全部左侧) | 插件记录结构操作(拆分、合并、归档、排序、AI、批量等)与插入 / 替换输入框(恢复对话框的操作前 / 操作后文本),最多 50 步可调;发送不入历史;输入框内仍用浏览器原生撤销,切换工作区后历史清空 |
| 方向键切换 | 分段文本内按 ↑ / ↓ | 文本最开头 ↑ 到上一段末尾,文本最末尾 ↓ 到下一段开头;首行 / 末行中间列不跳 |
| 未发送角标 | 最小化后的右下角图标;左侧边栏工作区行左上角 | 有未发送内容时显示数量,超过 99 显示 99+ |
| 添加图片(选择) | 卡片头部的图片按钮 | 桌面端直接用所选文件的宿主路径引入,不复制文件 |
| 添加图片(粘贴) | 在分段文本区粘贴截图 / 图片 | 写入 .dsh/notepad/images/,再以该路径引入 |
| 添加图片(拖入) | 把图片拖到分段文本区 | 优先使用宿主路径,浏览器拿不到路径时按粘贴方式保存 |
| 图片芯片 | 分段输入框内 | 只显示缩略图;右上角 × 移除引用,点击缩略图在浮窗内预览并可打开原图 |
| 带图插入 / 发送 | 与文字相同入口 | 图片以 名称 追加在分段文字之后 |
| 单段插入 | 卡片上的左下箭头 | 插入到当前会话输入框光标处,不发送;进入撤销 / 重做历史 |
| 多段插入 | 选中分段 → 工具栏左下箭头,或全选后操作 | 按卡片顺序用空行合并后一次插入;进入撤销 / 重做历史 |
| 在新会话中插入 | hover 插入按钮片刻后出现的第二个按钮 | 在同一工作区新建会话并打开,内容填进它的输入框;图标与新会话发送区分;作用于另一个会话,不进入当前撤销历史 |
| 替换对话框 | 卡片上的 ⇄,或选中后工具栏 ⇄ | 用该段 / 多段合并内容替换整个输入框(没有按钮组);进入撤销 / 重做历史 |
| 单段发送 | 卡片上的纸飞机 | 直接发进当前会话;发送成功后自动归档该段;发送不可撤销 / 重做 |
| 多段发送 | 选中分段 → 工具栏纸飞机 | 合并成一条消息发送;发送成功后自动归档这些段;发送不可撤销 / 重做 |
| 在新会话中发送 | hover 发送按钮片刻后出现的第二个按钮 | 在同一工作区新建会话并发送,随后切换到该会话;新会话按 workspaceId 归属到当前工作区(不会落到「未分组」);纸飞机叠加图标与插入区分;发送不可撤销 / 重做 |
| 全选 | 列表上方「全选」复选框 | 一键选中所有未归档分段,再点一次取消 |
| 归档 | 卡片上归档+删除按钮组的主按钮,或工具栏归档图标 | 把分段移入归档区(不发送);可批量归档选中分段 |
| 对话框发送自动归档 | 在会话输入框发送消息 | 成功发送后自动把消息存成归档分段;按内容去重,活动 / 归档分段都参与比较;写入失败或发送失败不会留下归档 |
| 折叠归档分段 | 归档卡片左边的 ▾ / ▸ | 折叠后只显示一行预览;自动保存的对话消息默认折叠,手动归档 / 发送归档默认展开 |
| 显示 / 隐藏归档 | 标题栏归档图标 | 展开 / 收起归档区,状态按浏览器记忆;最新归档排在最上面,展开时自动滚到第一条 |
| 恢复 | 归档卡片上的恢复图标 | 把归档分段放回未归档列表 |
| 删除(未归档) | 归档+删除按钮组中 hover 出现的垃圾桶 | 空分段跳过确认;非空分段弹窗二次确认并提示 删除后无法恢复;播放消失动画后移除 |
| 批量删除 | 选中分段 → 工具栏归档组里 hover 出现的垃圾桶 | 二次确认后删除选中的活动分段,不可撤销 |
| 删除(已归档) | 归档卡片上的垃圾桶 | 删除归档分段,可撤销 |
| 清空归档 | 归档区标题「清空归档」 | 批量删除归档,可撤销 |
| 复制此段 | 卡片头部的复制按钮 | 把这一段文字与图片引用合并后写入剪贴板 |
| 复制选中的 N 段 | 选中分段 → 工具栏复制按钮 | 按卡片顺序用空行合并后复制;复制全部仍只包含未归档分段 |
| 切换工作区 | 标题栏工作区下拉列表 | 只列出存在未归档且非空分段的工作区;点选后打开该工作区的新会话并加载对应笔记 |
| 快捷键提示 | 底部的一条提示文字 | 点击轮换显示下一条快捷键说明 |
| 发送策略 | 卡片 / 工具栏发送按钮 | 繁忙时按「设置 > 通用设置 > 繁忙时的发送行为」选择排队或插话 |
| 滚动条 | 分段文本达到设置里的最大高度后 | 未到上限不显示纵向滚动条,超过后才出现;默认 240px |
| 调整尺寸 | 拖动右下角斜纹手柄 | 宽高按浏览器记忆,最小 320 × 240 |
| 复位位置和尺寸 | Ctrl/Cmd + Shift + R | 恢复设置里的默认位置和尺寸(初始 420 × 460,右下角),其它状态不变 |
| 手动保存 | 手动模式下的标题栏保存按钮,或 Ctrl/Cmd + S | 立即写入当前内容;自动模式下按钮不显示 |
| 窗口折叠 / 展开 | 标题栏上下折叠箭头 | 只保留标题栏,内容继续按保存策略保存 |
| 最小化 / 恢复 | 标题栏最小化图标,或 Ctrl/Cmd + Shift + N | 收成右下角小图标,带平滑过渡 |
| 拖动位置 | 按住标题栏拖动 | 位置按浏览器记忆;不会越过 DSH 窗口最顶部的标题栏(最大化 / 最小化 / 关闭那一栏) |
同一个工作区里的不同会话共用同一份笔记:在 A 会话写的内容,切到同工作区的 B 会话仍然在。切换工作区时浮窗自动加载对应工作区的文件。
深色模式与字体
- 浮窗使用 DSH 主题变量(--dsw-alias-)和 DSH 的正文字体变量 --dsw-font-family;默认「跟随宿主」,也可以在「设置 > 记事本」里换成无衬线 / 衬线 / 等宽和 11–20px 字号。
- 配色主题只覆盖强调色和很淡的底色层;「纯色扁平」关闭毛玻璃与半透明背景,「毛玻璃模糊」用 0–40px 的 backdrop-filter,两者都沿用宿主 token。
- 深色模式跟随宿主 body[data-ds-dark-theme],对卡片阴影、选中底色、归档弱化、下拉列表和设置卡片做了单独适配。
- 新增卡片、归档 / 删除都有进入 / 退出过渡;按钮组可调整 hover 阈值,并尊重 prefers-reduced-motion。
数据与边界
- 笔记保存在 <工作区>/.dsh/notepad.json,是普通 UTF-8 JSON:
{
"version": 5,
"segments": [
{
"id": "seg-1",
"text": "遇到的问题\n下一步:补测试", "title": "待办", "createdAt": "2026-10-23T03:19:57.000Z" }, { "id": "seg-2", "text": "看这张报错截图", "title": "报错", "createdAt": "2026-10-23T03:19:58.000Z",
"images": [{ "path": ".dsh/notepad/images/m1x2-image.png", "name": "image.png" }]
},
{ "id": "seg-3", "text": "已发送的分段", "archived": true, "archivedAt": "2026-10-23T03:20:00.000Z", "origin": "send" } ], "text": "遇到的问题\n下一步:补测试\n\n看这张报错截图\nimage.png\n\n已发送的分段", "updatedAt": "2026-10-23T03:20:01.000Z" }
text 是 segments(含图片引用)用空行合并后的副本,方便人工查看,也兼容旧版本。v5 起卡片按从旧到新、从上到下的顺序保存;读取到 v4(0.4–0.6)文件时,客户端会反转一次以迁移顺序,之后按卡片数组顺序保存(拖拽后的顺序不会被自动重排)。旧版单段文件(只有 text)、v2/v3 分段文件和手动改成纯文本的文件会在读取时迁移为分段;images[].path 工作区内用相对路径,工作区外保留绝对路径;name 仅用于显示和 Markdown 替代文本。title 最长 200 字符。归档分段可以带一个可选的 origin:manual(手动归档)、send(记事本发送按钮自动归档)或 compose(对话输入框发送后自动保存)。缺省 / 未知的 origin 按旧版手动归档处理,即默认展开;compose 默认折叠。origin 只写在已归档分段上,恢复后清空。
- 对话发送自动归档:客户端在 conversation.sendSession 返回成功后,把发送的文本作为一段 archived: true、origin: "compose" 的分段写入当前工作区;写入前用 text.trim()(并统一 \r\n)与现有活动 / 归档分段逐条比较,内容相同就跳过,所以重复发送不会产生重复卡片。只保存文字;纯附件消息、发送失败和记事本内部的“插入 / 替换”不会触发。自动保存无视“手动保存”模式立即落盘,避免消息已发出去而归档还停留在内存里。分段数达到 200 段上限时会跳过并输出一条控制台警告。
- 粘贴的图片保存在 <工作区>/.dsh/notepad/images/,由宿主接口原子写入,只接受 PNG / JPEG / WebP / GIF,单张最大 20 MB;笔记只保存路径,不内嵌 base64。选择的图片直接引用原路径,不复制。每段最多 20 张。
- 删除图片芯片会同时删除插件自己保存在 .dsh/notepad/images/ 下的对应文件;引用工作区外原路径的图片只删引用,不碰原文件。删除已归档分段 / 清空归档 / 直接删除未归档分段时,未被其它分段引用的插件图片会在撤销窗口(未归档删除没有撤销窗口,按同样延迟)结束后自动清理。
- 浮窗位置、尺寸、窗口折叠 / 最小化 / 隐藏状态、归档区是否展开保存在浏览器 localStorage 的 dsh-notepad.ui.v1 中;设置页的全部选项保存在 dsh-notepad.settings.v1 中(同一浏览器 / 设备生效),都不写入工作区。位置会被限制在宿主标题栏下方(读取 DSH 的 --dsh-frame-chrome-top / --dsh-frame-top-clearance),复位会使用设置里的默认宽高并停到右下角。独立窗口的「当前工作区 / 已脱离」记录在 dsh-notepad.detached.v1,最后打开的工作区记录在 dsh-notepad.binding.v1,独立窗口自己的未保存草稿会按工作区缓存在它自己的源下。
- 归档区按 archivedAt 最新在上显示(不改变 .dsh/notepad.json 里的分段顺序);展开归档或新增归档时自动滚动到第一条。新分段、归档和删除都有过渡动画。
- 每个工作区一份笔记,最多 200 段 / 512 KB(单段输入框限制 16 万字符,每段最多 20 张图片)。浮窗内是纯文本编辑,不做 Markdown 渲染;图片以缩略图芯片展示(不显示文件名)。
- 浮窗只在会话视图出现:打开设置等非会话页面时自动隐藏,回到会话后恢复。
- 写入走宿主同源回环路由 /dsh-notepad/api/note,粘贴图片走 /dsh-notepad/api/image,AI 优化走 /dsh-notepad/api/optimize,侧边栏角标计数与顶部工作区下拉走 /dsh-notepad/api/unsent;这些路由只接受 127.0.0.1 的同源请求,并且只允许当前会话的 cwd 或已注册工作区。图片接口只会在固定的 .dsh/notepad/images/ 下写入 / 删除合法的图片文件,不能用来读写或删除工作区里的其它文件。AI 优化使用当前默认模型,未配置模型时返回 unavailable,不会影响记事本的其它功能。/unsent 只返回工作区 id、路径、标题、未发送数和 hasContent 布尔值,不暴露任何笔记正文。独立窗口走另一条路由:POST /dsh-notepad/api/detach-url 校验工作区后按需启动插件自己的回环服务并返回带 token 的窗口地址,GET /dsh-notepad/api/detached 查询连接状态,POST /dsh-notepad/api/detached/retire 收回;独立服务本身只监听 127.0.0.1,所有请求都要求随机 token + 同源,图片只能读取 .dsh/notepad/images/ 下的合法图片。
- AI 优化缓存:客户端按「工作区 + 标题 + 提示词 + 正文」缓存本页内的优化结果;宿主进程内也保留一份同样键的缓存(最多 64 条 / 约 200 万字符)。相同且未改动的内容再次优化时直接复用上次结果,不再调用大模型;标题、正文或提示词变化后会重新请求。自定义提示词最长 4000 字符,宿主会在末尾强制追加「只返回正文」的约束。单次优化至少预留 4096 输出 token,避免推理模型把短内容的预算耗尽在思考阶段;如果自定义提示词得到空正文,宿主会用内置提示词再试一次。
- 窗口重新获得焦点(或页面重新可见)时,如果本地没有未保存的修改,会自动读取磁盘上的最新内容;刷新前会立即记录列表的 scrollTop,写入新内容后恢复,读取时也保留当前卡片顺序,不会让正在看的卡片或列表位置跳动。
实现
- Host(index.js + lib/note-store.js + lib/image-store.js + lib/detached-server.js + lib/app-window.js):ctx.inject(['webServer']) 注册 /dsh-notepad/api 下的 GET/PUT /note、POST/DELETE /image、GET /unsent、POST /optimize 以及独立窗口的 POST /detach-url / POST /detach-open / GET /detached / POST /detached/retire,用临时文件 + rename 原子写入 .dsh/notepad.json;GET 返回 segments(含 title / createdAt / images)与合并后的 text,PUT 接受 { segments: [...] },也兼容旧的 { text }。POST /image 校验 base64、MIME 与文件签名后写入 .dsh/notepad/images/;DELETE /image 只允许删除该目录下的普通文件。/unsent 为已注册工作区统计未发送段数并返回 hasContent;/optimize 先用 workspace + title + prompt + text 查进程内缓存,命中时返回 { cached: true },否则把可选的 system 提示词(附加输出约束)交给 agentDefaultModel.currentSelection() + llm.prepareCall(),流式拼接文本后写入缓存并返回。lib/detached-server.js 在首次请求时用 node:http 监听随机回环端口,token 用 crypto.randomBytes 生成,页面 / note / image / optimize / heartbeat / retire 全部由它自己的 handle() 校验后再复用 note-store;插件卸载时关闭服务。lib/app-window.js 用 node:child_process 启动本机 Edge / Chrome 的 --app=URL(专用 --user-data-dir、--window-size、--no-first-run),找不到浏览器时返回 no-browser,客户端再回退到 window.open。
- Client(client.js):整个 bundle 包在 IIFE 里,通过 shell.overlay 注册浮窗,通过 settings.section 注册「记事本」设置页,读取 uiSession.adapter.current 得到当前会话与工作区。设置存于模块级小仓库 readSettings()/writeSettings()/subscribeSettings()(localStorage),设置页和浮窗即时同步。分段历史用统一的快照栈记录结构操作与插入 / 替换输入框,最多 undoLimit 步:结构步骤存整份分段快照;插入 / 替换步骤存 { sessionId, before, after } 三个字段的对话框文本,撤销 / 重做时通过 inputActions.setDraft() 写回,且只在对话框仍等于该步骤留下的内容时才生效(否则丢弃该步,绝不吞掉之后的手动输入);读取当前对话框文本走标准 props 的 hooks.input(即 DSH 的 InputState store),拿不到时插入 / 替换只生效、不记历史。发送相关提交(记事本发送归档、新会话发送预归档、对话框发送自动归档)都用 record: false 提交,不产生历史步骤;恢复历史快照时 keepSentCards() 会把当前所有 origin 为 send / compose 的归档分段按现内容、现归档状态固定回快照(快照里没有就补回),所以撤销 / 重做既不会把已发送分段恢复成未发送,也不会改写或删除它们。输入框或标题输入框内的 Ctrl+Z 直接交给浏览器原生处理,插件只在焦点不在可编辑元素时接管。折叠是纯 UI 状态;归档展示顺序按 archivedAt 倒序,写入文件的分段顺序不变。工具栏的按钮组统一走 actionGroup(),展开延迟用 --np-group-delay 变量,关闭按钮组模式时给组加 data-expanded=true 直接平铺;插入 / 发送的新会话按钮使用不同图标。卡片进入 / 退出分别用 dsh-np-item-in / dsh-np-item-out,归档或删除先标记 data-leaving,约 160ms 后再提交结构变化。文本区的 ref 回调按分段缓存,growTextarea() 在重测高度前后保存 / 恢复列表 scrollTop,避免自动保存触发列表跳回顶部。顶部工作区下拉使用 /unsent 的 hasContent 过滤,选择后调用 uiWorkspace.startSession(workspaceId, { clearPreviousDraft: true }) 打开该工作区的新会话。侧边栏角标用 MutationObserver 监听 [data-row-key^="workspace:"] 并写 data-np-unsent:当前工作区那一行始终用笔记里的实时未发送数覆盖轮询值(笔记已加载、状态非 loading / error 时),其它行用 /unsent 的计数;任一会话保存成功后调用 requestBadgeRefresh() 唤醒所有已挂载浮窗重新取数,切会话、窗口重新聚焦、页面重新可见时也会立即取一次,15 秒轮询只用于外部改动兜底。当前工作区 id 由 resolveWorkspaceId() 解析:优先按会话的 Workspace 成员关系,其次按工作区投影 / 注册表路径(Windows 盘符与 UNC 大小写不敏感),避免路径写法不同导致角标只剩慢轮询可用。粘贴图片用 FileReader 读成 base64 交给宿主保存;选择 / 拖入图片优先通过桌面桥 __DSH_HOST_PATHS__.pathFor(file) 拿宿主路径。插入 / 替换通过 inputActions.captureInsertion()/insertText() 与 setDraft();发送按繁忙策略选择 sessions.scope(id).conversation.send()(排队)或 sessions.binding(id).session.prompt(..., 'steer')(插话),steer 不可用时回退到排队。新会话发送先解析当前工作区并 sessions.create({ workspaceId }):先按当前会话的 Workspace 成员关系匹配,匹配不到再按规范化后的 cwd 路径匹配(Windows 盘符 / UNC 大小写不敏感),都没有命中才退回 sessions.create({ cwd });只传 cwd 时 Host 不会把新会话挂进任何工作区,会落到侧边栏「未分组」。workspaceId 附件失败时 Host 仍会发布真实会话,此时直接用它继续发送,而不是再建一个未分组会话。因为 create 只写入 placeholder、不会立刻产生 live binding,还必须先 uiWorkspace.openSession(id) 激活,再轮询 sessions.binding(id)?.session.prompt 后发送;发送失败会把预先归档的分段恢复。图片在插入 / 发送时以 Markdown 图片语法追加。对话发送归档在根上下文里给 conversation.sendSession 包一层 after-hook(状态挂在服务自己身上,插件热重载复用同一个 hook);只有 sendSession 成功且文本非空时才回调浮窗。浮窗监听当前会话 id,等待笔记首次加载完成,去重后追加 origin: "compose" 的归档分段并立即保存。归档折叠状态仍是浏览器内的 UI 状态:加载 / 外部刷新时只对没见过的归档 id 应用一次默认值(compose 折叠,其余展开),用户手动切换后不会被刷新重置。
- AI 优化只改分段文字,不动标题和图片;分段内有文字选中时只发送该片段,完成后把结果替换回原位置并重新选中;单段优化后该卡片按钮变为「撤销优化」,批量优化后工具栏按钮变为「撤销优化」,撤销会恢复优化前的文字。优化结果按内容 + 提示词缓存在客户端与宿主两侧;短内容至少 4096 输出 token,空正文会用内置提示词重试一次,仍为空才提示错误,不影响笔记读写。
- 浮窗坐标同时受视口和宿主标题栏约束:拖动、调整尺寸、窗口缩放和快捷键复位都走同一个 clampUi(),最小 top 取 --dsh-frame-chrome-top(全屏时为 0)/ --dsh-frame-top-clearance 再加 8px。显示 / 隐藏、复位、撤销 / 重做、保存五个快捷键优先注册到 DSH 的 shortcuts 服务(默认 Ctrl/Cmd+Shift+N / Ctrl/Cmd+Shift+R / Ctrl/Cmd+Z / Ctrl/Cmd+Shift+Z / Ctrl/Cmd+S),设置改变后会重新注册;注册失败时保留原始 keydown 监听。标题栏不再放复位按钮。
- 发送模式与 DSH 输入框一致:读取 sessions.list 的 running,繁忙时读取 configForms.get('ui-conversation') 快照里的 busyEnter(queue / steer);空闲时始终排队。
- 文案通过宿主 locale 服务注册中英文;找不到 locale 时按浏览器语言回退。
开发
语法
node --check index.js
node --check client.js
宿主存储与路由
node test/note-store.test.mjs
node test/route.test.mjs
node test/detached-server.test.mjs
node test/app-window.test.mjs
客户端离线冒烟(迷你 React + 浏览器垫片)
node test/client-smoke.mjs
包清单、导出、locale 元数据与图标
node test/package.test.mjs
或一次跑完
npm test
test/client-smoke.mjs 会真正执行 apply(ctx) 并渲染浮窗与设置页,覆盖:分段加载、编辑自动保存、手动保存模式与保存按钮、自动刷新保持列表滚动位置、设置 toggle / 自定义下拉 / 快捷键录制与恢复默认 / 主题(同时作用于浮窗和设置页)/ 字号 / 按钮组模式 / hover 阈值显隐 / 预设提示词只读展示与自定义切换 / 将当前几何设为默认、独立窗口的预取 / 应用窗口与浏览器窗口两种形式 / 浮窗收起 / 小圆钮收回 / 设置页打开、插件撤销 / 重做与输入框原生撤销的边界(含输入文字不被撤销吞掉)、分段折叠与全部展开 / 折叠、归档卡片折叠 / 展开与默认状态、对话发送自动归档 / 内容去重 / origin 落盘、单段 / 选中复制、工作区下拉(只列存在未归档且非空分段的工作区)与切换新会话、归档最新在上 / 自动滚动 / 退出动画(含 Backspace 删除空分段,且删除最后一条活动分段不会清空归档)、右对齐且不换行的按钮栏(「全选 / 已选 N 段」为毛玻璃底色而不是不透明色块)、标题栏「复制全部」左侧的撤销 / 重做、按钮组点击后失焦折叠、批量选择时最左侧的「取消选择」与危险按钮 hover 配色、设置侧栏线条图标、新分段追加到底部、空标题空白点击区与点击后出现输入框、标题自动保存、序号选中、方向键跨分段切换光标、段首 Backspace 合并上一段、空分段 Backspace / 删除按钮无确认删除、回车拆分后新卡片紧跟原卡片、文本区未到高度上限不显示滚动条、合并、单段 / 选中分段 AI 优化与段内选中文字优化、优化后按钮切换为撤销、AI 改写后文本区高度自动重测、相同内容命中缓存、插入 / 发送 / 归档+删除 hover 按钮组(含延迟 CSS 与新会话图标区分)与在新会话中插入 / 发送(新会话需先 open 再等待 live binding,且必须按 workspaceId 建会话而不是只传 cwd)、插入 / 替换进入插件撤销 / 重做(撤销恢复对话框内容、重做再放回,过期的那一步不吞新输入)、发送不进入历史(连续撤销 / 重做不会撤回或重发已发送分段)、图片面板内预览、非空删除的二次确认与不可撤销、底部快捷键轮换、复制全部排除归档、繁忙发送策略、拖拽排序、未发送角标、侧边栏工作区角标、单段/多段插入与替换、单段/多段发送与自动归档、归档显示隐藏、归档恢复与删除(含撤销)、全选、窗口折叠、最小化 / 恢复、拖动调整尺寸、标题栏下方位置限制、全局快捷键与 Ctrl+Shift+R 复位(标题栏不再有复位按钮)、DSH shortcuts 五个命令注册、深色模式与设置 CSS、重复执行 bundle 的兼容性,以及粘贴 / 选择图片、图片芯片、删除芯片时清理磁盘文件与带图插入发送。test/detached-server.test.mjs 另外直接启动真实回环服务,覆盖 token / 同源校验、页面与 note API、独立窗口图片目录限制、AI 代理、心跳与收回状态;test/app-window.test.mjs 覆盖 Edge / Chrome 路径发现、--app 参数、重复打开和无浏览器回退。
已知限制
- 浮窗不会自动把内容推给 Agent;发送使用当前会话的发送接口,繁忙时按「设置 > 通用设置」的繁忙发送策略排队或插话。
- 对话发送自动归档依赖会话服务暴露的 conversation.sendSession;服务不可用或被其它插件替换掉该方法时,记事本本身不受影响,只是不会自动归档。它只捕获当前会话在浮窗挂载后成功发送的文字消息:纯附件消息、发送失败、在别的窗口 / 会话里发送的消息都不会写入当前工作区。
- 自动归档按内容去重,内容相同就跳过;如果希望同一条消息在归档里有第二份,需要先修改或删除已有分段。分段数到达 200 段上限后自动归档会跳过,并在浏览器控制台留下一条警告。
- 发送按钮依赖 DSH 的会话接口;接口不可用时降级为插入输入框并提示。
- 「在新会话中插入 / 发送」依赖 DSH 的 uiWorkspace / sessions 服务;不可用时插入会降级为复制,发送会提示失败。
- Ctrl/Cmd + Shift + R 在部分浏览器里是硬刷新快捷键;DSH 桌面端通过 shortcuts 先消费该组合,网页端如果仍被浏览器占用,可在「设置 > 记事本」里点「立即恢复浮窗位置和尺寸」。
- 图片只支持 PNG / JPEG / WebP / GIF,单张最大 20 MB、每段最多 20 张;其它附件类型暂不支持。
- AI 优化需要 DSH 里已配置默认模型;未配置时按钮会提示不可用,记笔记本身不受影响。优化缓存保存在宿主进程内,重启 DSH 或切换默认模型后,相同内容会再请求一次。
- 删除非空未归档分段不可撤销;确认后不会进入归档,只会在延迟窗口后清理未被其它分段引用的插件图片。空分段直接删除。批量删除同样不可撤销。
- 插件会记录结构操作和「插入 / 替换输入框」(各记一步,存对话框的操作前 / 操作后文本),普通打字不逐字记录;输入框内的撤销 / 重做始终交给浏览器原生实现。插入 / 替换的那一步只在对话框仍是它留下的内容时生效,之后改过或发送过就自动作废。发送(记事本发送、发送到新会话、对话框发送自动归档)不进入撤销 / 重做历史,被发送归档的分段固定在归档里,撤销 / 重做不会撤回或重发。切换工作区、外部刷新或重建笔记时会清空插件历史。
- 「在新会话中插入 / 发送」操作的是另一个会话,不进入当前会话的撤销历史;需要修改时请到那个会话里处理。
- 设置保存在浏览器 localStorage,换浏览器 / 设备不会同步;删除站点数据或更换配置档会恢复默认设置。
- 顶部工作区下拉依赖 /unsent 返回的 hasContent;宿主未提供 workspaceRegistry 或只有当前会话 cwd 时,下拉仍会显示当前工作区,但无法列出其它工作区。
- 「在新会话中发送」依赖 DSH 的 sessions.create + workspaces(工作区归属)+ uiWorkspace.openSession;workspaces 服务不可用时仍能创建并发送,但新会话只能按 cwd 落盘、可能显示在「未分组」;sessions.create 不可用时降级为插入 / 复制。
- 从 v4 笔记迁移到 v5 时会整体反转一次卡片顺序;如果你之前在 v4 里手动拖过顺序,这次反转会把它倒过来,之后按新顺序保存。
- 删除图片芯片会删除插件目录里的文件;如果同一路径仍被其它分段引用,则保留文件。选择的原路径图片只删引用,不删除原图。
- 网页版没有 __DSH_HOST_PATHS__ 桥,选择 / 拖入的图片会像粘贴一样先复制到 .dsh/notepad/images/。
- 图片在浮窗里用缩略芯片表示,不提供富文本行内图文混排;插入 / 发送后由聊天记录按 Markdown 渲染。
- 位置和尺寸是全局的(不按工作区分别记忆);如果同时打开多个 DSH 窗口,它们在同一个浏览器里共享这份设置。
- 独立窗口依赖 DSH 宿主进程里的回环服务。DSH 最小化 / 关闭界面时它继续工作;整个 DSH 进程退出后服务随之停止,已经打开的窗口会进入离线状态并保留本地草稿,重新打开 DSH 后需要从浮窗或设置页再打开一次。独立窗口能否在 DSH 退出后继续存在,取决于浏览器 / 操作系统对窗口的生命周期管理,插件不调用 Electron 私有窗口 API。
- 浏览器可能拦截 window.open:如果点击「在独立窗口打开」没有反应,请允许该站点的弹窗后重试。Electron 桌面端由宿主把 http 地址交给系统默认浏览器打开;此时窗口是浏览器标签页,浏览器不允许网页脚本关闭它时,会显示「已收回面板」提示,手动关闭即可。
- 「独立应用窗口」的窗口是 Chromium app 模式,不是 DSH 自己的 Electron BrowserWindow:它没有地址栏和标签页,但 DSH 无法从插件侧创建主进程窗口。需要真正的 BrowserWindow 时,必须给 DSH 桌面端增加窗口 IPC(上游改动或本地补丁)。
- 「独立应用窗口」需要本机安装 Edge / Chrome;两者都没有时会自动回退到系统浏览器窗口。app 模式使用独立的临时 Chromium 配置档,不继承浏览器扩展和登录状态。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
RestRegular/dsh-notepad
在会话界面随手记下问题与待办,一键插入对话框
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,270已汉化DSH
70.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。