coding-agents
vectorize-io/hindsightHindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
DeepSeek Harness 跨会话记忆引擎:SQLite 存储 + 可人工编辑的 Markdown 镜像、autoDream 自我巩固、离线语义搜索(本地向量/精排/聚类)、实体-属性-时间轴、Sleep Mode、autoSummarize 自定义模型,共 7 个记忆工具。
给 DeepSeek Harness 的跨会话记忆插件:让 Agent 记住你、记住项目、自动整理记忆。Mneme(Μνήμη)——希腊记忆女神 Mnemosyne 之名,掌管记忆与梦境,正如 autoDream 在后台巩固记忆。
dsh-mneme 是一个 DeepSeek Harness (DSH) 插件,为 Agent 提供持久的跨会话记忆能力。它借鉴了 Claude 的 Dream 机制 与 cc-haha / Claude Code 的 autoDream 记忆巩固功能——不仅存储记忆,还会自动巩固(去重、合并、冲突裁决、摘要生成),让记忆库越用越精炼。完整溯源与致谢见文末「🙏 致谢」。
一句话:给 Agent 装上跨会话记忆——记住你、记住项目,并在后台自动整理,越用越懂你;v0.8.0 起记忆可按 agent 与工作区隔离(scopeEnabled),多 Agent / 多项目互不串台。
① 写入 · ② 存储 · ③ 进化 对话中模型主动记录(memory_save,可带敏感度与事件时间);会话结束自动提炼(autoSummarize) · SQLite 主库 + 人类可编辑 Markdown 镜像;实体 / 属性 / 时间轴三层结构化;记忆带 agent / workspace / 敏感度 / 发生时间标注 · 新会话自动注入相关记忆(按当前作用域加权,strictScope 开启后显式收窄的归属硬隔离);autoDream 后台去重 / 合并 / 归档,冲突冻结待人工裁决
# 30 秒上手
dsh plugin --profile web add @modusensus/dsh-mneme
dsh web它不是什么(边界声明):
~/.dsh/memory/memory.db,node:sqlite 内置,零原生依赖preferences.md / projects.md / decisions.md / history.md / summary.md / patterns.md / pitfalls.md / constraints.md / rejected-solutions.md),文件头是 YAML frontmatter(type / generated.by / generated.at / covered / coverage / tags)。人类可读,条目标题与正文可手工编辑(人工修改优先合并回库);文件头与条目元数据行由机器维护preference 偏好 / project 项目 / decision 决策 / history 历史 / summary 会话总览 / pattern 模式 + 编码记忆三型 rejected_solution 被否方案 / pitfall 踩坑 / constraint 约束(v0.7.13 起,codingRetrospect 默认关;v0.7.11 近重写已收窄删除 user/fact 两型)generation(期望轮次)/ applied_generation(已应用轮次)建模同步债务generation 用 SQLite 原子语句递增,多进程并发零丢失;带 CHECK 上界,负数/溢出拒绝committed / failed / pending 回执,健康端点区分 ok / degraded / unknown工具 · 功能 memory_save · 记录一条记忆(自动按标题去重合并;v0.8.0 起去重键含 agent/workspace/scope 作用域,可选 sensitivity / occurred_at 参数) memory_search · 全文搜索(中文子串友好,可启用向量语义搜索;可选 occurred_from / occurred_to 按事件发生时间过滤) memory_list · 按类型分页列出(include_archived=true 可查看已归档;可选 occurred_from / occurred_to 时间过滤) memory_get · 读取单条记忆完整正文(v0.7.25,按 id;memory_search / memory_list 命中后读全文) memory_update · 修改已有记忆 memory_delete · 删除记忆(按记忆 ID 精确删除) memory_forget · 抑制注入(降权不删除,可恢复) memory_archive · 归档/恢复记忆(v0.2.5;归档后隐藏于列表/搜索/注入/整理,archived=false 可恢复) memory_runtime · 本地推理运行时的状态 / 供给 / 校验(v0.7.32,自管运行时三档取件)
summary 优先 + 少量高重要性条目)turn/end 时用 LLM 提炼本次会话的偏好/决策/教训,自动入库(过滤 plugin 注入上下文,避免污染)溯源:autoDream 的理念源自 Claude Code 的 Auto Dream 记忆巩固功能(Anthropic,Memory 2.0 的后台整理子代理),其「离线巩固」思路与 UC Berkeley & Letta 的 *Sleep-time Compute* 论文(arXiv:2504.13171)一脉相承。dsh-mneme 将其引入 DSH 插件生态,并发展为自己的实现——K-Means++ 聚类预分组、类型化决策清单与可回放的 sha256 摘要审计链,详见文末「🙏 致谢」。
keep / merge / archive / conflict / update 决策清单,服务端校验后逐条应用merge:合并主题相近的条目,保留信息最完整者archive:归档过时/冗余条目(可恢复,不物理删除)conflict:裁决矛盾信息,胜者保留、败者归档并追加溯源注释;conflictFreezeEnabled(默认关)开启后矛盾对不自动裁决,改为冻结进冲突队列(状态页并排对比,人工选保留方,#166)update(v0.2.1):直接修正单条记忆的过时/错误内容(单 id / 必须实际变化 / 非 summary / 24h 保护 / 每次 ≤2)failure_memories 表(旧值/新值),为后续自进化积累数据degraded),绝不破坏记忆库dream_runs 审计表(输入快照 sha256 digest + 完整输入快照 + 决策清单 + 逐 id 去向 + receipt),可离线回放;merge / conflict / update 幂等应用,重放/并发重复执行无累积副作用;update 记录 _before 快照默认 131072(即上限,#135)已为思考型模型预留推理+正文的双重预算(部分思考型模型仅推理就可能消耗 8k+ token),常规记忆库无需调整。若记忆量大(数万字符以上)且正文仍被截断,优先按下方「巩固模型分类声明」换非思考模型 / 配 dreamReasoningEffort 压低思考,再考虑调大输入侧上限(如 distillMaxChars)——dreamMaxTokens 本身已无上调空间。
若使用思考型模型(如 deepseek-v4-flash / DeepSeek-R1 类),模型可能把全部预算花在 reasoning 上导致正文为空(日志出现no json array in llm output)。#135 修复后:未配置dreamReasoningEffort时会自动取模型支持的最低档发流(不再省略字段让模型自带默认档——v4-flash 系默认 high——顶上烧光预算),默认配置即生效;显式none= 不发送字段用服务商默认,off/low/medium/high原样传递,模型不支持的档位自动换用(拒绝原因记入 llm_audit)。正文仍为空时配置dreamProvider/dreamModel指向非思考模型(dreamMaxTokens默认已是上限 131072,无上调空间)。sleep 侧对应sleepReasoningEffort。
巩固模型分类声明(settings panel「巩固模型」= dreamProvider/dreamModel,睡眠侧对应 sleepProvider/sleepModel):
模型类别 · 例子 · 说明 非思考模型(推荐) · glm-5-2 类等 · 无 reasoning 声明;即使配了 effort 被 harness 拒绝,fallback 去掉字段重试即成功。空体风险最低 思考模型(需实测) · deepseek-v4-flash-ga 等 v4-flash-ga 系 · 默认开推理,可能烧光 token 预算返回空体;部分型号(如 v4-flash-ga)在 harness 侧被声明为不接受任何 reasoning effort(去掉 effort 时 harness 的 defaultEffort 会顶上来再次拒绝)。v0.7.26+ 已根治:resolveDreamEffort 发流前探测模型支持的档位,不支持的配置档位自动换用模型默认/首个支持档位,声明无 reasoning 能力的型号则省略字段。选用时建议配 dreamReasoningEffort 实测(未配置时自动取最低档),不行就换非思考模型
从 autoDream 的"被动阈值触发"升级为"主动定时维护 + 分层压缩"。系统空闲 sleepIdleMinutes 分钟自动执行深度维护,默认关闭(sleepModeEnabled: false),开启后行为:
noteWrite 重置空闲计时 + 中断信号)service.enqueue 串行队列,与 autoDream 严格不重叠;minRefTimeMs 防止快照后被召回的记忆被误降级conflict_resolution:全库冲突消解,strictness 三级可配(gentle 0.92 / normal 0.85 / aggressive 0.75)archival_demotion:按 last_accessed_at 分层——30 天未召回压成摘要(原文进 _full_content,可无损恢复)、90 天完全归档pattern_discovery:LLM 扫描近期记忆提炼规律,产出 type=pattern 记忆,evidence 强校验防伪造relation_completion:检测孤立实体并补全隐含关系(共现 related_to / 项目 part_of / 技术 depends_on)dream_runs,run_type='sleep',与 autoDream 共用审计表可追溯配置详见docs/SLEEP.md;迁移说明见docs/MIGRATION.md。
官方设置面板 → 「记忆库设置」→「记忆」标签:按类型浏览、全文搜索;启用向量搜索后可用「语义」切换做向量召回。
官方设置面板 → 「记忆库设置」标签:
/名称 [补充说明]),触发时把用户定义的指令内容作为一条用户消息提交给当前 Agent,命令后缀会作为补充说明一并提交;界面仅显示提交回执(宿主不支持 followup 提交时退回旧行为,指令原文会显示在界面,便于复制后手动发送)。命令持久化到 SQLite,启动时自动注册到 DSH 命令表,增删实时生效画像与规则通过独立的 [用户设置] 注入区块(优先级高于记忆库),即使记忆为空也会注入。可选能力:接入 OpenAI 兼容的 embeddings API,让搜索能命中字面不同但语义相近的记忆。
配置:官方设置 → 「记忆库设置」→ 滚动到底部「向量搜索」区块:
字段 · 说明 启用向量搜索 · 总开关;开启后记忆面板出现「语义」切换 API 地址 (Base URL) · OpenAI 兼容端点,如 https://api.openai.com/v1;也支持 SiliconFlow、智谱、本地 Ollama 等 API Key · 对应服务的密钥 模型名 · embedding 模型,如 text-embedding-3-small、text-embedding-v3、bge-m3 等
保存配置后点「重建索引」,为已有记忆批量补建向量(新写入的记忆会自动嵌入)。之后在记忆面板输入查询并点「语义」,即可用向量召回语义相关结果;向量服务不可用时自动回退全文搜索。
⚠️ 密钥仅保存在本机~/.dsh/memory/memory.db的user_settings表,不会上传,也不会写入代码仓库。
需要 embedding 而非 rerank 模型:如阿里云text-embedding-v3可用,qwen3-vl-rerank是 rerank 模型(不走/embeddings)。
v0.2 起新增完全离线的语义记忆引擎(本地模型 + 精排 + 聚类):
Xenova/bge-small-zh-v1.5,离线)/ Ollama / OpenAI 兼容,失败自动逐级降级,最差回退关键词搜索Xenova/bge-reranker-base 对召回候选交叉编码精排,提升 Top-K 准确率clusterMemories),自动发现主题相近 / 疑似矛盾的记忆,巩固更精准@huggingface/transformers + onnxruntime-node + sharp,从宿主收编时本机实测 49 个包 / 约 393MB)可收编到 ~/.dsh/mneme/runtime/,与 profile 的依赖图解耦——由于 profile 是所有插件共用的依赖图,这份闭包留在此前的位置会让「安装任何插件」都替它重走一遍整条依赖链;收编优先硬链接,同盘时几乎不额外占盘。@huggingface/transformers 已从 dependencies 降为可选 peer,因此安装插件不再携带它;正在使用本地嵌入的用户请先按文档收编,否则升级后本地嵌入不可用(读写信道不受影响).tgz 目录(runtimeTarballDir,某个包网络下不到时用)→ ③ npm registry(runtimeMirror 可换镜像),按随包发布的 runtime-manifest.json 逐个取并先校验 sha512 再落盘(win32-x64 实测约 33 个包 / 2142 个文件 / 数百 MB;清单平台无关,一份覆盖 win32/darwin/linux × x64/arm64;剔除 onnxruntime-web——Node 构建从不 import 它)。面板「向量索引」卡片在不就绪时会给出这段代价说明并提供一个按钮;不想开面板也可以让 agent 用 memory_runtime 工具(status / provision / verify)代做配置只需在 cordis.patch.yml 里设置 embedProvider(默认 openai,保持 v0.1 行为;改为 local 即离线)。升级无需迁移数据。
node scripts/mneme-runtime.mjs status # 运行时在哪、来源、结构是否完整(不加载模型)
node scripts/mneme-runtime.mjs adopt --from ~/.dsh/profiles/<profile>/node_modules
node scripts/mneme-runtime.mjs verify # 真加载运行时并跑一次推理三个命令的退出码为0健康 /1不健康 /2用法错误,便于脚本 gate;--json输出机器可读结果。运行时不可用时不会崩——检索降级为关键词/BM25,读写不受影响。详见 本地模型部署指南 §2.5。
v0.3.0 起新增记忆基因层:从记忆里抽取命名实体、带时间轴的属性、实体间关系,让搜索从"字面关键词"升级为"按实体/属性精确召回"。
entities / entity_attrs(valid_until 快照式时间轴)/ entity_relations,旧库打开自动建表,幂等无迁移成本entityExtractionEnabled=true 后,新写入的记忆 fire-and-forget 触发 LLM 抽取(同名实体去重、属性存时间轴、关系追加;失败绝不阻塞写入)searchMemories 前缀路由,entitySearchEnabled 默认开):entity:阿尔托 → 属性精确关联的记忆(_score 1.0)排在关键词提及(_score 0.7)之前attr:国籍=芬兰 → 精确匹配该属性值的记忆attr:国籍 → 该属性键的全部当前有效记忆(value 为空契约)supersedes 自引用(属性版本被替代);merge 决策把 loser 的属性归属迁移到 keeper(keeper 已有同键当前值则失效)📖 详见 实体结构化记忆设计 · 语义增强架构 · 本地模型部署指南 · 从 v0.1 升级说明
写库前对每条记忆做启发式质量打分(纯函数,无 I/O、无共享状态):元记忆词汇(谈论记忆系统本身)、自指类型标签、内容过短、重复度高、与近期记忆近似重复都会扣分(0-100):
score ≥ 60:正常存储30 ≤ score < 60:quality_score 落库,注入排序改为按 importance × quality/100 降权(degraded)score < 30:归档并标记 low_quality——仍可显式搜索召回,只是永不自动注入。例外(#135):importance ≥ memoryQualityFilter.exemptImportance(默认 4)的记忆只降权不归档——评分与信号标签照常落库,归档决定不再静默越过用户标注的重要性memoryQualityFilter.enabled 可整体关闭,archiveThreshold / degradeThreshold / minContentLength / exemptImportance(1=全部豁免,5=仅最重要豁免)可调。此外更新记忆(memory_update 等)不会抹掉系统信号标签(low_quality / duplicate / meta / self_referential / repetitive / short_content)——它们是「为什么被降权/归档」的审计线索,与用户自传标签并集保留(#135)。
每次后台 LLM 调用都会写入 llm_audit_logs 表:tokens / duration / status / source(由哪个触发产生)。失败调用记为 status=error,绝不阻塞功能本体;retentionDays(默认 90)在启动时清理超期行。
覆盖的后台调用(source 即触发源,operation_type 区分同一源下的不同调用):
source · operation_type · 说明 autoDream · dream_consolidate / dream_summarize · 巩固的整理裁决与总览摘要,各一行 autoDream · dream_narrative · 叙述条合成,需 dreamNarrativeEnabled(默认关)才跑 autoSummarize · summarize_compress · 空闲蒸馏的压缩 sleep · sleep_conflict / sleep_pattern · Sleep Mode 的冲突裁决与模式挖掘,两阶段各一行 entityExtract · entity_extract · 实体抽取,每次写入记忆都会跑
后两条链路见 #250——它们是结构上漏接的后台路径(sleep 的streamText副本没有onUsage、实体抽取适配器拿不到service),不是刻意收窄口径。
新增两个只读 API:
GET /api/dsh-mneme/semantic/llm-audit?page=&pageSize=&source= — 分页查询 + 按 source 过滤GET /api/dsh-mneme/semantic/llm-audit/stats?days= — 近 N 天按 source 汇总预算(tokens / 次数 / 失败数)/llm-audit/stats 的 by_source 是服务端 GROUP BY trigger_source,不做任何白名单过滤,因此新链路自动进入汇总。
面板侧现状(#250 之后,未改面板):
/llm-audit/stats,但只渲染 total_calls / total_tokens 两个总数。新链路的 token 与次数已经计入这两个总数,所以「mneme 总共花了多少」现在是对的;by_source)目前只能从 API 读,面板不展示——「哪条链路最费」在面板上还答不了;autoDream / autoSummarize 两个硬编码来源(lib/client.js),新链路不会出现在活动流里。这三处要动面板(活动流还有一处来源白名单加一处二元标签兜底,且 pageSize=12 会被每次写入都跑的实体抽取占满),留到面板批次,不在 #250 内。
实体抽取是每次写入记忆都会跑的链路,计入审计后llm_audit_logs的行数会随写入量线性增长(retentionDays只约束上界、不约束增速)。若实测增速过快,再考虑按operation_type采样或单独保留期。
只读端点,与 list/search/semantic 一样在设置 apiToken 后仍保持开放。记忆功能从侧边栏抽屉收进主内容区全宽 tab(conversation.view 插槽,与「对话 / Trajectory」并列),侧边栏「记忆」入口点击后直接激活该 tab。页面顶部子 tab 行切换三个子视图:
entity: 前缀可「在图谱中查看」GET /api/dsh-mneme/semantic/graph/ego?entity=&depth=1|2(BFS 层级遍历,limit 防大图失控,实体不存在 404;配套 /semantic/graph/entity-attrs 查实体属性)图谱 ↔ 记忆双向互跳:图谱详情侧的关联记忆可点击,记忆边的「来源记忆」按 memory_id 直跳三栏视图并自动定位。
src/search/bm25.js):与向量召回、FTS5/LIKE 关键词并列——ASCII 词元 + CJK bigram 分词、IDF 加权(归一化 [0,1]),专有名词 / ID / 代码片段等散词查询不再依赖子串命中。融合规则:未召回行按 0.3×BM25分 回填;仅向量召回行获得词法加分;LIKE 已命中行不叠分。bm25SearchEnabled 可关entityRecallEnabled 默认关):开启后检索融合池三源扩四源——store 新增 findEntitiesMentionedIn / getLinkedMemoryIds 反查原语 + idx_relations_memory 索引,命中实体所在记忆按边入池,fuseRecall 的 blend / rrf / minmax 全配方参与;实体轴与 BM25 同为确认/回填信号(we 并入 wb 共用 0.3 回填权重),永不主导语义排序,失败降级空数组;keyword 模式纯文本路径不吃实体轴src/search/adaptive.js):取代固定 0.65 截断——entity:/attr: 前缀放宽 0.5,短查询(50)放宽 0.6,Top1/Top5 分差 > 0.3 时放宽让尾部进 Rerank;显式传 threshold 或 adaptiveThresholdEnabled=false 走旧行为src/hot-memory.js):最近 N 轮对话(默认 5 轮,hotMemoryRounds)按 token 预算(默认 2000,hotMemoryMaxTokens)滚动截断,从会话事件日志无状态重建、不落库;注入顺序为「短期上下文 → 长期记忆召回 → 摘要」selectiveInjectEnabled 可关);搜索时语义去重为激进选项(searchSemanticDedup=true 显式开启,近重复行 Rerank 前丢弃)scripts/benchmark-recall.js):标准查询集驱动,计算 Recall@5 与 MRR,legacy(三特性全关)vs fused(默认配置)双跑对比entityRecallEnabled):实体挂联记忆并入检索融合池,见上方「四路召回融合」POST /bootstrap 从仓库目录反向构建初始记忆——零 LLM、幂等、必有产出,新仓库起步不再从空记忆开始injectContentMaxChars):截断不再静默——尾部带上限/原长/全文 memory_get 指引,agent 永远拿得到全文路径dreamNarrativeEnabled 开启后按主题簇合成叙述条并附 evidence 证据链heatGlobalBeta):幂律换 H=exp(-λ·Δt^β),β 可调衰减形状⚠️ 历史存档提示:下方及路线图表中 v0.7.12 之前的早期条目记录的实验功能(Wiki-Link、tag 系统/目录/tag 加权、user/fact 分层类型、前缀 id 解析、/stats 与 /directory 端点等)已在 v0.7.11 近重写时移除(v0.7.11 与 v0.7.12 同日发布,历史文档多标 v0.7.12,此处勘误归一到 v0.7.11),仅作版本历史存档,不代表当前能力。同期未记载的移除另有:会话生命周期(session_disposed_at软隐藏)、provenance 出生会话溯源(session_id)、决策字段归一化(normalizeDecisions,已由提示词硬规范取代)。(heat 热度模型已于 v0.7.20 从 v0.7.10 完整找回回归,见下方 v0.7.20。)当前特性以本 README 正文与 配置表 为准。
版本 · 亮点 v0.8.6 · 可靠性修复批次:autoDream / sleep 的节流与冷却时刻跨重启持久化——调度器 lastRunAt 此前只活在内存,进程重启即归零、闸门对新实例放行(#89 实测横跨重启边界的 8.7 / 23.1 分钟连发),现从 dream_runs 审计表恢复上次开跑时刻(按 run_type 过滤,failed/degraded 也算 run),审计行 created_at 同步改记开跑时刻(#291);Sleep Mode 与实体抽取接入 LLM 审计(#250,#286);本地嵌入按模型族选池化——BGE 系用 CLS,修 mean 池化造成的静默检索偏差(#285);1290 测试全绿 v0.8.5 · 主动整理 + 注入形态 + 蒸馏可靠性批次:agent 主动整理接口 service.organize——dryRun 出比对报告(精确层标题归一,向量层 0.92 与 document / session 档同源)→ agent 判断 → apply 落库,筛除=归档不删、同一份报告只许落地一次、全程复用 dream_runs 回执(#231/#267,heptaspirit);注入形态第一批——injectGuidanceEnabled 能力说明(工具描述尾句 + order 150 常驻段)与 pinnedInjectBudget 约束/偏好 pin 池逐字保真(#249);注入预览卡 /inject-preview 旁路快照(#179);蒸馏游标持久化 distill_cursors 与旧宿主内存游标降级(#229/#274/#279);工具暴露开关 disableMemorySearch / disableMemoryArchive(#276);document 型记忆(#230)、总览独立路由(#258)、错峰队列(#239 第 4 项)、注入命中留痕(#217)、token 记账修复(#242)、运行完整性判据修复(#268);1275 测试全绿 v0.8.4 · MCP 六件套 + 图召回轴 + 冷启动 + 注入截断/状态条 + 蒸馏可靠性批次:stdio MCP server 让记忆六件套进任意 MCP 客户端——零依赖(JSON-RPC 2.0 换行帧,不引 SDK),工具面与 src/tools.js 逐字对齐、平价回归锁漂移,配置沿用 CLI 约定(#181/#214);图召回轴 entityRecallEnabled——检索融合池三源扩四源,实体挂联记忆参与 blend/rrf/minmax,与 BM25 同为确认/回填信号(#219/#222);冷启动 src/bootstrap.js 从仓库文件反向构建初始记忆——零 LLM 必有产出、幂等,POST /bootstrap(#220/#223);注入截断上限可配 injectContentMaxChars + 截断尾部带全文 memory_get 指引(#164①/#225);dream 总览升级常驻状态条 + 叙述条 dreamNarrativeEnabled(#164/#227/#228);记忆复用统计卡 / 注入状态卡 / 路由旧值显式标记(#182/#217/#191/#213);heat 幂律换广义指数 heatGlobalBeta(#218);修复 reasoningEffort 连通性透传、summarize 增量蒸馏 + 子会话交付补齐(#215/#226/#232);1160 测试全绿 v0.8.3 · 注入轮换与下载可靠性批次:注入位跨轮轮换 injectRotationTurns(默认 0 = 关)——同一会话相邻轮次不再反复注入同一条,窗口只看之前轮次、同查询工具轮不推进不转自己(sessionId 分桶 FIFO 32,#205/#206);候选池四处扩容 poolSize = maxItems × (轮换窗口 + 1)(下限 200),旋钮开多大、池子就够多大(#208);模型文件下载断点续传与重试 resilientModelDownload(默认开)——Range / If-Range 续传、416 / 偏移失配重置、单写者锁 + 降级直通 + 空闲看门狗(#194/#207);1079 测试全绿 v0.8.2 · 生态与性能批次(社区贡献集中合入):LLM 消息补 source 契约——严格 provider 下 dream/summarize/sleep/实体抽取不再序列化抛错(#189/#190);memory_get 输出 schema 与共享 DTO 同源(#184/#186);sleep 计时器撞 CD 重排 + 构造挂表(#187/#192);单 logit 重排器恒 0.5 修复 + 镜像/量化接线(#188/#193);连通性探测改发 user 消息(#197);首轮注入 BM25 同步兜底——老偏好不再占满槽位(#198/#199);autoDream 宽容路径闭环——coverage 不足降级 degraded + archive 类型护栏/批量上限 dreamMaxArchivePerRun(#104/#200/#201);检索路径性能第一批——updated_at 索引 + all() 剪列 + 向量解析缓存(#202/#203,all() 231→51ms、searchVector ~140→16ms);standalone API 补 profile/rules 路由(#180/#185);1061 测试全绿 v0.8.1 · 归属显式声明与人工纠偏 + 插件版本自检:记忆归属三段式可控——per-dim 来源列 + save/update scope 参数 + 面板可编辑(#170 第 1 步,#171);sleep 跨 scope 相似对停车进冲突队列人工裁决(第 2 步,#172);strictScope 硬过滤只认显式声明、自动标注降为纯软加权(第 3 步,#173,4.3 已确认);GET /api/dsh-mneme/version-check 只读路由 + 设置页偏差横幅(仅 outdated 渲染,registry 精确 host 白名单 + TTL 缓存 + 全失败静默,pnpm 钉子警示 + 市场收录延迟说明,#174 后续);1026 测试全绿 v0.8.0 · 作用域隔离(issue #17 批次 A)+ 冲突集中处理 + 斜杠命令提交 Agent + 注入转义回归修复:记忆按 agent 与工作区双维标注(agent_scope / workspace_scope / sensitivity / occurred_at 四列可空),检索按当前会话作用域加权(命中 ×1.25、他 scope ×0.5 保留可见),opt-in strictScope 硬过滤贯通检索/注入/列表/单取(fail-closed);scopeEnabled / strictScope 默认关、面板「作用域隔离」组可启停;去重键扩展含作用域三元——跨作用域同标题不再物理合并;occurred_at 事件发生时间 + occurred_from/to 过滤贯通搜索与列表;冲突冻结(conflictFreezeEnabled)新增人工出口——状态页冲突队列并排对比 + 保留 A/B/仅标记(#166);斜杠命令经 agent.followup 真正提交模型(#152);恢复 v0.7.4 的注入花括号转义 + hot memory 跳过 reasoning——{{.Server.Version}} 类文本不再卡死会话(#165);988 测试全绿 v0.7.32 · 冲突动作集扩展 + 运行时自管化 + 记忆/提示语言 + 候选集 hybrid 档 + 一批修复:sleepActionSet 新增 full 档(supersede/differentiate/update/merge/conflict/keep 六分支,默认 conflict 零行为变化)——supersede 赢家正文干净、输家归档附「已被取代」注记,differentiate 双留+差异注记;sleep 校验接入 dreamSkipInvalid 宽容策略(默认 true,一票否决变宽容,严格可关);运行时三档取件(收编/本地 .tgz/registry)+ transformers 转可选 peer(#131);memory.language(zh/en)提示/注入/镜像语言可选(#124);summarize 节流 + 产出上限 + 同会话去重(#127);inject 正文读取修复(#129)、#135 五连修(前缀解析/effort 最低档/importance 豁免/ready 语义/覆盖度降级告警)、boot 回填指纹短路修复(#128)、degraded 轮跳过明细落库(#104);916 测试全绿、总覆盖 92.7%(runtime 96%、embedding 100%) v0.7.30 · 状态页向量卡修复(issue #118):改读开放的 /semantic——不再吃 /vector-config 的 401「加载失败」,ollama/local 模式不再恒显「未启用」;新增「初始化中(embedder 不可达,正在重试)」与「已索引 N / M 条」回填进度显示;legacy OpenAI 兼容 embedder「Object · 0D」显示修复(embedder 显式 name: "OpenAI" + 维度回退 index.dimension);「已索引 N / M」分子分母同口径(embeddedCount 剔除归档/遗忘,与 count() 默认过滤对齐);embedder init 失败有界重试(共 5 次,不再一次性永久降级,unload 清理定时器)+ OllamaEmbedder.ready 生命周期位 + /semantic 新增 ready 字段;745 测试全绿 v0.7.29 · 实体抽取路由契约修复 + 面板控件 + 帮助与反馈:streamEntityText 抽取为可测试导出的 createEntityStreamAdapter——显式 provider/model 优先、缺省兜底读默认路由选择;实体抽取思考强度 entityExtractionReasoning 被模型拒绝时自动去 effort 重试(与 autoDream/sleep 同一降级策略);设置面板新增实体抽取 provider/model/思考强度三控件;面板底部新增「帮助与反馈」卡片(GitHub issue 预填 + mailto work@modusensus.space + 浏览已知问题)+ 配套 GET /api/dsh-mneme/info;744 测试全绿 v0.7.28 · 连通性测试三连修:POST /api/dsh-mneme/test-model 最小调用 maxTokens 16→1024——思考模型的推理过程足以耗尽 16 token 预算致 reply 恒为空(「真的答了 ok 而非只报通」对思考模型不成立;按实际用量计费,手动按钮无放大成本);连通性测试状态按巩固/睡眠路由各持一份——此前共享单份,点任一「测试连通性」按钮两组同显「测试中/结果」且互相禁用;面板挂载草稿补 sleepProvider/sleepModel——后端一直保存正常,但重挂载(切页签/退出重进)后下拉恒显「跟随默认路由」,看起来像设置被重置,补键后正常回填(历史已存值无需重填);733 测试全绿 v0.7.27 · v0.7.26 端点遗漏补齐:v0.7.26 发版树未含 fix/dream-effort-trap 分支,CHANGELOG/Release 宣告的 GET /api/dsh-mneme/llm-providers + POST /api/dsh-mneme/test-model 两个端点实际不在包内(面板「级联下拉 + 测试连通性」会 404);本版将分支 rebase 后合入(PR #100),端点落地,面板连通性测试可用;733 测试全绿 v0.7.26 · 记忆巩固 UNSUPPORTED_REASONING_EFFORT 根治 + 巩固/睡眠模型连通性测试:根治 defaultEffort 陷阱——harness 在 effort 省略时注入 reasoning.defaultEffort,若该默认档位本身不被模型支持,则去 effort 重试也无济于事(换什么 effort 都会被拒绝);修复:新增 resolveDreamEffort 经 ctx.llm.resolveModelInfo() 主动探测模型支持的档位再发送——配置档位不被支持时自动换用模型支持的默认/首个档位、模型声明无 reasoning 能力则省略字段;设置面板巩固/睡眠 6 字段补选型提示(引导非思考模型,避免再踩思考模型烧光 token 预算);新增 GET /api/dsh-mneme/llm-providers(宿主侧 provider/model 发现,密钥不经插件侧)+ POST /api/dsh-mneme/test-model(模型连通性测试,空 body 按巩固路由解析返回 modelId);732 测试全绿 v0.7.25 · 工具兼容性加固 + memory_get/render 内容预览 + 巩固模型引导:新增 memory_get 工具(第 8 个模型工具,按 id 读单条记忆全文)+ memory_search/memory_list render 嵌入标题/元数据/正文预览(宿主只透传 render 文本时模型也能直接读到记忆内容)+ 巩固模型选型引导(config 注释/README 分类声明,非思考 vs 思考模型差异);修复 memory_get execute 嵌套进 output 的崩溃(userExecute is not a function,此前测试只数工具名从未执行该工具而掩盖)+ 工具重复注册去重(live patch reload)+ Standalone API 端口冲突重试(EADDRINUSE)+ client inject 声明对齐 + better-sidebar 集成加固;718 测试全绿 v0.7.24 · 修复 DSH Desktop 插件树加载崩溃(v0.7.23 回归):cordis 4 的 ctx 是 Proxy,访问未在 inject 声明的 webServer 会抛 cannot get property without inject(而非返回 undefined),且去掉 inject 后 cordis 不再等待宿主服务 → 桌面端重启即崩;修复:恢复 webServer 到 inject(cordis 等宿主就绪再 apply)+ apply/register 守卫改 ctx.reflect.get(免 inject 读取、未提供返回 undefined 不抛错);真实 cordis + dsh-host-webserver 插件实测;714 测试全绿 v0.7.23 · 记忆沉淀「反复失败」根治:consolidation 合法空数组 [] 不再误判 failed(CONSOLIDATION_PROMPT 允许「无问题无需输出」,模型无冗余时合法返回 []——此前 validateDecisions 硬判 non-empty → 整单 failed、审计反复失败,且与模型无关,ChatGPT/Claude 同样踩中;修复:空数组显式短路 ok:true no-op)+ 空体修复第二段(dreamMaxTokens 默认 8192→32768,思考模型推理烧光预算的根治余量,设置面板可调)+ skipInvalid splice 残留 bug(长度相等≠内容一致,被跳决策残留);712 测试全绿 v0.7.22 · 恢复 v0.6.9 的 skipInvalid 宽容校验路径(issue #89 回归,v0.7.11 重写丢失):dreamSkipInvalid(默认 true)单条非法决策跳过 + 合法子集应用 + run 记 degraded,allowCrossTypeMerge(默认 false)显式放宽跨类型合并——弱模型(如 qwen3.8-flash)决策合规抖动不再整单拒绝白烧 LLM 调用;严格模式/sleep 路径行为不变,全局上限/覆盖率下限仍整单拒绝(刷爆上限=模型坏了,非轻微 schema 漂移);新增 dreamMinIntervalMinutes(0-10080,默认 0=不限)autoDream 最小触发间隔,失败/degraded run 也占用间隔(节流防失败调用连发);feature_flags 白名单 34 键;696 测试全绿 v0.7.21 · 修复 autoDream/sleep 的 effort 回退在流式路径失效(v0.7.16 的 catch 式回退是死代码):dsh-llm rc.1 把 adapter 阶段异常(含 UNSUPPORTED_REASONING_EFFORT)转成终态 error finish chunk 不再抛出;streamText 现捕获 finish-chunk 失败原因(新增 describeStreamFailure 归一化 {code,message})+ withEffortFallback 增加 getStreamError 访问器(effort 被拒时去掉重试一次)+ runAuditedLlm 支持 spec.streamError(audit 行 error_message 携带真实原因,run.error 稳定 "llm failed" 不变);688 测试全绿 | v0.7.20 | heat 热度模型回归(issue #87):找回 v0.7.0 自进化记忆(src/heat.js 幂律衰减 H=1/(1+λΔt)^α + per-type 差异化半衰期)、sle