灵感墙 / Inspiration Wall
English: Inspiration Wall is a paper-textured sticky-note wall for DeepSeek Harness (DSH). Boards, canvas/grid/list views, voice capture, AI tidy, curated wallpapers, bulk selection/delete, undo, backups and JSON export/import — all local. Read the English README
中文: 下面是完整中文说明。English readers can open the dedicated English README.
English · 中文
DSH(DeepSeek Harness)左侧栏里的纸感便签墙。v3–v8 支持多面墙、语音转文字、便签一键执行任务、画布跨板拖拽、精确执行状态,以及安全底座(撤销/重做、每日备份、导出/导入)、命令面板、Inbox 分诊、搜索操作符、单便签 AI、截止/提醒、Today 面板、双链/反链与新建模板。v0.5 新增 [[ 智能补全、来源回溯、原子批量分诊;v0.6 新增每面板自定义墙背景(预设 / 上传图片 / 变淡 / 柔化);v0.7 新增跨视图批量选择与两步删除。左栏图标打开整面墙;便签、位置、图片、运行状态都由 Host 持久化。
这是一个可直接通过 DeepSeek Harness(DSH)安装的本地插件;本仓库包含源码、构建产物、测试、精选背景图库与设计文档。
截图
网格视图

批量选择与两步删除

自定义墙背景图库

功能
纸感工作室
- 暖石膏墙面
#E8E0D4(深色#1B1A17):比便签纸略暗一档,顶部有很轻的暖光、四周轻微暗角,让纸像被灯照着的实体;6 种纸色、4 种纸面(素纸 / 横线 / 方格 / 牛皮纸)、3 档尺寸;折角、和纸胶带 / 图钉 / 回形针、按 id 生成轻微倾斜。 - 自由画布:滚轮平移、
Ctrl/⌘ + 滚轮缩放(0.35×–1.8×)、拖动便签松手保存、双击空白新建、一键适应内容;另有网格 / 列表视图。 - 墙背景:每面墙独立;暖石膏 / 晨曦 / 海雾 / 亚麻预设,另带 6 张精选照片(晨曦山脊、云海、静潮、亚麻褶、潮汐水彩、日光墙影),也可上传自己的图片;可调变淡/柔化,只预览,点「应用」才写 Host,可撤销、可导出导入。
- 批量删除:工具栏「选择便签」进入多选,网格/列表/画布通用;底部操作条显示已选数量,支持全选、两步确认删除、Esc 退出;一次删除一条 undo,可整批撤销。
- 网格编辑稳定:网格视图里点击便签会在居中的浮动纸片编辑器中打开,底下的网格便签保持原位(inert 占位),不会再因为编辑区变高把其他便签挤到别的列;完成后才自然回流。
- 长便签直接完整显示:不再有「展开全文 / 收起」;阅读态展示完整正文。网格浮动编辑器由外层纸片滚动,文本框不再自己长滚动条,整个编辑界面只保留一个滚动条。
- 悬停操作条浮在纸面上方:运行、置顶、外观、归档、删除等按钮作为一张小纸片浮在便签上沿,不压住标题或正文;无标题便签同样成立。
- 外壳工具栏、弹窗、搜索全部使用 DSH 主题 token,深浅色自适应;中英文案跟随 DSH 语言。搜索是内嵌柔和字段(
/聚焦、Esc/× 清空),排序使用带当前值/勾选的自定义菜单,不再打开原生 select。
多面墙(v2 / v3)
- 顶部 板切换器:新建、切换、重命名、改色、删除板;默认板
My wall与Inbox不可删除。 - 每面墙有独立的便签、布局、标签与排序;便签可通过 Appearance →「移动到…」跨板移动。
- 画布跨板拖拽:拖动便签超过阈值后,画布顶部出现「拖到某面墙」托盘(列出其它板);拖到目标板高亮,松手即移入目标板,不保存原板的新位置;松在空白处则照常保存位置。
- 删除用户板时,该板便签会移到 Inbox(不会丢);有二次确认和迁移张数提示。
- 全局速记固定落到 Inbox;toast 提供「去收集箱」入口。
- 搜索默认只搜当前板;筛选浮层有「Search all boards」开关。跨板搜索时以网格结果展示并带板徽标,点击结果自动切到对应板并定位。
- AI 整理 / 自动整理都只作用于当前板。
语音输入(v2)
- 便签编辑条与全局速记浮层各有一个麦克风按钮。
- 本地优先:使用 DSH 官方实验性 Voice Input(SenseVoice,本机离线识别,音频不出本机);本机模型已就绪。
- 本地引擎不可用时自动退回浏览器
SpeechRecognition(Chrome/Edge 在线识别);两者都不可用会给出明确提示。 - 识别文本插入当前光标位置,仍可编辑、再保存;录音中点击按钮停止并开始转写,再次点击可重试。
- 本地 provider 的语言按其声明的
languages(如zh/en)选择,不能用浏览器风格的zh-CN/en-US直接传给本地 provider。
便签执行任务(v2 / v3)
- 便签悬停操作条出现 ▶;点击弹出确认卡(标题 + 正文前 ~240 字),说明将在新会话执行。编辑中的便签会暂时隐藏操作条,先完成以当前草稿保存,避免执行/AI/归档读到旧正文。
- 确认后:使用 DSH 系统默认模型 / Agent preset、当前或最近 workspace,新建会话;RunBridge 会把便签内容自动写进新会话 composer 并提交。
- 提示词保留便签原文,只加一句引导和「完成后简要说明结果」;不擅自改写任务。
- 成功后便签保留,并通过 Host
run.attach记录会话;便签脚部显示可点击的执行状态 chip。 - 精确状态(v3):Host
run.status读取该会话日志的最后一个turn/end,区分 Done / Failed / Stopped;Failed 的 chip 红显并带 error tooltip(如DeepSeek Messages transport failed),Stopped 灰显并标出 user / parent / disposed。状态随墙面打开与 8s 轮询、focus 自动刷新。 - 重试:Failed / Stopped 的 chip 旁出现重试图标;点击会重新打开同一张确认卡(不会静默重跑),确认后在新会话重新执行。
- 如果目标空白会话里已有草稿或附件,不覆盖,保留草稿并交给用户手动发送。
安全底座(v4)
- 撤销 / 重做:内容变更(新建/编辑/移动/归档/删除/整理/板 CRUD/存回答)可
Ctrl/⌘+Z撤销、Ctrl/⌘+Shift+Z或Ctrl+Y重做;深度 40,仅内存,重启后清空;面板/菜单按钮会跟随可用状态。 - 每日自动备份:
$DSH_HOME/inspiration-wall/backups/state-YYYY-MM-DD.json,每天一份、保留 14 份;当天首次内容变更前写快照,恢复前会先把当前墙写入当天备份,恢复后清空历史。备份只含 state,不含图片字节。 - JSON 导出 / 导入:导出是自包含 JSON(boards/notes/prefs + 图片 base64),单文件上限 50MB;导出发现图片文件缺失会拒绝并提示,避免产出坏包;导入会先全量校验(便签/图片 id 唯一性、
state.version、正文引用的图片必须随包提供)、先备份当前墙、再原子替换 state/images,导入后清空历史。损坏/版本不符不会破坏现有数据。 - 损坏恢复:
state.json损坏时导入 JSON、备份恢复仍可用;Host 会先把损坏文件保留为state.json.corrupt-<timestamp>,再写入恢复数据。正常读取仍然 fail loud,不会静默清空。 - 页面菜单 ⋯:命令面板、撤销/重做、导出、导入、备份与恢复;危险 restore 需二次确认。
命令面板与分诊(v5)
Ctrl/⌘+K命令面板:新建、速记、聚焦搜索、切板、视图、排序、归档、撤销/重做、导出/导入/备份、分诊入口;支持便签搜索结果(点击切板并打开编辑)。- Inbox 分诊:多选/全选、批量归档(可撤销)、移动到任意板、两步删除、置顶、打开编辑;
J/K移动、Space选择、A归档、E打开、Esc关闭。批量移动/置顶走 Host 的原子bulk.update,一次撤销回滚整批。 - 搜索操作符:
tag:foo(可重复)、board:名称或 id、is:archived、is:image/has:image、is:pinned、run:failed|done|running|stopped、text:"短语";普通文本按全文 AND,未知 token 当普通文本;当前板/全板搜索都生效。
截止日期 / 提醒 / Today(v7)
- 便签 Appearance 新增截止日期与提醒时间(
datetime-local,本地显示、ISO 存储、可清除);meta 显示 due chip(过期 / 今天 / 未来)。 - PageMenu / 命令面板新增 Today 面板:跨板按 Overdue / Today / Upcoming 分组,可打开编辑或清除日期。
- 应用内提醒:到点的
remindAt在墙面打开时提示一次(toast + 打开便签),不做系统通知;搜索支持due:overdue|today|upcoming|none、remind:...。
双链 / 反链 / 模板(v8)
- Markdown 支持
[[便签标题]]、[[id|显示名]]、[[#id]]:点击切板并打开目标;缺失目标 toast;代码块/行内代码内不解析。编辑条新增[[]]插入按钮。 [[智能补全:输入[[弹出跨板便签标题补全,↑↓/Enter/点击插入;支持一键新建缺失标题;同名标题自动插入稳定的[[#id|标题]],不会点错。- 便签 meta 显示反链计数 chip;点击打开 BacklinksPanel 列出来源(按 notes 快照做模块级线性索引,避免 O(n²))。
- PageMenu / 命令面板 从模板新建:会议记录、周回顾、决策记录、待办清单(中英内容),在当前板创建并自动进入编辑。
- 列表视图对离屏行使用
content-visibility:auto;网格因 masonry 高度平衡风险未启用(文档说明)。
单便签 AI(v6)
- 便签悬停操作条新增 ✨;支持 总结 / 提取待办 / 改写 三种模式。
- AI 只读取当前便签正文,不写库、不改变 revision;结果先预览,用户选择「替换全文 / 追加到末尾」后才写回,写回可撤销。
- 默认模型跟随 DSH;可通过 Host Config
aiModel指定;输出语言跟随便签正文(中文便签不会因英文界面输出英文),60s 超时、取消、无模型/空输出等错误都有明确提示。
Markdown / 图片 / 组织
- Markdown:标题、列表、加粗/斜体/删除线、行内代码、代码块、待办(可点击勾选)、引用、表格、链接;不渲染原始 HTML。
- 图片:粘贴/拖入后压缩到最长边 2048px 内(WebP 优先、JPEG 回退),由 Host 存二进制,正文内用
引用。 - 标签、全文搜索、排序、置顶、归档/恢复、两步删除、归档抽屉、确定性整理、AI 按主题整理。
- AI 回答旁「Save to wall」保存成 Inbox 便签;从对话/Agent 保存的便签 meta 显示来源 chip,可一键回到原会话。
安装 / 更新
在 DSH 中安装:Plugins → Add plugin 选择本仓库目录,或:
- 克隆本仓库:
git clone https://github.com/YJX0118/dsh-inspiration-wall.git; - 在 DSH 的 Plugins → Add plugin 中选择仓库目录的绝对路径,或运行
dsh plugin --profile <profile> add <repo-path>; - 刷新页面(客户端 bundle 改动后需刷新;Host 侧由 HMR 重载)。
构建客户端需要 esbuild:
cd dsh-inspiration-wall
npm install # 首次
npm run build # 生成 lib/client.js
npm test # Host + Client 回归测试(238 项)
数据
$DSH_HOME/inspiration-wall/(默认~/.dsh/inspiration-wall/)state.json:版本 2,含 boards、notes(boardId/run,run 可带可选 error)、prefs、图片元数据;images/:图片二进制。
- v1 单墙数据会自动迁移:旧便签全部归入
b_default板;My wall与Inbox自动创建;迁移前如需要旧格式备份,请在升级前自行复制state.json。 - Host 以「串行 + 临时文件 + rename」原子写入;每次写前按 mtime 重读。
- 无 localStorage、无外部网络请求;浏览器只通过本机
/api/inspiration-wall/…与 Host 通信(DSH Connection 精确 Fetch 路由鉴权)。 - 删除便签后不再被引用的图片有 24 小时宽限期再清理;清理会同时删除磁盘字节。当前撤销/重做历史仍引用的图片不会被清理,undo 后图片可以恢复。
语音依赖
本地识别使用官方实验性 Voice Input bundle(SenseVoice)。它已启用并留下了模型缓存:
- bundle:
@deepseek-ai/dsh-experimental-voice-input-bundle@0.2.2-rc.2(npm dist-tag 是next;不要装latest的 0.1.7-alpha.1,它是给 DSH 0.1.x 的,0.2.2 启动时会禁用这些行并打印 incompatibility 警告)。 - 缓存:
$DSH_HOME/speech-to-text/sensevoice/(当前约 231 MB,0.2.2 复用同一模型)。 - 安装/更新命令:
dsh plugin --profile web add @deepseek-ai/dsh-experimental-voice-input-bundle@0.2.2-rc.2 - 如果本地语音不可用,插件自动回退浏览器识别;可在 Plugins 中查看 Voice Input 状态。
如果重启后语音或灵感墙消失
- 语音被禁用并出现
incompatible with dsh 0.2.2-rc.2:安装上面的@0.2.2-rc.2精确版本,不要用latest。 - 灵感墙入口消失:确认 profile 的
dsh.profile.bundles含有dsh-inspiration-wall(本次已修正并持久化);该包本体仍在dependencies中。
快捷键
| 动作 | Web 默认 | 说明 |
|---|---|---|
| 全局速记 | Ctrl/⌘ + Shift + . |
DSH Shortcuts 注册,可在 Settings → Shortcuts 改键 |
| 备用速记 | Ctrl/⌘ + Alt + N(macOS ⌘⌥N) |
DOM 兜底,始终可用 |
| 贴到墙上 | Ctrl/⌘ + Enter |
速记浮层内 |
| 关闭浮层 | Esc |
|
| 新建 | 工具栏 New 或双击画布空白 | 新便签自动聚焦标题 |
| 编辑 | 点击标题/正文;聚焦后按 Enter |
Esc 收起 |
架构
dsh-inspiration-wall/
package.json # dsh.bundle + dsh.client(web)
cordis.patch.yml # Host 插件行 inspiration-wall
src/shared/contract.js # 两半侧共享常量、限制、图片引用、board helpers
src/host/ # Host:文件存储、Connection exact-Fetch 路由、board/run actions、Agent 工具、AI、会话读取
src/client/ # Client:多板 UI、纸便签、Markdown、速记、语音、执行任务
voice/ # MediaRecorder → WAV、SenseVoice Remote、浏览器 SpeechRecognition 回退
boardDrag.js # 画布跨板拖拽外部 store
components/CommandPalette.jsx # ⌘K 命令入口
components/PageMenu.jsx # ⋯ 安全/数据菜单
components/BackgroundPanel.jsx # 墙背景预设/上传/调节
components/BulkActionBar.jsx # 批量选择/删除浮条
components/BackupPanel.jsx # 备份列表与恢复
components/TriagePanel.jsx # Inbox 分诊/批量
components/AiNoteAction.jsx # 单便签 AI 入口
components/AiNotePanel.jsx # AI 预览/应用
run/ # startRun/pending/bridge 自动提交状态机 / Host 状态协调
lib/client.js # esbuild 生成
test/ # 238 项 node:test(store + host + session + ai + client markdown/wiki + wall background)
assets/backgrounds/ # 6 张精选图库(1920×1080 WebP + 缩略图 + CREDITS.md)
docs/ # HOST-API.md、UI.md、FEATURE-BRIEF.md、screens/
- Client → Host:
POST /api/inspiration-wall/execute(client-request / server-response 信封);图片GET /api/inspiration-wall/image?id=…。 - Host 权威状态;Client 使用乐观更新 + 轮询校准。
- 便签执行:
ctx.uiWorkspace.startSession(undefined, {})(系统默认 preset/模型、当前/最近 workspace)→ sessionconversation.input.overlay中的RunBridge通过inputActions.setDraft/submit自动提交 → Hostrun.attach记录 session。 - 执行状态:Client 调 Host
run.status(只读 session 日志,判定最后一轮 turn)→ 终态由 Clientrun.settle写回(含可选run.error)→RunStatusChip显示 Done/Failed/Stopped 与重试;跨板拖拽由boardDrag.js+BoardDropTray完成,托盘只订阅拖拽 store,画布本身不重渲染。 - Agent 工具
inspiration_wall支持 list/create/update/archive/delete/arrange/search,并按 board 过滤/创建;与 UI 共用同一 store。
验证记录
v4–v8 新增:撤销/重做、每日备份、导出/导入、备份恢复、命令面板、页面菜单、Inbox 分诊、搜索操作符、单便签 AI、截止/提醒、Today、双链/反链、模板;真实 Chrome 验证通过。
测试:
npm test→ 238 tests / 51 suites 全过;node --check src/host/*.js全过。2026-11-12 在真实 DSH 0.2.2-rc.2 上完成浏览器回归:运行链路、AI、图片、导入/导出、备份恢复、跨板拖拽、搜索与编辑器流程(详见 docs/QA-REPORT-2026-11-12.md)。
v0.5 改进报告:docs/V0.5-IMPROVEMENTS.md。
v0.6 自定义背景说明:docs/V0.6-BACKGROUNDS.md。
v0.6 新增补测:背景 preset/builtin/图片校验、背景资源路由、背景图孤儿保护、背景 undo、导出/导入含背景、缺图导入拒绝;238 tests / 51 suites。
v0.7 批量选择/删除说明:docs/V0.7-BULK-DELETE.md。
v0.7.1 长便签与单滚动条修复:docs/V0.7.1-FIXES.md。
浏览器实机(Chrome 1440×900 / 1920×1020,2026-11 QA 全功能验收):
- 多板:UI 新建 / 切换 / 重命名 / 改色 / 删除空板 / 跨板拖拽 / 跨板搜索;
- 便签:New / 双击空白 / 编辑标题正文 / Markdown 预览 / 待办勾选 / 标签 / 置顶 / 外观五件套 / 图片上传 / 拖动 / 折叠展开 / 归档恢复 / 两步删除;
- 视图与工具栏:画布 / 网格 / 列表 / 缩放 / 适应内容 / 自定义排序 / 搜索 / 标签筛选 / 跨板搜索 / 1100px 紧凑布局 / 深色;
- 速记与语音:快捷键速记、本地 SenseVoice 转写并落 Inbox;
- 执行:真实新会话自动提交 → Done;失败 fixture → Failed + error tooltip + 重试确认;
- 整理:自动整理、AI 按主题整理;
- 回答存墙与 Agent 工具 create/search/delete。
- 本轮发现并修复:Markdown 待办在「列表前有普通项」时勾选无效(根因是 task index 只在单个 list 内计数,已改为文档级顺序计数)。
- 测试后已清理 QA 板/便签,原始 Inbox 9 张便签与偏好完整恢复。
- 跨板拖拽:拖动便签 → 顶部托盘出现 → 拖到 Inbox 高亮 → 松手 → toast「Moved to Inbox」→ Inbox 中可见、My wall 消失、刷新后仍在 Inbox;
- 便签:新建 / 点击编辑 / Markdown / 待办 / 图片粘贴 / 拖拽 / 缩放 / 网格 / 列表 / 归档 / 置顶 / 删除;
- 语音:本地 SenseVoice 通过 fake microphone 输入英文语音 → 正确转写并插入速记/便签编辑;
- 执行:▶ → 确认 → 新会话自动提交 → 模型返回 OK → 便签显示 Done + 会话链接;
- 精确状态:把便签关联到真实 completed / aborted 会话后显示 Done / Stopped(tooltip 标 user);模拟 transport error 后显示 Failed +
DeepSeek Messages transport failed,重试图标打开同一确认卡; - 无本插件控制台报错。
局限:语音的真实麦克风/权限弹窗/不同机器音频格式、以及 Safari 兼容性未做全平台实测;本地 provider 需要 Voice Input bundle 与模型缓存。
已知边界
- 跨板搜索结果是网格视图;搜索期间切换视图不会改变结果形态(清空搜索后生效)。
- 画布跨板拖拽只在 canvas 视图出现托盘;网格/列表仍用 Appearance →「移动到…」。
- 板删除会记录内容历史(Ctrl/⌘+Z 可恢复板与便签),但操作中途没有二次确认之外的单独安全网;便签会先移到 Inbox。Inbox/My wall 不可删除。
- AI 整理每板最多处理最近更新的 80 条未归档便签。
- 长便签折叠高度约 380px;展开后会随内容变高,画布上可继续拖动/缩放。
- 悬停操作条浮在便签上沿,最上方的便签可能贴近画布裁切边缘;需要时先平移画布。
- 执行状态以会话最后一轮
turn/end为准;会话被删除/日志不可读会显示 Failed(session/not-found 或 session/unavailable)。8s 轮询、focus 即时刷新;首次状态可能有最多约一个轮询周期的延迟。 - 重试会重新走确认卡,不静默执行;旧的 session 链接仍保留在历史里。
- 跨板拖拽无撤销;拖到托盘空白处按普通拖动保存位置。
- 撤销/重做是单进程内存历史(深度 40),重启后清空;长期恢复依赖每日备份或导出 JSON。undo 期间图片由历史引用保护,但历史清空/重启后,长期未引用的图片仍可能按 24h 宽限策略清理。
- 每日备份只含 state.json,不含图片字节;导入/导出 JSON 才是自包含跨机备份。导出会拒绝缺失图片文件,导入会拒绝正文引用但 images 缺失的包。
- 导入/恢复会替换整个墙(含 prefs/run 记录),未保存的编辑器草稿会丢失。
- 图片只在删除便签时触发孤儿清理;从正文中移除但不再引用图片会一直保留到未来某次删除或维护清理(为了优先保证草稿安全)。显式 cleanup 会真正删除磁盘字节。
- 单便签 AI 输出只作预览,不自动写回;模型可能截断到 20000 字符;便签正文会作为 prompt 内容交给模型。
- 提醒只在应用打开时触发,不是系统级通知;刷新后同一提醒可能再弹一次,超过 24h 不弹。
- 截止日期/提醒按浏览器本地时区展示;同名双链标题取第一个匹配,精确指向请用
[[#id]]/[[id|显示名]];[[补全遇到同名标题会自动用 id 形式。 - 来源 chip 依赖原会话仍存在;会话被删除/归档后点开会提示不可用或由 DSH 决定能否打开。
- 列表的
content-visibility只优化离屏行;网格/画布的大规模渲染(尤其 500+ 便签)仍需后续视口裁剪。 - 本地语音依赖官方实验性 Voice Input bundle;模型缓存缺失时自动回退浏览器识别。
- 面向 DSH Web
0.2.2-rc.2;桌面版未声明兼容性。
License
MIT,见 LICENSE。
No comments yet. Be the first to write one.