Holo-dataanalyst/dsh-thought-capsule ↗★ 0
dsh-thought-capsule
思维胶囊:干活时想到的点子 / 待试插件,一句话记下来,自动分类进待办。带侧边栏面板、Agent 工具与命令行。 适合工作时灵感多、需要快速记录并将其转化为AI待办任务的用户。
インストール
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Holo-dataanalyst/dsh-thought-capsuleドキュメント
README 全文を読む ↗思维胶囊(dsh-thought-capsule)
干活时脑子里冒出来的点子、待试的插件、要回头查的东西,一句话丢进去;左侧栏胶囊图标里整理成未整理 → 待办 → 已完成 → 归档,六种固定分类自动归类,也能建自己的分组。
面板里有搜索、本周回看(这周新增/完成/停了 7 天没动的待办)、导出 JSON;读长文时划一段话会在选区旁边浮出「记下来」,一键存成「阅读」胶囊。
Agent 也有 capsule_add / capsule_list / capsule_update 三个工具(没有删除工具,删条目只能由用户自己在面板确认)。
第一次用:直接看 docs/tutorial.md(五分钟上手 + 五个场景 + 常见问题)。
现在装在哪(重要)
| 项 | 路径 |
|---|---|
| 源码(改这里) | C:\Users\kaisa\.dsh\thought-capsule |
| 安装副本(宿主读这里) | E:\AI\DSHTauri\thought-capsule |
| 接线 profile(真正在跑的) | E:\AI\DSHTauri\.dsh\profiles\core-021-4(会随桌面端切换而变;以 GET /api/health 的 dir 为准,scripts\install.mjs 自动挑 .harness.pid 最新的那份,可用 --profile 指定) |
| junction | ` |
| \node_modules\dsh-thought-capsule` → 安装副本 | |
| 数据 | ` |
.dsh-thought-capsule\capsules.json(配置 dataDir` 可覆盖) | |
| 备份(改 profile 前自动留) | ` |
| \package.json.bak-thought-capsule` |
只改源码不够:宿主读的是安装副本。改完跑一次
node scripts\install.mjs,再重启 DSH 桌面端。
装给别人(GitHub Release)
公开仓库:,发版走 tag + Release(不是只推代码)。最新版见 Releases。
# 跟随 main
dsh plugin --profile add github:Holo-dataanalyst/dsh-thought-capsule
# 钉死某个 Release 的 tag(推荐给别人用)
dsh plugin --profile add github:Holo-dataanalyst/dsh-thought-capsule#v0.2.0
# 不装 git 也行:直接装 Release 附件
dsh plugin --profile add https://github.com/Holo-dataanalyst/dsh-thought-capsule/releases/download/v0.2.0/dsh-thought-capsule-0.2.0.tgz
装完重启 DSH。要求 DSH >= 0.1.7-rc.2(dsh.engines 会挡旧版本)、Node >= 22。
命令行
装好后就有 dsh-thought-capsule 命令(bin → lib/cli.js),跟面板、Agent 工具读写同一份 capsules.json:
dsh-thought-capsule add "试试 better-sidebar 插件" # 记一条,自动分类
dsh-thought-capsule add "周五交汇报" -c work --due 2026-10-23 --tag 汇报
dsh-thought-capsule list # 全部(默认 20 条)
dsh-thought-capsule list -s todo -n 5 # 待办 5 条
dsh-thought-capsule update -s done # 挪到已完成
dsh-thought-capsule categories # 分类表
dsh-thought-capsule path # 打印数据目录
dsh-thought-capsule export > capsules.json # 导出整份
- 数据目录:
--data>--profile($DSH_HOME/profiles/)>$DSH_HOME>~/.dsh。 - 桌面端档案常在别的根下(如
E:\AI\DSHTauri\.dsh),$DSH_HOME不在环境里时用--data直接指到目录;找错目录时命令会把「我找的是哪个文件」打到 stderr,不会静默给空列表。 - 读命令都支持
--json。
快速开始
- 接线(只需一次):
node scripts\install.mjs→ 重启 DSH 桌面端。 - 入口:左侧栏的胶囊图标打开面板;或在面板 ⚙ 里打开悬浮球,点它弹便签。
- 记一条:面板上方输入框写完按
Enter(Shift+Enter换行),进「未整理」。
典型用法:
- 随手记:对话里说「记一下:试试 better-sidebar 插件」,Agent 会调
capsule_add;也可以直接写进面板输入框。 - 整理:卡片底部的四段状态点一下就挪(未整理 / 待办 / 完成 / 归档);✎ 就地改文字与分类。
- 交给 AI:单条点「转给 AI」,或勾多条点「批量转给 AI」→ 选工作区与会话 → 「准备提交」只把内容放进那条会话的输入框、不自动发送;转出去之后这条自动变「已完成」并记下转给了谁。
- 找回漏掉的:面板右上「找漏掉的待办」,读最近会话列出可能忘掉的事,逐行「存胶囊」或「忽视」。
- 回看:页签右边「本周回看」,看这周新增/完成和停了 N 天的待办。
常见问题
- 刷新后没看到新功能:客户端 bundle 在页面加载时取,
Ctrl+R刷一次;还不对就看GET /thought-capsule/api/client-report的build与failures。 - 左侧栏没有胶囊图标:
client-report404 → 宿主半边没加载(查 profile 接线与 junction);slotsResolved:false→ 席位名不对。 - 数据到底写在哪:
GET /api/health里的dir就是真实目录;想换地方,在插件 config 里设dataDir。 - 悬浮球挡事:拖动它,或在 ⚙ / 设置卡里调大小与不透明度;
Alt+C快速隐藏(焦点在输入框时不抢键)。 - 划词没反应:划词捕获默认关,在 ⚙ 或设置卡里打开;选区至少 2 个字。
- 为什么 Agent 不能删胶囊:故意不提供删除工具,删除只能在面板里二次确认。
- 改完代码不生效:先
node scripts\install.mjs同步安装副本(宿主读的是E:\AI\DSHTauri\thought-capsule),再重启桌面端。
为什么上一次「重启后没出现胶囊」
两个坑叠在一起,都已修:
- 接错了 profile。插件被接进了
profiles\core-021,而本机真正在跑的是profiles\tauri(它的node_modules\plugin-reviewer指向E:\AI\DSHTauri\plugin-manager)。那个 profile 永远不启动,插件自然从不加载。scripts\install.mjs的默认--profile已改成 tauri。 - 宿主包 import 在本机解析不到。DSH 用普通 Node ESM 求值插件,没有为插件装 resolve hook;
E:盘上的安装目录不在宿主安装目录的解析家族里,从profiles\tauri\package.json解析@deepseek-ai/dsh-tools直接MODULE_NOT_FOUND。原lib/tools.js第一行就 import 了它 → 整个宿主半边起不来,连 HTTP 路由都没有。- 已改成:工具描述就是普通数据对象,直接交给
ctx.tools.register,不 import 任何@deepseek-ai包。 lib/index.js里工具注册整段包了 try/catch:工具面挂了只 warn,面板与路由不受影响。- 本机铁律:这样挂在 profile 上的插件,node 半边不要
import '@deepseek-ai/...'(plugin-manager能跑就是因为一个都没 import)。
- 已改成:工具描述就是普通数据对象,直接交给
已验证 / 未验证
已验证(可重复执行):
node --check全部通过;node test\smoke.mjs→smoke OK — 138 checks passed。- 用真实锚点(
profiles\tauri\package.json的createRequire().resolve.paths)解析并 import 宿主半边:导出apply/inject/name,无宿主包依赖,apply依次注册 → 路由 → 工具 → 系统提示。 - 起本地 http 服务跑真实请求:
GET /api/health200、POST /api/items201(自动分类 tools)、GET /api/state、PATCH /api/items/:id(inbox→todo)、POST /api/client-report200;磁盘文件落盘状态一致。 - 三个工具直接调
execute:capsule_add(自动分类 工作/插件工具)、capsule_list(统计 + 完整 id)、capsule_update(inbox→done),output.render输出 text 块。 - 浏览器半边已真的跑起来:
GET /thought-capsule/api/client-report回build:"…-ui16"、slotsResolved:true、registered:["shell.overlay","shell.overlay","sidebar.panellist","main","plugins.bundle.config"]、failures:[](悬浮胶囊 + 划词气泡两个 overlay 席位、侧栏图标、主面板、插件设置卡都挂上了)。 - 真宿主上的新路由:
GET /api/review?days=7回真实统计(added/done/archived/byCategory/stale/counts),GET /api/export回整库 JSON。
排障用的 /api/client-report 判读:404 → 宿主半边没加载(查 profile 接线、junction、桌面端确实重启了);{applied:false} → client.js 求值了但 apply 没被调用(dsh.client.inject 服务名要再核);slotsResolved:false → 席位名不对。
接口
prefix /thought-capsule:GET /api/health、GET /api/state、POST /api/items、PATCH /api/items/:id、DELETE /api/items/:id、POST /api/client-report(自检)、GET /api/sessions(已落盘、未归档的会话按工作区分组,带 defaultWorkspaceId,给「转给 AI」的选择器)、GET /api/workspaces(全部工作区,含空工作区,给「新会话放哪个工作区」当选项)、GET /api/scan(把最近的用户消息清成一份「盘点遗漏待办」的 prompt)、POST /api/find-missed(面板内直接问宿主模型,回 rows:[{todo,session,why}])、GET /api/review?days=7(本周回看统计:新增/完成/归档/分类分布/停了 N 天没动的待办)、GET /api/export(原样吐出 capsules.json,带 attachment 头,当备份用)、GET|PUT /api/settings(悬浮胶囊:enabled/icon/x/y/size/opacity/noteFont/side/capture)、POST /api/categories、GET|PUT /api/draft。
分类 id:内置 tools work idea read life other + 用户自建 g-xxxxxxxx;状态:inbox todo done archived(archived 带 archivedAt,仍可 DELETE)。
胶囊可选字段:tags(最多 8 个、自动去 #)、dueDate(只存 YYYY-MM-DD,不做提醒)、sourceSessionId(来源会话,转给 AI / 划词捕获时自动带)、routedSessionId + routedAt(转出去过哪条会话)。
面板里能做的事
- 搜索:输入框上方那一行,边打边筛(本地
Array.filter,不建索引),只搜当前页签 + 当前分类;清空即恢复。 - 本周回看:页签右边的小按钮,纯本地统计——这周新增、完成、归档各几条,哪个分类最活跃,哪些待办超 7 天没动。不调模型,所以瞬时;要 AI 写点评再给
weeklyDigest加一段askModel。 - 划词捕获:读网页/文档时选中一段话(至少 2 字),选区旁边浮出「记下来」小气泡,一点就存成「阅读」胶囊并带上来源会话;拖动/滚动即收起。设置里可开(
settings.float.capture,默认关——聊天里划词复制太常见,默认开等于到处冒泡)。 - 导出 JSON:设置面板里的「导出 JSON」=
GET /api/export,整库原样落下,换设备/备份用。 - 归档:卡片状态段里的「归档」= 做完但先不删,进「归档」页,带归档时间;归档页里可以移回待办或删除。
- 转给 AI:卡片上的「转给 AI」按钮。正文 = 这条胶囊 + 你补的一句话 + 其余所有胶囊(当背景,告诉 AI 可用
capsule_list/capsule_update)。选好目标(新会话 / 某个已有会话,按未归档工作区分组)后点 「准备提交」:本插件用sessions.retain(id,{source:'controllerOperation'})拿到 binding,再调conversation.input.requestDraftInitialization(binding, {prompt})把正文放进那条会话的输入框并打开它,不发送——你在会话界面确认后自己按回车。 - 悬浮胶囊:面板右上角 ⚙ →「在桌面上显示彩色思维胶囊」。它注册在
shell.overlay席位,是position:fixed的彩色小球;点一下弹便签、Enter/「保存」即进「未整理」,再点收起;按住可拖动,位置、大小、便签透明度、图标都存进库(settings.float,图标可选内置 emoji 或上传一张 --title "..." --notes-file notes.md
## 回滚
删掉 `profiles\tauri\package.json` 里的 `dsh-thought-capsule`(dependencies 一行 + bundles 一项)与 junction,或直接恢复 `package.json.bak-thought-capsule`,然后重启桌面端。