把日常对话沉淀成可编辑的泡泡记忆图,随时带走
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Eveneve-night/memory-bubble该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 35 条)
- 读取本地文件interop/cli.mjs:55
result = await client.call('import', { graph: JSON.parse(await readFile(args.file, 'utf8')), updateExisting: args.apply === true }) - 读取本地文件interop/cli.mjs:61
result = await client.call(args._[1], args.file ? JSON.parse(await readFile(args.file, 'utf8')) : JSON.parse(args.json || '{}')) - 写入本地文件interop/cli.mjs:67
if (args.out) await writeFile(args.out, text, 'utf8') - 读取本地文件interop/client.mjs:22
const descriptor = JSON.parse(await readFile(path.join(path.dirname(file), 'bridge.json'), 'utf8')) - 发起网络请求interop/client.mjs:39
const response = await fetch(target, { method, headers: { - 执行外部命令来自配置/变量interop/dev/test-interop.mjs:22
const child = spawn(command, args, { cwd: root, windowsHide: true }) - 读取本地文件interop/dev/test-interop.mjs:79
const graph = JSON.parse(await readFile(exported, 'utf8')) - 读取本地文件interop/dev/test-interop.mjs:86
const payload = JSON.parse(await readFile(bundleFile, 'utf8')) - 读取本地文件interop/dev/test-interop.mjs:101
const bundle = JSON.parse(await readFile(bundleFile, 'utf8')) - 读取本地文件interop/dev/test-interop.mjs:109
const schema = JSON.parse(await readFile(path.join(root, 'schema', name), 'utf8')) - 执行外部命令来自配置/变量interop/dev/test-interop.mjs:115
const child = spawn(process.execPath, ['interop/mcp-server.mjs', '--data', dataFile, '--session', 'mcp-test'], { cwd: root, windowsHide: true }) - 读取本地文件interop/dev/test-interop.mjs:143
assert.equal(init.result.serverInfo.version, JSON.parse(await readFile(path.join(root, 'plugin/package.json'), 'utf8')).version) - 删除本地文件递归interop/dev/test-interop.mjs:172
await rm(tmp, { recursive: true, force: true }) - 读取本地文件interop/lib.mjs:56
const parsed = JSON.parse(await readFile(file, 'utf8')) - 写入本地文件interop/lib.mjs:71
await mkdir(path.dirname(file), { recursive: true }) - 写入本地文件interop/lib.mjs:73
await writeFile(tmp, JSON.stringify(state, null, 1), 'utf8') - 写入本地文件interop/lib.mjs:75
await copyFile(file, `${file}.bak`) - 写入本地文件interop/lib.mjs:79
await rename(tmp, file) - 读取本地文件interop/lib.mjs:151
const parsed = JSON.parse(await readFile(file, 'utf8')) - 读取本地文件interop/mcp-server.mjs:17
const VERSION = JSON.parse(await readFile(new URL('../plugin/package.json', import.meta.url), 'utf8')).version - 读取本地文件plugin/dev/test-plugin.mjs:245
const descriptor = JSON.parse(await readFile(path.join(profileDir, '.memory-bubble', 'bridge.json'), 'utf8')) - 发起网络请求plugin/dev/test-plugin.mjs:246
assert.equal((await fetch(`${descriptor.url}/memory-bubble/api/health`)).status, 403) - 删除本地文件递归plugin/dev/test-plugin.mjs:376
await rm(profileDir, { recursive: true, force: true }) - 写入本地文件plugin/lib/bridge.js:41
await writeFile(file, JSON.stringify({ url: `http://127.0.0.1:${server.address().port}`, token, pid: process.pid, - 删除本地文件plugin/lib/bridge.js:49
await rm(file, { force: true }) - 发起网络请求plugin/lib/client.js:161
const response = await fetch(API + path, Object.assign({ - 读取本地文件plugin/lib/store.js:19
await access(target) - 写入本地文件plugin/lib/store.js:61
await mkdir(path.dirname(file), { recursive: true }) - 写入本地文件plugin/lib/store.js:65
await mkdir(lock) - 写入本地文件plugin/lib/store.js:73
await writeFile(path.join(lock, 'owner.json'), JSON.stringify({ pid: process.pid }), 'utf8') - 删除本地文件递归plugin/lib/store.js:74
return () => rm(lock, { recursive: true }) - 读取本地文件plugin/lib/store.js:82
const raw = await readFile(candidate, 'utf8') - 写入本地文件plugin/lib/store.js:100
await mkdir(dir, { recursive: true }) - 写入本地文件plugin/lib/store.js:104
await writeFile(tmp, payload, 'utf8') - 写入本地文件plugin/lib/store.js:106
if (await exists(file)) await copyFile(file, `${file}.bak`)
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
忆泡:把 AI 日常对话沉淀成可管理的暖色记忆泡泡图(DeepSeek Harness 插件 + 离线可点原型)
README
由 DeepSeek 最新模型翻译生成忆泡 Memory Bubble
把 AI 日常对话里沉淀的记忆,养成一张会呼吸的泡泡图——人看得见、管得住;AI 读得到、带得走。
忆泡是给「日常和 AI 聊天的人」用的记忆工具:每轮对话结束后,插件用你的默认模型自动总结出一条条记忆点,画成一张暖色泡泡图。泡泡大小 = 重要性(可手动改),离中心远近 = 出现频率;AI 每轮会收到一条稳定简报,所以它记得住你,而你不必把整段历史重复喂给它。
- 🫧 看得见:每个圆是一个记忆点,点开能改;连线是记忆之间的关系,冲突会亮红灯
- 🧠 带得走:一键导出 JSON / 记忆包,换聊天窗口、换模型、换设备都能继承;其他 AI 也能直接下载使用(v0.2)
- ✂️ 可控上下文:稳定简报进上下文,托盘按需钉选,避免「聊到后面 AI 忘了前面」
- 🪟 暖色、像在泡泡里:奶油底、蜜桃气泡、三档语义缩放,深浅色跟随系统
默认中景视图
图上每颗泡泡都是真实交互:拖动滑杆改重要性会实时变大,点连线能看关系与冲突,Shift+点泡泡放进「本轮记忆托盘」。
展开完整文档(README 剩余 1 节)
忆泡 Memory Bubble
把 AI 日常对话里沉淀的记忆,养成一张会呼吸的泡泡图——人看得见、管得住;AI 读得到、带得走。
忆泡是给「日常和 AI 聊天的人」用的记忆工具:每轮对话结束后,插件用你的默认模型自动总结出一条条记忆点,画成一张暖色泡泡图。泡泡大小 = 重要性(可手动改),离中心远近 = 出现频率;AI 每轮会收到一条稳定简报,所以它记得住你,而你不必把整段历史重复喂给它。
- 🫧 看得见:每个圆是一个记忆点,点开能改;连线是记忆之间的关系,冲突会亮红灯
- 🧠 带得走:一键导出 JSON / 记忆包,换聊天窗口、换模型、换设备都能继承;其他 AI 也能直接下载使用(v0.2)
- ✂️ 可控上下文:稳定简报进上下文,托盘按需钉选,避免「聊到后面 AI 忘了前面」
- 🪟 暖色、像在泡泡里:奶油底、蜜桃气泡、三档语义缩放,深浅色跟随系统
默认中景视图
图上每颗泡泡都是真实交互:拖动滑杆改重要性会实时变大,点连线能看关系与冲突,Shift+点泡泡放进「本轮记忆托盘」。
三个入口
1. 零门槛体验(离线原型,无需安装)
- 在线试玩(GitHub Pages):<https://eveneve-night.github.io/memory-bubble/>
- 或直接下载 prototype/index.html,双击用 Chrome / Edge 打开(单文件、零依赖、不联网)
- 玩法:滚轮三档缩放 → 点泡泡看详情/改重要性 → 点连线看关系 → 搜索 → 托盘注入 → 刷新后数据仍在(localStorage)
2. 在 DeepSeek Harness 里使用(插件)
先下载:插件包 v0.2.1(解压即得 dsh-memory-bubble/ 目录)
方式 A:本地安装(当前版本)
git clone https://github.com/Eveneve-night/memory-bubble.git
cd memory-bubble
在 DSH 的 profile 目录里把它加进依赖,并在 loader(cordis.yml)插入一行 memory-bubble:
profile 目录(桌面版默认在 ~/.dsh/profiles/desktop)
pnpm add "file:<path-to-clone>/plugin"
cordis.yml 的 loader 列表里加入(或让 plugin_manager 安装 bundle)
- id: memory-bubble
name: dsh-memory-bubble
刷新 Web GUI 后,左栏出现「忆泡」图标即安装成功。
方式 B:复制进 node_modules
把 plugin/ 复制为 <profile>/node_modules/dsh-memory-bubble,再在 cordis.yml 里插入上面那行。
npm 包发布后会补上 plugin_manager install_bundle 的一行安装方式(bundle 自带 cordis.patch.yml,不需要手改 loader)。
安装后的入口:左栏「忆泡」图标(整幅记忆图)、输入框左侧药丸(当前会话记忆数)、设置页「忆泡」分区(读取对话并自动生成开关、每轮最多生成条数、记忆总量上限、去抖间隔、注入方式、导入导出)。
3. 其他 AI 也要用?走互操作层(v0.2)
忆泡的记忆不是 DSH 专属。同一份 state.json 有四条通道可以给别的 AI 用,详见 INTEROP.md:
先下载:互操作包 v0.2.1(MCP 服务器 + CLI + schema + 使用说明,解压后直接 node interop/cli.mjs --help)
打包一份记忆包(图 + 简报 + 便携提示词 + 工具清单)
node interop/cli.mjs bundle --out bundle.json
或者起一个 MCP 服务器,交给 Claude Desktop / Cursor
node interop/mcp-server.mjs --data "<profile>/.memory-bubble/state.json"
- MCP:5 个工具(search / brief / remember / link / forget)、3 个资源、1 个提示词,initialize 自带跨 AI 使用说明
- CLI:list / search / brief / export / import / bundle / remember / forget,零依赖
- HTTP(DSH 运行中):/memory-bubble/api/ai/bundle、/ai/prompt、/interop
- 记忆包 memory-bubble-bundle v1:贴进别的 AI 的 system prompt 即可「继承」你的记忆
它在 AI 那边怎么工作
你的每一轮对话 ├─ session/event 折叠(只认真实用户消息,跳过运行时上下文/技能注入) ├─ turn/end 去抖(默认 15s,同会话≥90s)→ 调默认模型抽取 JSON ├─ 合并入图:近似判重、追加时效、更新频率(整批可撤销) ├─ 稳定简报:固定顺序、动态尾注,同样的记忆产出同样的前缀(保 KV 缓存) └─ 下一轮注入:systemPrompt.section(primary)或 agent/pre-step(fallback)
AI 也能主动调用 5 个工具:memory_brief(读简报)、memory_search(检索)、memory_remember(记一条)、memory_link(连线)、memory_forget(遗忘/降权)。
数据与隐私
- 全部保存在本机 <profile>/.memory-bubble/state.json(临时文件 + .bak 原子写;导出在 exports/)
- 不联网、不遥测;「总结」走你已配置的默认模型(llm.stream)
- 抽取只发送最近窗口(默认 6000 字符),不发送整段历史
- 导出格式见 schema/memory-bubble-v1.schema.json,记忆包见 schema/memory-bubble-bundle-v1.schema.json;其他 AI/宿主可按此读写记忆
- 跨 AI 读取默认只读(MCP --read-only),写入需显式操作
目录
docs/ 设计与可行性文档(DESIGN §12 是实现状态、§13 是互操作层;FEASIBILITY 为设计轮报告) plugin/ DSH 插件:lib/{core,store,index,client}.js + dev/ 三套自测 + README interop/ 跨 AI 互操作:mcp-server.mjs / cli.mjs / lib.mjs + 自测(INTEROP.md 是使用说明) prototype/ 离线可点原型(单文件) schema/ 对外 import/export 与记忆包 JSON Schema assets/ README 截图
现状与路线
- ✅ v0.1:宿主半 + 客户端半完成,本地自检 core 12/12、host 13/13、client 3/3
- ✅ v0.2:跨 AI 互操作层(MCP / CLI / HTTP / 记忆包),自检 interop 5/5;导出格式对齐 JSON Schema
- ✅ v0.2.1:自动生成可控——读取对话总开关、每轮最多生成条数、记忆总量上限;「+ 手动记一条」仅手动编辑;当前自检 core 15/15(新增生成数量/总量上限用例)
- ⏳ 真机安装验证(下一个对话):llm.stream 调用形状、agent.ctx.systemPrompt 可见性、主题 token 接入
- 🔜 发布 npm 包(一行安装)→ 更多宿主适配(Web / 移动端)→ 记忆自动归档与「遗忘曲线」
已知取舍:记忆抽取是摘要式的,不做向量检索(图 + 简报足够小,先把「看得见」做对);冲突检测是启发式,需要人确认。
License
MIT · 欢迎 issue / PR:<https://github.com/Eveneve-night/memory-bubble/issues>预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Eveneve-night/memory-bubble
把日常对话沉淀成可编辑的泡泡记忆图,随时带走
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目