DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

Elias1222 /

Elias1222/deepseek-brain

Verified

DeepSeek Harness (DSH) 插件:可持久化、可查看、可交互的五层记忆大脑 + 3D 记忆观测仪

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: master@38d6728a

deepseek-brain

DeepSeek Harness (DSH) 插件 · 五层记忆大脑 + 3D 记忆观测仪 安装:dsh plugin --profile web add github:Elias1222/deepseek-brain

一个给 DeepSeek Harness 用的持久化类人生物大脑插件:五层记忆、指数衰减遗忘、睡眠式巩固、知识图谱冲突修正、ASCII 脑图、Web 仪表盘,以及一个单文件的 Three.js 3D 记忆大脑。

零运行时依赖(纯 Node ESM),数据是 ~/.deepseek-brain/ 下的分层 JSON,随时可以打包搬走。


版本与能力清单见 docs/RELEASE.md(1.0 发布说明)。

1. 安装

# 从 GitHub 安装(把 xxx 换成实际仓库地址)
dsh plugin --profile web add github:Elias1222/deepseek-brain

# 本地开发时用路径安装
dsh plugin add ./deepseek-brain

web 是 profile 名,换成你实际在用的那个(本机真实 profile 名是 desktop,已用 dsh plugin --profile brain-selftest add ./deepseek-brain 验证过安装链路:pnpm link 到 profile、dsh.profile.bundles 自动加入 deepseek-brain、dsh --dump-config 里能看到 - id: deepseek-brain)。

插件是标准 cordis 包:cordis.patch.yml 插入 deepseek-brain 行,lib/index.js 导出 name / inject / apply。 inject: ['tools', 'systemPrompt'] 是硬依赖;webServer 用 ctx.inject 可选挂载,没有 Web 服务时 brain_dashboard 会自己起一个回环端口。

启动后模型立刻拿到工具与 System Prompt 注入(见第 4 节)。数据目录默认 ~/.deepseek-brain/。


2. 架构

┌──────────────────────────── DSH agent turn ─────────────────────────────┐
│                                                                          │
│  user/message ──► session/event hook ──► SensoryBuffer (7±2, TTL 2s)     │
│                                              │ attended?                 │
│                                              ▼                           │
│                                       WorkingMemory (topic stack 4-7)    │
│                                              │                           │
│                              shouldRemember gate (重要度/实体/承诺词)     │
│                                              ▼                           │
│        ┌───────────────┬───────────────┬─────────────────┐               │
│        │ Episodic      │ Semantic      │ Procedural      │               │
│        │ 时间线+强度    │ 主体→关系→客体 │ 规则/习惯        │               │
│        │ 重要度×e^(-λt) │ 别名/冲突修正  │ 作为行为默认值    │               │
│        └───────┬───────┴───────┬───────┴────────┬────────┘               │
│                │               │                │                        │
│         decay / sleep consolidation(夜间空闲触发)                       │
│                ▼               ▼                ▼                        │
│            recall() ← 关键词 × 时间衰减 × 重要度 × (可选)向量相似度        │
│                │                                                         │
│                ├──► brain_recall  → tool result(带分数拆解)             │
│                ├──► promptBlock   → systemPrompt.context (order 130)     │
│                └──► apiState/HITP → 仪表盘 + 3D 大脑                      │
└──────────────────────────────────────────────────────────────────────────┘

与人脑记忆科学的对应

层 插件实现 神经科学对应 关键参数
感觉记忆 sensory 每次输入解析实体(人名/时间/数字/地点/URL/情绪),7±2 槽,2 秒过期 图像/回声感觉登记(Atkinson–Shiffrin) sensoryCapacity、sensoryTtlMs
工作记忆 working 话题栈,新话题 push 到顶,旧话题搁置,按会话隔离 前额叶工作记忆,容量 4±1 workingCapacity(夹在 4–7)
情景记忆 episodic {ts, event, participants, place, emotion, importance 1-5, detail},强度 importance × exp(-λ·days) 海马体时间线情景痕迹 lambda(默认 0.05/天)、forgetThreshold
语义记忆 semantic 三元组图谱 + 别名归一 + 冲突时旧条目 status: corrected 并保留 supersededBy 颞叶语义网络 importance ≥ 4 常驻
程序记忆 procedural 习惯/规则清单,注入 System Prompt 作为默认行为,被使用时强度 +0.1 基底节程序性学习 procedural 强度排序 + 前 8 条入 prompt

三条不变量:

  1. 永不物理删除。forget 与衰减都写入 archive.json;语义冲突只标记 [已修正]。
  2. 重要度 ≥ 4 永久保留(PINNED_IMPORTANCE),不参与衰减清理。
  3. 衰减是连续函数而非定时任务:任一时刻的强度都由 ts 与 λ 现算,不需要后台心跳。

3. 三个使用示例

记住一件事

用户:「我叫林夕,是一名产品设计师,明天下午三点和张伟在望京开会。」

模型会直接调用:

{
  "name": "brain_remember",
  "arguments": {
    "layer": "episodic",
    "event": "和张伟在望京开会,讨论排期",
    "participants": ["张伟"],
    "place": "望京",
    "emotion": "紧张",
    "importance": 4
  }
}

自动抽取的关系表

observe 每收到一条用户消息,都会用 lib/extract.js 的规则表扫一遍;命中的进语义三元组,祈使句进程序记忆。规则是「前置上下文 + 后缀白名单」双约束,所以 李雪是老师 不会被记成你的职业。

规则 关系 触发 例 重要度
name 姓名 我叫/我的名字是 X 我叫林夕 → 用户 → 姓名 → 林夕 5
job 职业 句首/标点/「我」+ 是/做/从事 + 带职业后缀的词 ,是一名产品设计师 4
home 居住地 我住在/我在 X 住 我住在北京 4
company 公司 我在 X 工作/上班 我在字节工作 4
age 年龄 我今年 N 岁 我今年 28 岁 3
birthday 生日 我的生日是 X 我的生日是三月七号 5
like / dislike 喜欢 / 不喜欢 我喜欢 X / 我不喜欢 X 我喜欢黑咖啡 3
pet 宠物 我养了(一只)X 我养了一只橘猫 → 橘猫 3
plan 计划 我打算/准备/计划 X 我打算下个月搬家 3
person-role 身份 X 是 Y(X 不是「我」) 张伟是同事 → 张伟 → 身份 → 同事 4
kin-name 姓名 我(的)爸/妈/哥/姐… 叫 X 我妈叫李雪 → 妈 → 姓名 → 李雪 4
rule 程序记忆 记住/记一下/以后都/下次记得/别再 记住:回答先给结论 4

抽取与闸门解耦:一句话值不值得进情景记忆(注意力闸门),和它里面有没有可抽取的事实,是两件事。observe 先跑规则表,再按闸门决定是否写情景——所以「她是我的老板」这种不会被记成事件的短句,它的 unbound 照样会被报出来。

时间短语:parseWhen() 把「明天下午三点」「下周三上午十点半」「三天后」「两周后」「两个月后」「两小时后」「下下周三」「月底」「3 月 7 号」解析成绝对时刻,写进情景记忆的 when(原话)与 whenAt(ISO)。解析不出来就是 null——绝不用「现在」冒充。

代词绑定(两级):第一级只看同一句里前面出现过的人名(张伟说他下周来,他是我的同事 → 张伟 → 身份 → 同事),绑上就按原话全权重记;第二级才看上下文——候选是「已知人名」,要求只有一个候选且性别对得上(他/他们 男、她/她们 女、对方/这个人/那个人 不分性别),性别证据来自 张伟,他下周来 这种明确同指,没有证据就不猜;第二级绑上的重要度降一档并标 boundFrom: "context"。两级都失败就进 unbound(POST /api/observe 的响应里能看到)并且不写库,reason 为 no-candidate / no-gender-evidence / ambiguous 之一——把不确定的关系记成事实,比漏掉更糟。

共同的后处理:宾语过 clean()(去尾部「的了吧呢啊」)与 accept()(长度 1–20、拒代词与语气词、拒 ≥7 位纯数字、拒以「吗/呢/么」结尾);问句整句跳过(rule 规则除外);同一句里同一三元组只产一次。

同一句话里的「我叫林夕 / 产品设计师」会被自动抽成语义三元组(用户 → 姓名 → 林夕、用户 → 职业 → 产品设计师)。也可以显式写语义:

{ "layer": "semantic", "subject": "用户", "relation": "职业", "object": "产品设计师", "importance": 5 }

回忆一件事

用户:「上次跟张伟那个会怎么样了?」

{ "name": "brain_recall", "arguments": { "query": "张伟 会议 排期", "topK": 6 } }

返回按 关键词 0.55 + 重要度 0.2 + 新鲜度 0.2 + 层级 0.05(可选向量 0.3)排序的命中,并附带分数拆解,模型据此说「你之前说过会议延期到周五」。

查看大脑可视化

{ "name": "brain_visualize", "arguments": {} }
┌─ 工作记忆 · 话题栈(栈顶=当前焦点) ─────────────────────┐
│ ▸ 项目排期                                               │
│ 容量 1/7 · 顶部话题决定回答焦点                          │
├─ 情景记忆(近期 · 强度=重要度×e^(-λt)) ─────────────────┤
│ ● 10-30 会议延期 ★★★★☆ s=3.40                           │
├─ 语义记忆(主体 → 关系 → 客体) ─────────────────────────┤
│ 用户 → 职业 → 设计师                                     │
├─ 程序记忆(行为默认值) ─────────────────────────────────┤
│ ⚙ 先给结论                                              │
├─ 感觉记忆(7±2 槽 · 存活 2 秒) ─────────────────────────┤
│ ◇ 明天三点开会 人:张伟 时:明天                           │
└──────────────────────────────────────────────────────────┘

┌─ 记忆健康面板 ───────────────────────────────────────────┐
│ 总记忆数      3                                          │
│ 本周新增      1                                          │
│ 遗忘压缩数    2                                          │
│ 睡眠巩固次数  1                                          │
│ 平均重要度    4.00                                       │
│ 活跃主题      —                                          │
│ 分层条数      感觉 1 · 工作 1 · 情景 1 · 语义 1 · 程序 1 │
│ 最近巩固      尚未发生                                   │
└──────────────────────────────────────────────────────────┘

另有 brain_sleep(立即巩固)、brain_forget(软删除到 archive)、brain_update(就地修订,不新建不删除)、brain_conflicts(列出 [已修正] 的事实及当前值)、brain_restore(把旧值放回生效位)、brain_import(并入另一台设备的档案,只做加法)、brain_snapshot(Markdown/JSON 档案)、brain_dashboard(启动仪表盘并回传 URL)。

同样的三件事不经过对话也能做——curl / Invoke-RestMethod / Node 三种入口的完整命令见 docs/EXAMPLES.md,HTTP 契约见 docs/API.md。


4. 工具与 System Prompt

工具 作用 关键参数
brain_remember 写入五层中的一层 layer(必填) event participants place emotion detail importance subject relation object rule ts
brain_recall 检索 top-K,返回分数拆解 query(必填) topK layers
brain_visualize ASCII 脑图 + 健康面板 —
brain_update 就地修订一条记忆(情景字段 / 语义 object / 程序 rule),保留历史 id(必填) importance event detail place emotion object rule
brain_history 看一条记忆的版本链(v1 … 当前),回答「之前到底是怎么说的」 id(必填)
brain_conflicts 列出被修正的事实与当前生效值 —
brain_restore 把某条 [已修正] 的旧值放回生效位 id(必填)
brain_prune_conflicts 每个槽位只留最近 N 条旧值,其余软归档到 archive.json(先给预演) keep subject relation dryRun
brain_archive 查归档区(遗忘 / 清理 / 手动归档)并取回,单条或批量 query layer limit id ids
brain_import 并入另一份 export(只做加法,冲突跳过) path 或 json
brain_forget 软删除到 archive.json id
brain_sleep 衰减清理 + 睡眠巩固 minAgeHours
brain_snapshot 导出 Markdown / JSON 档案 format
brain_reset 把大脑清空成空白(五层 + 归档 + 活动流 + 计数器),必须传 confirm: "reset";默认先写一份 snapshots/pre-reset-*.md 留底(snapshot: false 可关) confirm snapshot
brain_dashboard 启动或复用本地仪表盘,返回 URL —

注入到 System Prompt 的内容(order: 130,interpolate: false)包含五条铁律、当前话题栈焦点、程序记忆规则、高权重情景记忆与实体归一表:

你拥有一个持久化的类人生物大脑(五层记忆:感觉 / 工作 / 情景 / 语义 / 程序)。铁律:
① 回答前先调用 brain_recall 检索相关记忆,禁止凭空“想起”;检索不到就明说没有记录。
② 用户给出姓名 / 日期 / 承诺 / 偏好时,立即调用 brain_remember 写入对应层。
③ 提到旧话题时自然带出过往细节(“你之前说过……”),但只使用检索到的内容。
④ 记忆冲突时用 brain_remember 叠加新事实,旧事实会自动标记 [已修正],永不物理删除。
⑤ 重要度 ≥ 4 的记忆永不忘,低价值记忆随时间自然衰减;不要假装记得已被遗忘的事。

interpolate: false 是硬性要求:记忆里出现 {{...}} 时不会被当成模板变量求值。


5. 配置

插件配置直接在 cordis.yml 的插件条目里写(或用 DEEPSEEK_BRAIN_DIR 覆盖数据目录):

- id: deepseek-brain
  name: 'deepseek-brain'
  config:
    lambda: 0.05              # 衰减系数 λ(每天),越大忘得越快
    forgetThreshold: 0.5      # 强度低于该值且重要度<4 → 清理
    sensoryCapacity: 7        # 感觉缓冲槽位,夹在 3-9(7±2)
    sensoryTtlMs: 2000        # 感觉痕迹存活毫秒
    workingCapacity: 7        # 话题栈深度,夹在 4-7
    topK: 6                   # recall 默认返回条数
    autoCapture: true         # 自动把用户输入过闸门后写入情景记忆
    autoImportanceMin: 3      # 自动捕获的最低重要度
    promptInjection: true     # 是否注入 System Prompt
    dashboard: true           # 允许 brain_dashboard 起服务
    backupCount: 7            # 保留的备份版本数
    idleConsolidationHours: 12  # 空闲多久后允许自动巩固(0 关闭)
    minConsolidationAgeHours: 6 # 巩固时忽略的新记忆年龄
    autoDecayMinutes: 30      # 自主遗忘扫描间隔(分钟),0 关闭
    activityLimit: 240        # 活动流环形缓冲长度
    vector:
      enabled: false          # 语义召回开关
      provider: hash          # hash(零依赖余弦)或 lancedb
    demoSeed: false           # 启动时灌入 20 条演示记忆
配置 默认 范围 说明
lambda 0.05 0.001–1 强度衰减率,exp(-λ·天数);0.05 约 14 天减半
forgetThreshold 0.5 0.05–3 低于此强度进入清理;重要度 ≥4 免疫
sensoryCapacity 7 3–9 感觉槽位
sensoryTtlMs 2000 200–60000 感觉痕迹存活
workingCapacity 7 4–7 话题栈深度
topK 6 1–20 recall 返回条数
autoImportanceMin 3 1–5 自动捕获门槛
backupCount 7 1–50 备份轮转保留数
idleConsolidationHours 12 0–240 夜间/空闲自动巩固间隔
minConsolidationAgeHours 6 0–720 巩固时跳过的年轻记忆
autoDecayMinutes 30 0–1440 自主遗忘扫描间隔:到点自动 decayPass(),弱记忆进 archive.json;0 关闭
activityLimit 240 20–2000 活动流保留条数(3D / 仪表盘的事件源)
vector.enabled false — 开启后 recall 额外加向量相似度 0.3
vector.provider hash hash/lancedb lancedb 需自行 npm i @lancedb/lancedb;该分支只把数据库打开成扩展点,打分仍是内置余弦,模块缺失时自动降级并写入 warnings
demoSeed false — 空库时灌入 20 条演示记忆

数据目录优先级:显式 dataDir > DEEPSEEK_BRAIN_DIR 环境变量 > ~/.deepseek-brain。

落盘结构

~/.deepseek-brain/
├── episodic.json      # {version, items:[…]}
├── semantic.json      # {version, items:[…], aliases:{别名: 主体}}
├── procedural.json
├── stats.json         # counters / lastSleepAt / remembersByDay
├── archive.json       # 遗忘与手动删除的只增档案
├── backups/           # 每个文件的最近 7 个版本
│   └── episodic.json.2024-10-30T12-00-00-000Z.bak
├── snapshots/         # brain_snapshot 的 Markdown 档案
└── vectors/           # 可选向量索引(默认不生成)

写入是原子的:*.tmp → rename(Windows 上先删目标)。文件损坏时改名为 *.corrupt-<ts> 并从最近备份恢复;没有备份就重置为空库并在 warnings 里登记。


6. 可视化

6.0 不装插件也能先看

node tools/serve.mjs --demo        # → http://127.0.0.1:7801/deepseek-brain/
# 等价:npm run serve

它用的是插件挂到 DSH webServer 上的同一个 lib/server.js handler,所以预览里看到的和 brain_dashboard 返回的完全一致:仪表盘、3D 大脑、api/state 都在同一个端口上。数据目录默认就是 ~/.deepseek-brain,--data ./tmp 换地方、--port 7802 换端口、不传 --demo 则只在空库时播种。

6.1 对话内:brain_visualize

ASCII 脑图(见第 3 节)+ 健康面板:总记忆数、本周新增、遗忘压缩数、巩固次数、平均重要度、活跃主题、分层条数、最近巩固时间。框线按 CJK 双宽对齐,终端里不会撕裂。

6.2 记忆观测仪(仪表盘)

brain_dashboard → 返回 …/deepseek-brain/dashboard.html。它不是「数据看板」,是一台观测仪:骨白与墨色、宋体标题、等宽数字、压印按钮,没有任何圆角渐变卡片。四页(hash 路由,键盘 1–4):

  • 概览 VITALS:脑区度数表(五层的条数/占比/平均强度)+ 14 天生命体征示波器(新增/遗忘/巩固/巩固次数四条迹线)+ 读数板(λ、半衰期、遗忘阈值、Pinned 条数、数据目录、备份数、向量索引、当前会话)+ 检索台(真正 POST /api/recall,把分数四分量列出来)。
  • 编年史 CHRONICLE:右上角「归档区」按钮打开归档抽屉——遗忘、清理、手动归档的记忆都在里面,可按关键词与层级筛,点「取回」就回到原来的层继续参与检索与衰减;勾选多条可以「取回选中 (n)」,取回后 8 秒内还能「撤销取回」把它送回归档区。等宽表格虚拟滚动,每条给出「强度预报」——还剩 31.2 日 · 强度 0.50 或 免疫 · Imp 5,直接读服务端 forgetInDays,不在前端重算公式。点任意一行打开版本链抽屉:v1 … vN 分开标注当前版与 [已修正],点开看那一版当时的字段;恢复此版本 对情景/程序走 PATCH api/memories/:id(历史另存一版,不覆盖),对语义事实走 POST api/conflicts/:id/restore。
  • 纤维追踪 TRACTOGRAPHY:力导向的语义纤维束,主体/客体分级着色,[已修正] 用虚线束;右侧实体档案按度数排序,点实体列出它的全部事实;再下方是废弃事实面板——按「主体 → 关系」聚合被修正的旧值,每个槽位保留最近 1 条,多出来的点一下就软归档到 archive.json(可先看「可归档 K 条」再动手)。
  • 衰减实验 DECAY LAB:左侧时间转盘(±30 天)真的会 GET /api/state?at=,右侧强度曲线族按当前 λ 画出每条记忆的衰减轨迹与阈值穿越点,右下是遗忘预报清单(按 forgetInDays 升序)。

底部是控制台与活动记录:每一次 observe / recall / remember / correct / forget / consolidate / decay 都带 seq 落在这里(3D 页优先用 GET /api/events 的 SSE 推送:ActivityLog.subscribe() 一有事件就写帧,实测端到端约 80 ms;没有 EventSource 或端点缺失时自动退回 1 秒轮询。密集事件有预算:500 ms 内最多 6 段动画、同时最多 10 个 engram 在飞,toast 300 ms 内的连续提示折成「首条 · +N」),一行一条(例如 #001 22:39:22 检索「张伟 会议 排期」· 3 命中 · 3ms)。

API 挂在 /deepseek-brain/api/*,契约见 docs/API.md:

GET  /api/state?at=   GET /api/activity?since=   GET /api/health
GET  /api/export.json GET /api/snapshot.md       GET /api/conflicts
GET  /api/archive?q=&layer=&limit=                GET /api/memories/:id
POST /api/remember    POST /api/forget   POST /api/sleep   POST /api/decay
POST /api/recall      POST /api/working/push
PATCH|POST /api/memories/:id            # 就地修订(importance / 字段 / 语义 object)
GET  /api/memories/:id                 # 版本链 v1…当前
POST /api/conflicts/:id/restore         # 把 [已修正] 的旧值放回生效位
POST /api/conflicts/prune               # 每槽留 N 条旧值,其余软归档(keep / dryRun)
POST /api/archive/:id/restore           # 从归档区取回一条,回到原来的层
POST /api/archive/restore                # 批量取回 { ids: [...] },缺失的 id 进 missing
POST /api/archive/:id/undo               # 撤销刚才的取回,重新归档(reason: undo)
POST /api/import                        # 并入另一份 export,只做加法

全部端点带 Access-Control-Allow-Origin: *,方便单独打开的 HTML 直接连。

观测仪 · 概览

编年史 纤维追踪
编年史 纤维追踪

编年史 · 版本链抽屉

纤维追踪 · 废弃事实面板

编年史 · 归档区抽屉

衰减实验 手机(390 px)
衰减实验 移动端

6.3 3D 记忆观测仪

  • web/brain-3d.html:开发版,vendor/three.global.min.js 外链,作为插件静态资源由 /deepseek-brain/brain-3d.html 提供,读实时 /api/state。
  • dist/deepseek-brain-3d.html:构建产物,three.js 内联进同一个文件,双击即开、离线可用,此时用内置 20 条演示记忆。
node tools/build-3d.mjs      # 生成 dist/deepseek-brain-3d.html

这台仪器做什么(不是装饰动画)

屏幕上的东西 背后的真实运算
每枚 engram(记忆痕迹)一颗多棘核 一条真实记忆。核的尺寸 ∝ importance、亮度 ∝ salience、棘丝条数 ∝ 重要度、棘长 ∝ strength;全部由 api/state 的同名字段驱动
五层形态不同:感觉=彗星、工作=环链、情景=多棘星、语义=晶格、程序=双楔 层的语义差异;语义晶格的连线是真实三元组与共享实体的边
核的位置永远固定 FNV-1a 确定性寻址(见 docs/API.md §7):同一条记忆每次刷新都落在同一格,你看到的刻度可被复现
点击任何一枚 → 右侧「目镜」 弹出该条记忆的完整字段:id / slot u,v / 盘内 r,θ / anchor / ageDays / strength / salience / hits / ts / 遗忘预报
目镜里的「修订史 v1…vN」 GET /api/memories/:id 的版本链:点开任一版看它当时的字段,恢复此版本 会再压一版而不是覆盖历史;重要度 −/+ 走 PATCH
底板上的「时间切片」与转盘 拖动即 GET /api/state?at=±Nd,整具标本按那一时刻重新计算强度,随时可回到 now
顶栏 事件序号、观测条脉冲 GET /api/activity?since= 的增量:Agent 每次检索/写入/遗忘都在标本上打出一次脉冲
检索台 真的 POST /api/recall,命中项按 score 亮起并连出白质纤维束
检索时的「聚光」 setFocus(hits) 记下命中 id 与命中簇质心:2.6 s 内命中 engram 朝质心收 0.50·sin(πt/T)、非命中向外让开 0.22 并压暗,同时一圈 LineLoop 朝向相机亮灭。只改显示位移,slot u/v 不动——目镜里读到的永远是确定性寻址的槽位坐标
左栏底部的「关注 / 最相关」与层间光晕 活动流折算出的话题热度:写入 +1.6、检索 +1.1×score、修正 +1.2、睡眠 ×0.62,32 s 半衰期衰减。热度分两级——层热度决定解剖锚点处的光晕,单条热度(APP.heatK[id])决定那一枚 engram 的亮度。另有一条独立的相关度通道(APP.relK[id],半衰期 128 s):检索命中按 score 记下「有多像」,只影响 engram 的轮廓硬边,不影响亮度。于是「最近被想起」与「最相关」可以指向不同的两条,读数里分别写「关注:…」与「最相关:…」
左栏「检索史」 最近 12 次 recall 的时间条:每行是 时:分[:秒] · 查询 · 命中层三色刻度 + 命中数。点一行就重放那次检索——聚光圈、命中收拢、白质纤维束全部按当时的 hits 重跑一遍,APP.queries 里存的是 {id, layer, score} 原始载荷
舞台左下角「关联图」 中心是查询、四周是命中:连线粗细与节点半径按 score,节点色是层色,虚线外圈标「这次新出现的命中」。下方一行与上一次同话题检索对比:+N 新命中 · −M 落空 · =K 保留(同话题判定 = 空格分词的共享实词比例 ≥ 0.25,并把共同词写出来)
悬停关联图上的命中节点 图上一点 ↔ 脑里一枚:把鼠标移到关联图的节点上,标本里对应的那枚 engram 被顶到最亮(hi = 1)、其余压暗(dim = 0.92),浮卡底部同时给出 层 · 标题 · score;移开即恢复。浮卡本身 pointer-events:none,只有节点吃指针,所以不会挡住标本拖拽
检索史下方的时间轴 一根 range 把最近 12 次检索当成可拖的时间:拖到两帧之间就按权重插值出一次「中间检索」(score × (1−f) 与 score × f 取并集),聚光被锁在 hold 状态不自行熄灭;松手吸附到最近一格并重放那次的纤维束与聚光。读数写作 50% · 支付流程 评审
检索史顶部的节奏条 相邻查询的间隔先 log1p(Δt/1s) 压缩再累加成横坐标:连着追查的几次会挤成一簇,隔几分钟才想起一次的会被拉开——横轴不是等距时间,而是「节奏」。每根刻度的高度随命中数、颜色取首个命中的层色,当前项加粗;下方读数给出 跨度 / 次数 / 最长停顿
刷新后检索史还在 连上服务端时 loadHistoryFromActivity() 拉 api/activity?since=0&limit=200,把其中 kind === "recall" 的事件重建成 {at, q, hits} 填回 APP.queries(同一秒同一句去重、上限 12 条)。边界:活动流是进程内日志,所以这件事跨刷新、不跨服务重启
进程世代标记 ActivityLog 构造时生成 6 位短 id,MemorySystem.init() 里的 stampBoot() 把它写进 stats.json 的 boot: {id, count, since, previous}(同一数据目录每启动一次 count +1),/api/activity 一起返回 boot / bootCount / bootSince。前端把 boot 存进 localStorage.brain3d.boot,下次连上时比对:一致显示 进程 xxxxxx · 第 N 次启动,不一致显示 新进程 xxxxxx · 第 N 次启动 · 历史已重置
快照里的「最近活动」 exportJson() 的 activity: {boot, generation, seq, events[]} 与 Markdown 快照末尾的 ## 最近活动 · 进程日志 表,都是 activityDigest() 从活动流折出来的「刚才在查什么」。它只读、不参与合并(导入时被忽略),所以跨设备移植时上下文一起带走,记忆本身不会被污染
只读横幅 /api/state 带 readOnly 与 lock(持有者 pid);只读时顶栏一直亮着 只读 · 数据目录被 pid N 占用,持有者退出、handoverMs 到点自动接管后自动消失。写请求期间会拿到 503 read-only,不会假装成功
两个实例共用一条活动流 持锁进程把每条事件追加到 activity.jsonl(上限 400 行);只读实例启动时读进内存(hydrate),之后每次 GET /api/activity 与每条 SSE 连接每秒一次的 syncActivityFromDisk() 里用 ActivityLog.ingest() 追平——新事件同时推给订阅者,所以只读窗口的 3D 动画也由持有者的动作驱动。只读实例自己不写盘,接管后才接上落盘钩子
数据目录独占 Store.acquireLock() 用 wx 在数据目录写 brain.lock(pid / 时间 / 主机名)。抢不到锁先排队(lockWaitMs,默认 8 s),等到就重读磁盘再继续;等不到则以只读启动——/api/health 报 readOnly: true 与持有者 pid,写请求回 503 read-only,前端提示「只读:数据目录被另一个进程占用」。只读实例还有后台接管轮询(handoverMs,默认 20 s):前任进程一退出,它自己升级成可写、重读磁盘、记一次新世代。陈锁(pid 已死或超过 6 小时)会被直接接管
清空时的收拢 reset 事件到达后,每枚 engram 沿自己的扇区角度(archiveAngle(layer, slot.u))飞回归档环并缩小淡出,环上再扫一圈光;1.45 s 后本地热度/相关度/检索史一起归零,服务端此时已是空结构
「睡眠 / 衰减 / 遗忘」压印按钮 真的 POST /api/sleep、/api/decay、/api/forget,迁移与归档在标本上留下路径与残影
归档环里的往返 底板外环按五层切成五段扇区(每段用该层染料,扇区中点常显「感觉 / 工作 / 情景 / 语义 / 程序」小字——标签方向跟着相机转,但半径固定在标本外圈,所以任何方位角下五个都在、互不遮挡),forget / decay 让 engram 缩着飞向自己那一段;restore 沿同一路径长回来,undo 再反向飞出去——落点由 archiveAngle(layer, slot.u) 决定,不是随机角度

三种模式:观测(全景标本)、目镜(选中单条记忆的切片)、剖面(切开半球看深部结构)。

  • 剖面不是隐藏半个半球:一块真裁剪面(renderer.localClippingEnabled + THREE.Plane)从额极以缓动扫到纵裂,切到哪儿皮质就少到哪儿;切面行进时内壁的雾状背面同时收暗,切面读成一张干净的薄片。相机同时用 1.05 s 飞到侧位,退出剖面自动飞回全景。
  • 检索沿白质纤维束跑:脉冲头前面走,走过的路段留下一条渐隐的尾迹(单 LineSegments 动态缓冲,depthTest:false,所以能透过皮质看到),海马索引环先被点亮一整圈,再按 score 从束上不同高度剥出侧支——越靠后越细越短,不是终点放烟花。
  • 目镜的「记忆原文」:情景记忆给的是当初那句话(事件正文 + 地点 + 细节引文 + T / WHERE / WHO / FEEL 四格);语义记忆给 主体 → 关系 → 客体 的三段式与 [已修正] 血缘;程序记忆给规则原文与命中次数。下面才是寻址与分解数字。
剖面(裁剪面扫到纵裂) 检索轨迹与目镜
剖面 目镜

手势(Pointer Events,鼠标与触屏同一套)

操作 鼠标 触屏 效果
旋转 左键拖拽 单指拖拽 360° 环绕标本
缩放 滚轮 双指捏合 拉近看脑沟回与棘丝
平移 右键拖拽 双指拖拽 平移视点
选中 单击 engram 或左板层名 单指点选 相机飞入 + 目镜展开该条记忆
复位 Esc / 「全景」 收起目镜 回到全景

3D 记忆观测仪

手机(390 px,真 device metrics)
移动端

几何与脑区映射(BRAIN = {AX 1.40, AY 1.46, AZ 2.02})

  • 皮层不是一颗椭球,而是 四叶 + 三个极部 的隐式场并集:LOBE_C 里额 [0,0.06,0.50, 0.86,0.84,0.80]、顶 [0,0.26,-0.20, 0.92,0.92,0.72]、枕 [0,-0.06,-0.68, 0.78,0.64,0.50]、颞 [-0.66,-0.30,0.10, 0.50,0.40,0.72](按半球镜像)给主体,另加额极 [0,-0.02,0.88, 0.46,0.42,0.30]、颞极 [-0.56,-0.34,0.66, 0.33,0.27,0.28]、枕极 [0,-0.02,-1.00, 0.36,0.30,0.24] 三个更小更靠外的椭球;polynomial smooth-max(k = 0.115)做圆角并集,再沿每个顶点方向二分 16 次求边界半径 lobeRadius(),归一化按三轴分别做(LOBE_K = {x,y,z},各自取该轴正负向上 lobeRadius 的最大值求倒数)——之前用「所有方向的最大半径」统一去除,等于把极部的收窄又按比例缩放回去;分轴之后额极/枕极的细瘦是形状本身的性质。极部因此是锥形收口,不是两块等高的球面。

  • 两个闭合半球:内侧顶点被 softMax 折到 x ≈ ±gapHalf 的墙面上,两壁之间是真缝(纵裂);脑底面在颅底处压平(py < -0.30 后的 0.58 折减)。

  • 沟回由带分叉的一级沟骨架树驱动:SULCI 里的 18 条折线(中央沟主干 + 上支 + 下支、中央前/后沟、外侧裂主干 + 升支 + 后支、额上/额下沟、顶内沟、顶上沟、顶枕外侧支、颞上/颞下沟、顶枕沟、距状沟、扣带沟)都定义在单位球方向空间;每个顶点一次遍历算出到最近骨架的角距离 d1、到次近骨架的 d2 与按 w=exp(−(d/0.30)²) 融合的相位——

    • 一级沟:d1≈0 处按各自宽度开深槽 exp(−(d1/w)²)·depth;
    • 次级沟:相位 = 加权平均的 (弧长·1.05 + d·17.0),所以脑回走向在两条沟的势力边界上是平滑过渡的,不会突然换向;
    • 三级沟:同相位倍频 2.6×,压掉同心圆;
    • 极部短支( rontal-pole-a/b、 emporal-pole、occipital-pole)只负责开槽、标了 phase: false,不参与相位融合——第一版忘了这一步,极部确实折进去了,但整颗脑也被抹平成光面。
  • Voronoi 顶冠:wall = exp(−((d2−d1)/0.055)²) 在两条沟的分界线上把皮层抬起来,于是两沟之间是圆隆的脑回顶,而不是平台;

    • 叶区调制:相位再乘一个由前后位置决定的 gf = 1 − 0.15·smoothstep(0, 0.90, pz) + 0.20·smoothstep(0.10, −0.85, pz)——额极更宽(gf≈0.85)、枕极更细(gf≈1.20),治掉原先「脑回宽度整齐划一」的塑料感。 合成 bump = (1−sul)·0.55 + 0.45·warpA + 0.18·wall,disp = 1 + 0.094·bump − 0.118·sul。中央沟与外侧裂因此是真正的分叶深沟,不是画上去的线。
  • 竖屏按 fit = clamp(1.02/aspect, 1, 1.56) 把标本拉远;画布宽度小于 720 px 时不再画归档扇区标签(与左栏五区标签重名)。

  • 半球细分 seg: [224, 168](低画质 [104, 80]),约 10 万顶点/半球;加载时一次性算完位移与顶点色,桌面端 DOMContentLoaded ≈ 1.2 s。

  • 颅顶弧线单列一条:y -= 0.125 * smoothstep(0.18, 0.98, |pz|) * lobe,中段最高、额极与枕极一起下沉;同时 x *= 1 - 0.13*smoothstep(0.34,1.0,|pz|) 让极部收窄,从上方看是卵形而不是跑道形。

  • 小脑是两半球 + 蚓部三个网格(共用一份叶片条纹几何),脑干与桥脑独立。

  • 沟底偏冷、回冠偏暖:COL_DEEP 从 #1b1d1e 抬到 #26282b,再按 0.045·sul^1.8·(1−crown) 给暗部加一点冷灰 (第一版给了 0.16,沟里直接亮成蓝血管,被自己否掉了)——暗部于是透得出结构,而不是一片死黑。- 简化:tools/qem.mjs 的二次误差(quadric error)边折叠——顶点聚类只作为对齐的中间步,真正的简化按「删掉这条边会带来多少体积误差」从小到大折叠,沟壁、脑回顶和平面因此被保住;折叠后再叠 5 轮拉普拉斯平滑收掉残留毛刺。

  • 分级 LOD:web/brain-mesh.js 90k 三角(默认档)/ web/brain-mesh-low.js 24k(低画质档与窄屏),加载时按 QUALITY.low 选择;两份都内联进单文件构建。

  • 对比度:解码时统一套 CONTRAST = { gain: 1.34, bias: -0.02, scale: 0.52 } 这条曲线——顶点色是按无光照烘焙的,直接喂给标准材质会发白。

  • 热切换:setCortexLod(level) 按 pickLod() 挑档(QUALITY.low 或 innerWidth < 900 用 24k 版),两档几何都缓存在 cortexLod.cache 里,切换只换 mesh、不重新解码;resize 去抖 260 ms 后自动重挑,也可用 window.__setCortexLod("low"|"high") 手动切。

真皮层网格(CC BY 4.0)

皮层几何不再是程序化生成的近似,而是 真实的 MRI 重建表面:

  • 来源:Thomas Habets, brain (https://github.com/ThomasHabets/brain),数据部分许可 CC BY 4.0;
  • 处理:tools/fetch-brain-mesh.mjs 取 tar.gz → tools/bake-brain-mesh.mjs 顶点聚类抽稀(59,342 三角 / 22,749 顶点)、拉普拉斯平滑 5 轮、轴变换(FreeSurfer RAS → 本项目 X 左右 / Y 上 / Z 前后)、量化 + gzip → web/brain-mesh.js(628 KB base64);
  • 回退:浏览器缺 DecompressionStream、数据加载失败或使用 ?proc=1 时,仍用原来的程序化半球(SULCI 22 条骨架那套),不会白屏;
  • 署名:单文件版本内嵌同一份网格,使用时请保留本段与 docs/RELEASE.md 中的署名。

注意:真网格与程序化半球的坐标一致(世界包围盒 x ±1.41 / y ±1.22 / z ±2.02),所以 engram 的确定性槽位、剖面裁剪、归档环都不用改。

  • 回冠高光:顶点色里给「不在沟里 + 正对主光 + 隆起」的顶点加 0.34·crown (crown = (1−2.2·sul)^1.5 · lam^2.4 · (0.55+0.45·bump)),暖色偏移也跟着它走—— 远看时脑回顶有一道细亮边、沟底仍是墨色,整体不再像蜡模。
  • 皮层用 MeshStandardMaterial 承接真实定向光(key/fill/rim 三灯 + 半球光),顶点色承载沟回的「沟底变暗」;engram 用 depthTest:false 的 X 光叠加,所以能隔着皮质看到深部结构——这是仪器语义,不是穿模。
  • 剖面切面是解析式着色器:vUv 上算灰质带(smoothstep(rim-0.19, rim-0.05, r))、皮质-白质交界亮线、胼胝体弧、穹窿、侧脑室、基底节,再叠一层 hash 颗粒与沿灰质带的沟刻痕;不经过纹理,所以没有色彩空间损耗。
  • 检索束是屏幕空间加粗管线:每段生成 6 个顶点(两个三角形),顶点着色器把端点投到 clip space、按屏幕法向撑开 aWidth 像素,宽度沿尾迹衰减;单 Mesh + 动态缓冲,depthTest:false,能透过皮质看到整条束。
  • 五个脑区锚点:感觉 (-0.42, 0.86, 1.12)、工作 (0.48, 0.34, 1.60)、情景 (-0.88, -0.30, 0.14)、语义 (1.14, -0.40, 0.06)、程序 (-0.30, -0.12, -0.28);半径 .34/.30/.26/.38/.22。
检索束(加粗管线,命中瞬间)
检索束
凑近看皮层(沟回沿一级沟骨架铺开)
皮层细节

性能(目标 60 fps,含移动端)

手段 说明
实例化 engram 核 每层一个 InstancedMesh(上限 512),一次 draw call 画完整层;尺寸/亮度/明暗走实例属性,不在帧内重建几何
线条合并 纤维束、环、刻度全部并进一个 LineSegments(LINE_SEGS 上限),一次提交
脉冲池 检索/写入的激活脉冲是固定容量的 Points 池,循环复用,绝不 new
零帧内分配 渲染循环复用模块级 Vector3/Color 临时量
拾取开销 射线只与每层的 picked proxy 求交,不打高面数皮质
画质分档 hardwareConcurrency ≤ 4 / dpr×width > 2600 / 视口短边 < 720 时降级:关抗锯齿、pixelRatio ≤ 1.5、分段 96×72、关菲涅尔壳与颗粒
离屏暂停 document.hidden 时停渲染,轮询也暂停
抗抖动 惯性阻尼;prefers-reduced-motion 下镜头跳切、不做长动画
调试 按 d 显示 HUD:draw calls / triangles / 帧耗 / 实例数

7. 测试与调试

node --test test/            # 62 个用例:分层算法 / 存储 / 记忆系统 / HTTP API / 活动流 / 插件契约 / 前端产物
node tools/demo.mjs          # 灌入 20 条演示记忆并打印脑图
DEEPSEEK_BRAIN_DIR=/tmp/brain node tools/demo.mjs   # 用临时数据目录,不碰真实记忆

用例覆盖:

文件 覆盖
test/layers.test.js 实体抽取、注意闸门、话题栈与小话题过滤、情景衰减与钉住、语义别名/冲突历史、程序记忆去重、巩固摘要、检索权重、ASCII 对齐、Markdown 档案
test/store.test.js 原子写、备份轮转上限、损坏文件隔离与恢复
test/memory.test.js 落盘/重启后记忆存活、观察闸门、recall、软删除、衰减清理、睡眠巩固、apiState 契约、演示数据、prompt 块、配置夹取
test/activity.test.js 活动流:seq 单调、payload 不能伪造 seq/kind、未知 kind 回退、环形缓冲上限、since() 只返回增量
test/server.test.js 全端点、CORS/预检、静态资源、路径穿越拒绝、坏 JSON 结构化报错、salience 派生、时间旅行、forgetInDays 预报、POST /api/recall
test/plugin.test.js cordis 契约、15 个工具 schema 只使用 DSH 支持的 JSON Schema 子集、端到端工具调用、session/event 捕获、prompt 注入
test/frontend.test.js 两个页面无远程依赖、内联脚本可编译、3D 页引用 vendor + api/state + 五层名称、dist 单文件把 three.js 内联且无外链

调试入口:

  • GET /deepseek-brain/api/health:数据目录、各层条数、备份数、向量状态、warnings。
  • 脑图底部「记忆健康面板」就是同一份统计的可读版。
  • 想看某条为什么被召回:recall 的 parts 里有 keyword / importance / freshness / vector 四个分量。
  • 想看引擎刚刚做了什么:GET /api/activity?since=<seq>,观测仪底部的「活动记录」就是它的渲染。
  • 想验证遗忘:GET /api/state?at=%2B30d 看 forgetInDays 归零的那几条,再 POST /api/decay 让它们真的进归档。
  • 插件初始化失败不会炸掉会话,错误进 memory.warnings 并在 api/health 里可见。

7.1 本机实测记录

项 结果
node --test test/ 62 pass / 0 fail
真实安装 dsh plugin --profile brain-selftest add ./deepseek-brain → pnpm link 成功,dsh.profile.bundles 自动写入 deepseek-brain,dsh --dump-config 出现 - id: deepseek-brain
真实 HTTP dashboard.html / brain-3d.html / vendor/three.global.min.js / api/state 全部 200,api/state 10 KB(v2 增加了 salience/预报/活动序号),regions 计数与库内条数一致
真实检索 POST /api/recall {"query":"张伟 会议 排期"} → 3 命中,top 0.624,tookMs 实测 31–46 ms;活动流里同一条事件带回 parts/strength/title,所以别人的检索在观测仪上也不是空条
遗忘预报 importance 1 的新条目 forgetInDays = 13.86;?at=%2B10d 后同一条变 3.86;importance ≥ 4 一律 null(pinned)
20 天剧本(λ=0.08) sleep {"migrated":3,"compressed":0,"pruned":0,"digests":0,"kept":9},重载后 episodic 9 条、archive 与 backups 一致
3D 交互 CDP 真实点击 engram:相机飞入 + 目镜列出 id / slot u,v / 盘内 r,θ / anchor / ageDays / strength / salience / hits / ts / 遗忘预报;飞入 / 检索轨迹 / 遗忘此条 三个按钮均打到真实端点
移动端 390×844(CDP Emulation.setDeviceMetricsOverride)下观测仪四页无横向溢出、3D 竖屏不裁两颞侧,目镜改为底部抽屉

3D 页另外有一份离线冒烟:web/brain-3d.html 复制到没有 vendor/ 的目录会显示可读错误卡而不是白屏。


8. 目录

deepseek-brain/
├── cordis.patch.yml          # DSH bundle 插入声明
├── package.json              # main: lib/index.js, dsh.bundle.patch
├── lib/
│   ├── index.js              # 插件入口:15 个工具 + prompt 注入 + 事件捕获 + Web 挂载 + 自主遗忘定时器
│   ├── memory.js             # MemorySystem:五层编排、配置、状态、prompt 块、演示数据、遗忘预报
│   ├── store.js              # 原子写、备份轮转、损坏恢复
│   ├── sensory.js            # 感觉缓冲 + 实体抽取 + 注意闸门
│   ├── working.js            # 话题栈 + 话题检测
│   ├── episodic.js           # 情景记忆 + 指数衰减
│   ├── semantic.js           # 三元组图谱 + 别名合并 + 冲突修正
│   ├── procedural.js         # 规则/习惯
│   ├── retrieval.js          # 检索引擎与分数拆解
│   ├── consolidation.js      # 睡眠式巩固
│   ├── activity.js           # 认知活动流(3D / 观测仪的事件源)
│   ├── vector.js             # 可选向量召回(hash / lancedb)
│   ├── render.js             # ASCII 脑图与健康面板
│   ├── snapshot.js           # Markdown 记忆档案
│   └── server.js             # 观测仪 + JSON API(含 ?at= 时间旅行与 /api/recall)
├── web/
│   ├── brain-3d.html         # 3D 记忆观测仪(开发版,外链 three)
│   ├── dashboard.html        # 记忆观测仪(单文件)
│   └── vendor/               # three.js 全局构建
├── dist/deepseek-brain-3d.html  # 单文件 3D 观测仪(构建产物,three 内联)
├── tools/                    # serve(本地预览)/ demo / build-3d / build-global-three
├── test/                     # 61 个 Node 原生测试
├── docs/
│   ├── API.md                # 前端契约 v2.1(端点 + state 结构 + 确定性 engram 寻址)
│   ├── DESIGN-v2.md          # 观测仪设计说明:形态学、色彩、排版、事件编排、性能预算
│   ├── EXAMPLES.md           # 示例:记忆 / 检索 / 可视化 / 观察大脑正在想什么
│   └── screenshots/          # 观测仪四页、3D 目镜与移动端截图

9. 边界

  • 记忆只存在本机,插件不做任何网络请求;观测仪监听 127.0.0.1。
  • 自动捕获有闸门(问候、过短、纯提问不写入),避免垃圾记忆污染;仍建议用 importance 与 brain_forget 维护。
  • 遗忘是真的:autoDecayMinutes(默认 30)到点自动 decayPass(),跌破阈值的记忆移入 archive.json;3D 里那枚 engram 会随之消失,而不是只变暗。
  • vector 默认关闭。hash provider 只是字符级哈希相似度,不是真正的语义嵌入;接 LanceDB 时可以注入自己的 embedding。
  • Windows 上文件写入走「删目标再 rename」的回退路径,极端断电窗口内可能丢一次写入,但有备份兜底。
  • 3D 页面在 file:// 下无法访问 API,会自动切到内置演示记忆;实时数据请走 brain_dashboard 给出的 URL。
  • 3D 皮质是程序化近似,不是医学模型:叶形来自四椭球并集,沟回来自 22 条一级沟骨架(含四条极部短支)(含分叉)+ 平行相位 + Voronoi 顶冠;一级沟的位置是手调的近似解,脑回在顶叶与颞叶交界一带仍偏放射状,额极/枕极偏圆钝,小脑叶片仍是正弦条纹;远看合格,贴近看依然是「生成物」。engram 用 X 光叠加(depthTest:false)是刻意的仪器语义,不是穿模。
  • 曾尝试用同一高度场烘焙切线空间法线贴图来补近距离细节,已放弃:次级沟在球面 UV 上的周期只有约 6 px,224/320 分辨率下会采样出摩尔纹,画面变成一片「鳞片」;真要做需要位移贴图 + 三平面投影,成本远超收益。现在靠 224×168 细分 + 顶点位移解决轮廓,近看仍是光滑的。
  • 时间旅行只重算强度与预报,不会真的把记忆写回过去;?at= 是只读的时间切片。
  • Windows PowerShell 的 Invoke-RestMethod 默认按 ANSI 发 body,中文会变成 ??;用 [Text.Encoding]::UTF8.GetBytes($body)(见 docs/EXAMPLES.md)。
  • 390 px 下观测仪把左侧脑区表收成横向条、把目镜改成底部抽屉;3D 页在竖屏会把标本按比例拉远,避免裁掉两颞侧,代价是上下留白。

MIT License.


附录 A · 截图一览

全部 1600×1000(移动端为 390×844 真机视口),存在 docs/screenshots/。

文件 看什么
brain3d.png 默认视角:22 条一级沟骨架、回冠高光、五层锚点与环绕的归档环
brain3d-detail.png 拉近:沟底冷灰 / 回冠骨白,极部短支切出的折痕
brain3d-eyepiece.png 目镜:一条记忆的原文、字段、确定性槽位与遗忘预报
brain3d-revisions.png 目镜里的修订史:v1…vN 芯片 + 该版字段
brain3d-focus.png 检索聚焦:命中收拢、非命中让开、一圈朝向相机
brain3d-heat.png 话题热度:层光晕 + 最热那条 engram 的读数
brain3d-recall.png 检索尾迹与侧支(白色索引环 → 命中)
brain3d-history.png 左栏检索史:最近 12 次查询 + 命中层刻度
brain3d-rhythm.png 检索节奏条:log1p 压缩后的爆发与长停顿
brain3d-timeline.png 时间轴拖拽:两段检索之间插值出的聚焦
brain3d-graph.png 查询-记忆关联图:中心查询、四周命中、与上次对比
brain3d-hover.png 图上悬停 → 脑里对应的那枚 engram 高亮
brain3d-archive-ring.png 归档环的五段扇区与常显小字
brain3d-restore.png 取回:engram 从环上沿尾迹长回自己的槽位
brain3d-reset.png 清空瞬间:所有 engram 收拢回归档环
brain3d-section.png 剖面:真裁剪面推进 + 灰白质分层着色
brain3d-readonly.png 只读实例的常驻横幅(另一个进程持有数据目录)
brain3d-boot.png 检索史的世代标记:进程 xxxxxx · 第 N 次启动
brain3d-shared-activity.png 只读窗口收到持有者的检索:同样出聚焦与 toast
brain3d-mobile.png 390×844:竖屏取景与底部抽屉
dash-vitals.png 观测仪 · 概览:脑区度数、生命体征示波器、读数板
dash-chronicle.png 观测仪 · 编年史:等宽表格、强度预报、两步归档
dash-tractography.png 观测仪 · 纤维追踪:力导向纤维束 + 实体档案 + 废弃事实
dash-decay.png 观测仪 · 衰减实验:时间转盘、曲线族、遗忘预报清单
dash-revisions.png 观测仪 · 修订抽屉
dash-archive.png 观测仪 · 归档区:多选取回与撤销
dash-deprecated.png 观测仪 · 废弃事实:每槽留 1 条,其余软归档
dash-reset.png 观测仪 · 清空大脑(含「已留底」提示)
dash-mobile.png 观测仪 · 390×844
—/ 5

No ratings yet

Verified DSH bundle

Commit 38d6728aadf5

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout