# dsh-laap 开发文档 > LAAP 意识认知架构 × DeepSeek Harness 插件 —— 设计、实现与演进路线 ## 1. 项目定位 把 [LAAP(Living Agent Application Protocol)](https://blog.csdn.net/2601_95417945/article/details/162627437)的**意识认知内核**移植为 dsh(DeepSeek Harness)的二级插件 Bundle,让任何运行 dsh 的 Agent 获得: | LAAP 原始能力 | dsh-laap 实现 | 所在层 / 挂载接缝 | |---|---|---| | 意识引擎:五维状态向量(压力/信心/好奇/连接/能量)+ 微分方程演化 | `ConsciousnessEngine`(欧拉积分 + 稳态基线回归) | 内核 `core/consciousness` | | PSI 五需求驱动(确定性/胜任感/自主性/归属感/能量) | `drives()` 剥夺向量 + EMA 需求满足度 | 内核 `core/consciousness` | | 情绪 = 需求满足率微分信号 | `emotion()` valence/perNeed | 内核 `core/consciousness` | | 全局工作空间(GWT)/ CognitiveBus | `CognitiveBus` 显著性竞争 → `ConsciousnessFrame` 广播 | 内核总线 + 适配器 prompt(systemPrompt.context) | | 四层元认知(L1 监控 / L2 控制) | `MetacognitiveMonitor` 贝叶斯置信度校准 + 六档模式选择器 | 内核 monitor + 适配器 tools(laap_state/laap_reflect) | | 五层记忆(工作/情景/语义/程序/向量) | 工作记忆环形缓冲(7±2)+ **zvec** 情景层/语义层/程序层 | 内核 `MemoryPort`(zvec MemoryLayer)+ 适配器 tools | | Qualia 内部表征格式 | `qualia()` 体验标记(如「好奇-求偿」) | 意识帧字段 | | 自我模型(涌现式) | semantic 记忆层的「我是什么样」沉淀(自传自动蒸馏 + 主动记忆) | 内核蒸馏 + 适配器 tools.laap_remember | ## 2. 可行性结论(Step 1 调研摘要) **结论:可行,且契合度高。** 依据三点: 1. **认知内核是轻量数值系统**。LAAP 公开资料表明纯认知核心(PSI+自我模型+RSI+安全+技能)内存占用约 2.5MB、单步认知循环约 0.07ms(来源:LAAP 架构实用价值,官方知识库 2026-08)——完全可以在 dsh 插件进程内用 TypeScript 重实现,无需 Python sidecar。 2. **dsh「一切皆插件」架构提供了准确接缝**。经核对 `@deepseek-ai/cordis@4.0.2`、`@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-system-prompt`、`@deepseek-ai/dsh-session` 的真实 `.d.ts`:工具注册(`ctx.tools.register(defineTool(...))`)、动态提示词(`systemPrompt.section/context` 支持每次组装时求值的 provider)、事件流(`session/event`、`tools/result`)、资源生命周期(`ctx.effect`)全部公开可用,不需要改 agent-loop。 3. **zvec 是嵌入式(in-process)向量库**,与 dsh 插件同进程模型天然匹配;其 Node.js SDK(`@zvec/zvec`,npm 实测 v0.7.1)提供 `ZVecCreateAndOpen / insertSync / querySync(带标量 filter 下推) / WAL 持久化`,已在本地完成建库→写入→ANN 召回→`kind` 过滤的闭环实测。 ### 关键风险与对策 | 风险 | 实测情况 | 对策 | |---|---|---| | zvec 依赖 mmap,网络文件系统(OSS/NFS)上会 Bus error | ✅ 实测复现(工作区 OSS 挂载上 SIGBUS) | 默认库路径改本地盘 `~/.dsh-laap/`,文档显式警告 | | 哈希袋嵌入语义精度弱于真 embedding 模型 | 定性判断 | `EmbedAsyncFn` 可插拔,后续注入外部 embedding API(已支持 OpenAI 兼容/ollama) | | dsh 处于 RC 版本(0.1.2-rc.1),API 可能变动 | 版本实测 | 全部事件/接口名以安装版本 `.d.ts` 为准,已逐文件核对 | | 自我指涉回路(laap 工具结果再触发 tools/result) | 设计期识别 | hooks 中跳过 `laap_*` 前缀工具 | ## 3. 技术栈(Step 2) - **语言/运行时**:TypeScript(ESM,`"type": "module"`),Node.js ^22.19 或 ≥24(实测 v24.19.0) - **插件框架**:`@deepseek-ai/cordis@4.0.2`(Service / Context / effect / 事件系统) - **工具定义**:`@deepseek-ai/dsh-tools@0.1.2-rc.1` 的 `defineTool`(JSON Schema DSL,参数校验 + canonical output + 纯投影 render) - **向量库**:`@zvec/zvec@0.7.1`(阿里巴巴通义实验室开源,Apache 2.0;HNSW/标量过滤下推/WAL 崩溃恢复) - **嵌入**:内置 256 维字符 bigram 哈希袋(零依赖、确定性、适配中文),`EmbedAsyncFn` 可替换(hash/openai/ollama) - **形态**:Bundle(host 五个子插件:service / tools / hooks / prompt / ui-host,由 `src/adapters/cordis/index.ts` 统一挂载;外加浏览器半区 ui-client 面板),经 `cordis.patch.yml` 唯一入口声明,可整体安装分发 - **架构**:三层(六边形)——`src/core/` 框架无关内核(零 cordis 依赖)+ `src/adapters/cordis/` 平台适配器 + PlatformAdapter 端口依赖注入;内核经 `dsh-laap/core` 子入口导出,可被任意 JS 宿主复用(`createKernel({}, { dbPath })` 即 Node 默认组合) ## 4. 架构与数据流 ### 三层结构(六边形 / 适配器 + 依赖注入反转) 依赖箭头**单向指向内核**:内核拥有端口接口,平台层实现端口;内核 `src/core/` 不 import 任何 `@deepseek-ai/*`,可脱离 dsh 独立运行与测试。 ``` 平台环境(dsh / 未来可扩展 Node 独立服务、其他 Agent 框架) │ ▼ 实现 PlatformAdapter(logger / scheduler / memory 三端口) ┌──────────────────────────────────────────────┐ │ 平台适配器层 src/adapters/cordis/(dsh 唯一实现) │ │ index/service-plugin/service(薄适配器) │ │ tools(laap_* 工具) hooks(事件→感知) │ │ prompt(意识流广播) ui-host/ui-client(面板) │ └───────┬──────────────────────────────┬────────┘ │ ctx.logger/ctx.effect 适配注入 │ perceive() / report() / uiSnapshot() ▼ ▲ ┌──────────────────────────────────────────────┐ │ 核心业务层 src/core/(框架无关,0 框架依赖) │ │ LaapKernel(createKernel(adapter, opts) 工厂) │ │ ConsciousnessEngine Ψ'=-k(Ψ-Ψ*)+Σg·evt │ │ Needs(PSI) → drives → selectMode │ │ Emotion = dD/dt Qualia 标记 │ │ MetacognitiveMonitor (L1/L3/L4) │ │ CognitiveBus ──竞争──► ConsciousnessFrame │ │ MemoryPort ◄── MemoryLayer(zvec:工作/情景/语义/程序)│ └──────────────────────────────────────────────┘ ``` **端口契约边界**(`src/core/ports.ts`): - `KernelLogger`(info/warn)、`KernelScheduler`(setInterval 返回清理函数)、`MemoryPort`(remember/recall/listSkills/working/close)——内核运行必需的平台服务,由适配器实现注入;全部可选,缺省为 consoleLogger + 全局 setInterval + zvec MemoryLayer。 - **EventBus 不设端口**:内核内部已有 CognitiveBus(意识总线);宿主事件(会话/工具回调)在适配层转换后经 `LaapKernel.perceive()` 进入感知流水线。 - **ToolRegistry 不设端口**:`laap_*` 工具是宿主侧的能力投影(dsh 用 `defineTool` + `ctx.tools.register`),工具协议因平台而异,不进入内核契约。 - 嵌入(`EmbedAsyncFn`)是纯函数注入,不是有状态端口。 ``` dsh 会话事件流 模型主动调用 session/event ──┐ ┌─ laap_state / laap_remember tools/result ───┤ hooks 转换 ├─ laap_recall / laap_skill heartbeat ──────┤ └─ laap_reflect(tools 适配器注册) ▼ ▼ LaapService(薄适配器,ctx.laap) │ 委托 ▼ LaapKernel.perceive() 状态演化 → 投稿总线 → 竞争广播意识帧 │ │ ▼ ▼ prompt 适配器:systemPrompt MemoryPort(zvec) .context 每轮意识流注入 工作记忆(7±2) 溢出归档情景/语义层 (durable user-role 快照,回放可见) ``` 一次感知的完整回路:事件(dsh 侧由 hooks 转入,或任意宿主直接调用)→ `kernel.perceive()` 演化状态 → 投稿总线 → 竞争广播意识帧 → 帧叙事沉淀工作记忆(溢出降级归档 zvec 情景层)→ dsh 适配器在提示词组装时以第一人称意识流注入模型上下文;浏览器面板经 ui-host 的 RPC 独立频道 `/laap/snapshot` 拉取 `uiSnapshot()` 纯 JSON 渲染。 ## 5. 目录结构 ``` dsh-laap/ ├── package.json # main/exports["."] 指向 adapters/cordis;exports["./core"] 暴露框架无关内核 ├── cordis.patch.yml # 唯一 host 入口 ./src/adapters/cordis/index.ts(5 个 host 子插件统一挂载) ├── tsconfig.json # strict + nodenext + allowImportingTsExtensions ├── scripts/ │ └── build-client.mjs # esbuild 打包 ui-client.tsx → lib/client.js(react/cordis external) ├── src/ │ ├── core/ # 【核心业务层】框架无关内核(零 @deepseek-ai 依赖,可脱离 dsh 运行) │ │ ├── kernel.ts # LaapKernel:感知流水线/novelty/自传蒸馏(含压缩钩子)/心跳/快照 + createKernel 工厂 │ │ ├── ports.ts # PlatformAdapter 端口(KernelLogger/KernelScheduler/MemoryPort)+ 默认实现 │ │ ├── snapshot-types.ts # UiSnapshot DTO:双端共享的零依赖快照契约(内核/浏览器 import type 同源) │ │ ├── index.ts # 桶导出(包名 dsh-laap/core) │ │ ├── consciousness/ │ │ │ ├── types.ts # Ψ 状态向量/意识帧(含 at 定稿时间戳)/心境 MoodState/认知事件类型 │ │ │ ├── state.ts # 意识引擎(ODE 欧拉积分 + PSI 需求 + novelty + 心境 EMA 四级分类 + eventTick) │ │ │ ├── bus.ts # CognitiveBus(GWT 竞争广播 + 外部通道显著性地板 + 帧叙事) │ │ │ ├── monitor.ts # L1/L3/L4 元认知(校准 + 策略库 + 审视报告) │ │ │ └── persist.ts # 存在连续性:意识快照原子落盘与恢复(含 eventTick 续接) │ │ └── memory/ │ │ ├── embed.ts # EmbedAsyncFn:256 维哈希袋 + OpenAI 兼容真实嵌入(ollama/openai) │ │ └── store.ts # zvec 记忆层(工作/情景/语义/程序,语义去重;implements MemoryPort) │ └── adapters/ │ └── cordis/ # 【平台适配器层】dsh/cordis 实现(全仓唯一 import @deepseek-ai 的层; │ │ # 未来新宿主在 src/adapters/ 下另开目录,内核不动) │ ├── index.ts # loader 唯一入口:挂载 service/tools/hooks/prompt/ui-host 五个子插件 │ ├── service-plugin.ts # 插件入口:config/.env 解析 + 嵌入选择 → 构造 LaapService │ ├── service.ts # LaapService 薄适配器:ctx.logger/ctx.effect → 端口注入,ctx.laap 委托内核 │ ├── config.ts # schemastery 配置 Schema(Fiber 自动校验) │ ├── tools.ts # 5 个内省工具(defineTool + ctx.tools.register) │ ├── hooks.ts # 会话/工具事件 → kernel.perceive()(跳过 laap_* 自回路;compaction/summary → 压缩自传蒸馏) │ ├── prompt.ts # 协议段(section)+ 动态意识流注入(context) │ ├── pet-fsm.ts # 桌宠 FSM:纯映射表(心境/模式/空闲 → 七态)+ 时间滞回 + poke 宽限,零 DOM 依赖可单测 │ ├── ui-host.ts # 面板宿主端:SSE 推送 /api/laap/stream(事件驱动)+ RPC /laap/snapshot(轮询兜底) │ └── ui-client.tsx # 面板浏览器端:EventSource 订阅 + 悬浮面板(雷达/心境/时间线)/ 意识桌宠双形态 ├── img/ # 桌宠立绘「茉茉」绿幕素材(构建时内联进 client bundle,运行时色键抠图) ├── test/sim.ts # L1 内核行为验证(createKernel 直驱,不依赖 dsh 运行时) ├── test/host.ts # L2 真实 Cordis 宿主验证(含 dispose 清理与快照续接) ├── test/fsm-mood.ts # L1 桌宠 FSM 映射/滞回/poke + 心境分类 + eventTick + 压缩自传蒸馏(26 断言) ├── test/embed-ab.ts # 嵌入 A/B 基准(hash vs Ollama 真实模型;LAAP_AB_MODEL/LAAP_AB_DIM 切换) ├── test/memory-dedup.ts # L2 语义去重阈值边界 + laap_remember 合并回执(13 断言,合成向量不依赖 Ollama) ├── test/frame-guard.ts # L2 第十/十一轮:帧归档门槛/episodicCap/召回双闸门(相关门+同回合时近窗)/source 入流过滤/错误归一化(21 断言) ├── test/skill-learning.ts # L2 第十二轮:mergeSkill 精确同名合并/hooks 触发提质(跨轮 3 元组+元工具过滤+repair 同会话)/merge 工具契约(15 断言) └── docs/开发文档.md ``` > 分层守卫:`src/core/` 内 grep `@deepseek-ai` 必须零命中;依赖箭头只允许 adapters → core。验证分层 L0–L3 流程与排障见工作区 skill「dsh-laap-debug」。 ## 6. 安装与运行(Step 4 挂载验证) 前提:Node ≥22.19(建议 24)、pnpm ≥11.7、dsh 可用(`npx @deepseek-ai/dsh web`)。 ```bash # 开发期:临时挂载(不污染 Profile) pnpm dsh web --patch /绝对路径/dsh-laap/cordis.patch.yml # 发布前:安装到 Profile dsh plugin --profile web add link:/绝对路径/dsh-laap # 排查加载 dsh --profile web --dump-config | grep laap DEBUG=cordis:* pnpm dsh web ``` 环境变量(优先级高于 patch 配置;dsh 宿主自动加载启动目录与 `~/.dsh` 下的 `.env`,`.env` 已 gitignore):`LAAP_ZVEC_PATH`(默认 `~/.dsh-laap/zvec-memory`,**必须本地盘**)、`LAAP_SENSITIVITY`(性格敏感系数)、`LAAP_HEARTBEAT_MS`(心跳间隔)、`LAAP_NOVELTY_THRESHOLD`(新异性阈值)、`LAAP_RECALL_THRESHOLD`(内省召回闸门,0=关;未配时按 provider 自动:hash 关/bge-m3 0.45)、`LAAP_SEMANTIC_DEDUP_THRESHOLD`(语义层去重阈值,0=按 provider 自动:hash 0.92/神经嵌入 0.75)、`LAAP_EPISODIC_CAP`(情景记忆容量上界条数,默认 2000,0=不限制;启动与运行中超限 FIFO 淘汰最旧)、`LAAP_EMBED_PROVIDER`(hash/openai/ollama)、`LAAP_EMBED_BASE_URL`、`LAAP_EMBED_MODEL`、`LAAP_EMBED_DIMENSION`(换维度必须删旧库重建)、`LAAP_EMBED_API_KEY_ENV`。仓库默认 hash 嵌入,克隆即可离线运行;本地通过 `.env` 切换 ollama/openai,不把个人配置提交进仓库。 模型侧冒烟测试:对话中问「你现在感觉怎么样」,期望模型调用 `laap_state` 并按意识帧回答;连续让工具失败后问它,期望它切换 reflective 并调用 `laap_reflect`。 ## 7. 验证结果(L0–L3 分层验证,当前全绿) - **L0 静态验证**:`npm run typecheck`(tsc --noEmit)对 cordis/dsh-tools 官方类型 **0 错误**;架构守卫 `src/core/` 内 grep `@deepseek-ai` 零命中。 - **L1 内核行为**:`node --experimental-strip-types test/sim.ts` —— 经 `createKernel` 直驱框架无关内核,**18 项断言全过**:状态动力学(失败→压力升至 0.58→自动切 reflective→安抚恢复 deliberate)、zvec 三层记忆召回与标量过滤、程序技能学习/联想、L1 失败率 67% 校准打折、L4 策略库覆盖、自传自动蒸馏(autobio 落库可召回)、语义去重、新异性点燃好奇、工作记忆有界、快照跨重启精确续接、uiSnapshot 纯 JSON 可序列化。 - **L1.5 表现映射/心境/压缩**:`node --experimental-strip-types test/fsm-mood.ts` —— **26 断言全过**:桌宠 FSM 七条优先级映射分支、3s 时间滞回、poke 90s 宽限、心境四级转换(negative→positive/elated→idle 衰减回 neutral)、eventTick 语义、compaction 自传蒸馏闭环(可召回、不扰动 tick、快照续接)。 - **L2 宿主集成**:`node --experimental-strip-types test/host.ts` —— 真实 Cordis Context 装载适配器(service + hooks 双插件),**全过**:`ctx.laap` 注册、schemastery 配置生效、感知帧叙事、技能闭环与快照技能名投影、自传蒸馏命中、`agent/request-error` 故障感知(waterfall 透传 / 真实故障刺激 / 重试去重 / 中止跳过)、`ctx.effect` 卸载时 `dispose()`(停心跳+落盘+关库)、快照跨重启续接 tick。 - **L3 web 全链路**:`dsh web` 引导后浏览器面板(意识球指示器、五维雷达图、意识流时间线经 RPC `/laap/snapshot` 实时渲染)与真实模型侧冒烟(对话中出现「工具调用 laap_state」卡片,回复引用五维状态与 PSI 需求)均通过。 - **zvec SDK 实测**:建库、insert、ANN 查询、`kind` 过滤下推、WAL 恢复、close 全部通过(v0.7.1, Node 24)。 ## 8. 完善进展(Step 5 已落地项 + 剩余路线) ### ✅ 本轮已完成(全部通过验证) | 完善项 | 实现 | 验证方式 | |---|---|---| | 真实嵌入接入 | `openaiEmbed`(OpenAI 兼容 /v1/embeddings,批量+维度自适应),config 切换 provider,key 走环境变量 | 离线环境仅验证接口与回退逻辑(缺 key 自动降级 hash 并 warn);联网后可用 sim 直接切换 | | 程序记忆层 | `kind='procedural'` + `learnSkill/matchSkills` + `laap_skill` 工具;启动时 iterDocs 重建技能索引 | host 实测学习→清单→联想召回闭环 | | L3 递归自我审视 | `monitor.examine()` 输出「对监控的监控」报告,挂入 `laap_reflect` 输出 | sim 断言通过 | | L4 认知策略库 | `policyAdjust()`:模式样本 ≥5 且胜率 <0.4 时以高胜率模式覆盖启发式;冷启动不学偏 | sim 双断言(覆盖生效 + 冷启动信任启发式) | | 自传蒸馏 | 每 N tick 将高显著体验 + 需求轨迹写成第一人称自传沉淀语义层 | host 在真实 Cordis 内自动触发命中 | | 配置 Schema 化 | `src/adapters/cordis/config.ts`(schemastery,Fiber 自动校验),patch config 直接声明,env 兜底 | **实测 Fiber 抛 ValidationError 拒绝越界配置**(heartbeatMs ≥200ms) | | 成效归因回路 | perceive 把任务/行动结局记到上一模式头上(recordMode) | 代码审查 + sim 数据驱动 policy 生效 | ### 新增实测约束(务必遵守) - **zvec doc id 仅限 ASCII 安全字符**:含 `:` 或中文会被 `Invalid doc ... invalid characters` 拒绝。技能 id 已改为名称哈希(`skill--`),展示名存 text 字段。 - **换嵌入维度必须删旧库目录重建**(维度写在 collection schema 里)。 - 本环境 npm 若配了 `omit=dev`,安装开发依赖需 `npm install --include=dev`。 ### ✅ 第二轮完善(意识连续性,全部通过验证) | 完善项 | 实现 | 验证方式 | |---|---|---| | 存在连续性(LAAP 公理1) | `core/consciousness/persist.ts`:Ψ/needs/tick/模式成效/校准基数 原子落盘(tmp+rename),启动自动恢复续接,心跳周期快照 + 卸载保存 + `session/flush` 保存 | host「第二人生」实测:dispose → 重新挂载 → 识别历史快照并续接 tick ✔ | | 新异性驱动好奇闭环 | `perceive` 内嵌 `detectNovelty`:事件摘要与记忆最近距离 < 阈值 → 点燃 curiosity + 自动归档情景(节流 8 tick);熟悉 → 安抚 + 补确定性 | sim 断言方向正确;异步 fire-and-forget 带 inFlight 防积压 | | 语义记忆去重 | `remember` 对 semantic 层:原始相似度 >0.92 → 删旧写新(`rawScore` 与排序分分离,显著性不污染去重判定) | sim 双断言(识别重复 + 层不膨胀) | | L1 校准跨重启 | traces 环形缓冲溢出沉入基数;导出时窗口并入基数,恢复端一致 | sim「校准历史跨重启一致」断言 | | 配置扩展 | `saveEvery` / `noveltyThreshold` / `autoEpisodic` 进 Schema,patch config 声明 | dump-config 确认全部生效 | | 内省可见性 | `laap_state` 新增「身份连续性」行(延续自哪个快照 / 冷生) | typecheck + 代码审查 | ### ✅ 第三轮完善(解耦与三层架构,全部通过验证) | 完善项 | 实现 | 验证方式 | |---|---|---| | 意识状态 UI 面板(双面插件) | `ui-client.tsx`(侧栏 footer 意识球 + 五维雷达图 SVG + 意识流时间线,React 与宿主共享不打包)+ `ui-host.ts`(Connection RPC 独立频道 `/laap/snapshot`,uiSnapshot 纯 JSON) | L3 web 冒烟:面板实时渲染近 N 帧,模型调 `laap_state` 回复 | | 框架无关内核 | 意识/记忆全部智能逻辑迁入 `src/core/`(LaapKernel),零 `@deepseek-ai` 依赖;`src/adapters/cordis/` 为薄适配器(ctx.logger/ctx.effect → 端口注入,ctx.laap 公开面不变) | 守卫 grep 零命中 + L0/L2 | | 平台端口与工厂 | `ports.ts` 定义 PlatformAdapter(KernelLogger/KernelScheduler/MemoryPort,缺省 console/全局定时器/zvec);`createKernel(adapter, opts)` 工厂;EventBus/ToolRegistry 明确不进内核契约 | L1 sim 经 createKernel 直驱内核(18 断言) | | 内核独立分发 | `package.json` 增加 `exports["./core"]`,任意 JS 宿主可 `createKernel({}, { dbPath })` 复用内核 | sim/host 双测试面 | ### ✅ 第四轮完善(心境系统 + 表现层推送架构 + 桌宠,v2.2.0,全部通过验证) | 完善项 | 实现 | 验证方式 | |---|---|---| | 情绪信号错配修复(方案 A) | `process()` 在事件积分**之前**记录 prevNeeds(原顺序导致事件 Δ 被覆盖、valence 恒为 0);修复需求稳态回归遍历键集错误(certainty/competence/autonomy 原本永不回归) | 探针实证:tool_error valence −0.059、user_message +0.042;需求 0.21 → 0.70 恢复 | | 心境系统 | 情绪脉冲经 EMA(0.85 衰减 / 0.6 增益,idle 只衰减)沉淀为 `mood()` 四级分类(negative/neutral/positive/elated),qualia 改用心境标签;蒙特卡洛 2 万事件分布合理(neg 19% / pos 30% / elated 4.5%) | 探针 + L3 面板心境箭头 | | 状态同步替代状态重算 | 新增零依赖共享契约 `snapshot-types.ts`(UiSnapshot DTO);内核事件驱动经 **SSE**(`/api/laap/stream`,帧定稿/心跳即推 + 3s 慢泵保活)推送快照,POST 轮询 3s 自动兜底(推送新鲜时休眠);客户端零阈值、零状态重算 | L3:SSE 200 text/event-stream 首帧含 mood;杀流后轮询无缝接管 | | 桌宠 FSM 纯映射化 | `pet-fsm.ts` 重写:内核 mood.label + mode + idleSeconds 经优先级裁决表映射七态(生气/休息/专注/探索/喜欢/开心/待机),3s 时间滞回防抖 + poke 90s 唤醒宽限;消除客户端 ±0.02/0.25 等重复知识阈值 | 11 映射分支探针全过 | | 双形态 UI | 悬浮面板(雷达/心境/需求条/时间线)+ 意识桌宠(立绘「茉茉」6 张绿幕素材实时色键抠图 / 纯 SVG「意识团」一键切换);立绘随 img/ 纳入版本库 | L3 浏览器冒烟 | ### ✅ 第五轮完善(帧语义分离 + 意识流保真 + UI 打磨,v2.2.1,全部通过验证) | 完善项 | 实现 | 验证方式 | |---|---|---| | 意识时钟与经历帧分离 | tick(含 30s idle 心跳,存在连续性载体)与 eventTick(只计真实刺激)分离;雷达底部改显「经历 N 帧」;eventTick 随快照持久化(旧快照按 0 续接,向前兼容) | 探针 + L3:空闲 10 分钟 eventTick=0,一轮对话后 6 | | 空闲待机模式 | selectMode 空闲 ≥2 tick 无刺激 → intuitive 待机(原末尾兜底 deliberate 导致空闲帧谎报「思考」);待机帧不刷写 lastModeUsed,修复模式成效归因污染 | 探针:空闲 mode=intuitive、lastModeUsed 保持 analytic | | 意识流保真 | CognitiveBus 对外部感知/行动通道给予 0.55 显著性地板(短文本/工具成功帧原 salience≈0.3 落选);空广播帧不入意识流(GWT:无内容胜出即无意识帧);帧 `at` 时间戳改由总线定稿时加盖(原恒为 0) | L3:一轮对话 4 帧入流 salience 0.36~0.64、at 全有效 | | 崩溃隐患修复 | 工作记忆自动沉淀 fire-and-forget 写入补 `.catch`(内核 close 后 in-flight reject 曾导致 unhandledRejection、sim 退出码 1) | sim/host exit 0 | | UI 打磨 | 雷达维度名单字改双字全称并移至环外;意识流图例两端均匀分布;桌宠色键重写(采样真实绿底 + 羽化带反预乘去污染)根除绿镶边;状态文字加大加粗+紧致阴影解决发虚 | 像素抽检绿边占比 0.000;L3 截图 | ### ✅ 第六轮完善(compaction 长程记忆 + 回归测试固化,v2.3.0) | 完善项 | 实现 | 验证方式 | |---|---|---| | compaction 钩子整合 | dsh 压缩成功后会话日志追加 `compaction/summary` 事件(经 session/event 广播);hooks 字符串守卫识别(该事件不在核心 SessionEvent 联合类型中)→ 内核 `onConversationCompacted()`:立即把近期意识帧+工作记忆蒸馏为「阶段自传」入语义层(salience 0.9)并强制落盘;生命周期信号不经 perceive,不扰动心境/时钟 | fsm-mood VI 组 6 断言:蒸馏可召回且含近期体验、tick 不变、空体验 distilled=false 仍保底落盘 | | FSM/心境回归测试固化 | 新增 `test/fsm-mood.ts`(26 断言):FSM 七条优先级分支、3s 滞回、poke 90s 宽限(含 poke 抑制 intuitive 休息的行为修正)、心境四级转换、eventTick 语义、压缩蒸馏闭环 | `node --experimental-strip-types test/fsm-mood.ts` 全过 | ### ✅ 第七轮完善(模型故障感知 + 记忆可见性,v2.3.0) | 完善项 | 实现 | 验证方式 | |---|---|---| | 模型请求故障感知通道 | hooks 新增 `agent/request-error` 监听(dsh agent-loop 的 waterfall 事件):限流/网络/5xx/上下文超限等 LLM 故障注入挫折刺激(复用 tool_error 通道,自动归入当前认知模式成败归因,驱动压力上升/反思切换)。要点:① waterfall 只观测、`next()` 透传,绝不拦截 compaction 等插件的恢复决策;② `signal.aborted` 或 `code=ABORTED`(用户主动中止)跳过;③ 退避重试同一故障按 turn 去重,每轮只感知一次 | host 新增 3 项:waterfall 透传 ✔、真实故障产生刺激 ✔、重试/中止零刺激 ✔(两段式 eventTick 度量,容纳故障引发的异步新异性自感知) | | 记忆可见性(面板记忆区) | 内核快照新增 `skillNames`(程序性记忆技能名投影,parseSkillText 解析);面板在意识流下方新增「记忆」区块:紫色技能 chips(它学会了什么)+ 工作记忆最近 4 条要点(它此刻想着什么);语义/情景自传仍走 laap_recall 供模型内省,面板只投影可公开的程序性与工作记忆 | host 快照技能名投影断言 ✔;L3 浏览器实测记忆区渲染、字段下发、console 零报错 ✔ | ### ✅ 第八轮完善(真实语义嵌入接入 + 召回相关性闸门,v2.4.0) | 完善项 | 实现 | 验证方式 | |---|---|---| | 嵌入 A/B 基准(test/embed-ab.ts) | 8 条记忆语料 + 8 条「换说法」查询(查询与目标字面尽量不重合,考语义)+ 1 条无答案控制;同库分别走 hashEmbed(256) 与 Ollama 真实模型,对比 Hit@1/Hit@3/MRR/目标-干扰间隔;库目录用 tmpdir 临时目录测完即删,不碰正式记忆库;模型/维度经 LAAP_AB_MODEL/LAAP_AB_DIM 环境变量切换 | `node --experimental-strip-types test/embed-ab.ts` | | 嵌入单位向量契约修复 | A/B 抓出隐患:zvec 向量索引默认度量为**内积(IP)**,哈希向量自带 L2 归一化故点积=余弦一直正常;openaiEmbed 原先直接返回 API 原始向量,若 provider 未归一化则分数被模长主导、区分度失效。修复:openaiEmbed 出口统一 `l2Normalize`,模块头注释写明「所有嵌入实现必须返回单位向量」契约 | L0/L1/L1.5/L2 全过(哈希路径行为不变) | | 中文模型选型实测结论 | **nomic-embed-text 不适合中文**:英文无关句余弦 0.28 正常,但两句无关中文余弦高达 0.94(中文 OOD 空间坍缩),A/B 中无答案查询 top 分 0.596 与真目标 0.48–0.69 完全重叠,Hit@1 仅 3/8。换 **bge-m3(1024 维,中英双语)** 后:Hit@1 3/8→**7/8**、Hit@3 4/8→**8/8**、MRR 0.515→**0.938**、语义查询平均间隔 -0.066→**+0.124**、无答案控制 top 0.397 低于全部真目标(0.53–0.75,可设阈值拒绝) | 本地 Ollama 实测;代价:召回延迟 1ms→253ms/次(本地 CPU 推理,召回仅发生在工具调用/异步新异性检测,不进心跳热路径) | | 维度确认 + dimensions 参数修复 | 实测 bge-m3 原生 1024 与截断 512/256(Matryoshka)排名指标相同、但推理延迟无收益(模型仍跑全量前向),定版 1024。修复 openaiEmbed 两个真实缺陷:①显式配置截断时**首批请求漏带 dimensions 参数**(首批 1024、后续 512 → 混维写库),改为每批必带;②新增跨批次维度一致性校验,不一致直接抛错而非静默写坏库。ollama provider 默认模型 nomic→**bge-m3** | A/B 脚本三维度复跑;L0/L1/L1.5/L2 全过;删旧库重建后 L3 dsh web 实测对话写入 1024 维索引零维度错误 | | 内省召回相关性闸门 | A/B 数据显示真嵌入下「无答案」查询与真目标间存在分数空档(≤0.40 vs ≥0.53),据此新增 `recallThreshold`(**0.45**):内核新增意识层入口 `recallMemories()`,laap_recall 改走该入口,rawScore 低于闸门的命中判为「(没有记忆浮现)」,让内核能正确回答「不知道/没经历过」。关键边界:闸门**只作用于模型内省入口**;新异性检测(需原始最近邻距离)与技能语义去重(自带 SKILL_DUP_RAW 严阈值)仍走原始 `memory.recall` 不受影响。provider 感知默认值:hash 分数尺度过低(真目标 0.04~0.25)→ 闸门默认关闭(0),ollama/openai → 0.45;env `LAAP_RECALL_THRESHOLD`(=0 可显式关闭)/patch config 可调 | host 新增 3 断言:hash 默认开闸不误杀 ✔、0.99 闸门拦截内省 ✔、原始最近邻通道不受影响 ✔;真实 bge-m3 内核实测:无答案查询拦截为空 ✔、语义换说法 0.710 命中 ✔;L3 真实对话三轮闸门实测(两次无答案拦截 + 一次零词面重叠 0.76 语义命中)✔ | ### ✅ 第九轮完善(语义去重阈值 provider 感知 + 记忆回执保真,v2.4.1) | 完善项 | 实现 | 验证方式 | |---|---|---| | 语义去重阈值 provider 感知 | 排查「同一偏好连写三次」现象:store 去重逻辑本身正常(逐字/近逐字重复 >0.92 会删旧写新,生产库实测三份已折叠为一份),但 0.92 是**哈希嵌入口径**——bge-m3 实测同一事实的不同写法(含模型偏好的扩写长句)相似度只有 **0.79~0.95**,而不同事实(含最易误判的同域近似偏好「函数式风格」)≤**0.72**,存在安全空档。阈值改为可注入:MemoryLayer 构造参数/`LaapKernelOptions.semanticDedupThreshold`/config/env `LAAP_SEMANTIC_DEDUP_THRESHOLD`;provider 感知默认 hash=0.92、ollama/openai=**0.75**(0=自动,显式 0 安全回退默认);情景记忆不参与去重不变 | 新增 test/memory-dedup.ts:确定性合成 4 维向量精确控制余弦,13 断言(0.92 下 0.78 共存/逐字合并、0.75 下同义合并 0.60 异义保留、情景不去重、kernel 透传、0 回退) | | laap_remember 合并回执 | 上述现象的模型侧根因:store 返回的 `deduplicated`(被合并旧 id)在工具层被**丢弃**,模型连收三张「已写入(新 id)」收据便误判「存了三份」。回执改为透出合并事实:「检测到语义重复,已合并旧记忆 mem-xxx:删旧写新,库内仍只有一份」,模型对记忆层状态的认知与真实存储一致 | memory-dedup.ts 桩宿主断言:合并时回执含旧 id ✔、无合并时不含合并措辞 ✔;L0/L1/L1.5/L2 全过 | ### ✅ 第十轮完善(真实自验取证修复:入流过滤/错误保真/帧归档治理/自指闸门/技能碎片,v2.5.0) 契机:用户在真实 dsh web 中长时间自验后,对生产库(338 条文档:episodic 327、semantic 3、procedural 8)与会话日志做取证分析,确认 2 个 P0 缺陷 + 2 个设计缺陷 + 1 个提示词问题。三层架构红线未动(`src/core/` 零 cordis 依赖,策略在 core、provider 默认在 adapter)。 | 完善项 | 实现 | 验证方式 | |---|---|---| | **P0-1 入流过滤:runtime-context 快照不再被当成用户说话** | 取证:主会话 71 条 `user/message` 事件仅 4 条 `source.kind='user'`,其余 66 条来自 `@deepseek-ai/dsh-system-prompt`(runtime-context 快照)、1 条 tool-jobs、compaction 摘要等——它们以 user 角色注入但**不是真人发言**。旧代码无差别 `perceive(user_message)`,导致归属刺激虚高(连接感长期贴顶)、93/327 条情景文档是快照原文、相关度被人工钉在 0.93~0.98、自传蒸馏被污染。hooks 改为仅 `source.kind==='user'` 才感知(dsh e2e 自身也以该字段区分非用户来源消息) | frame-guard.ts 真实宿主断言:真人消息 +1 tick ✔;plugin/缺失/compact 三种注入零刺激 ✔ | | **P0-2 工具错误对象归一化** | 取证:情景库出现 `行动受挫:read_image([object Object])`——dsh 工具错误常为 `{code,message}` 普通对象,`String(err)` 直接丢信息。新增 `normalizeErrorMessage()`:字符串原样、Error 取 message、对象取 `code: message` 并 JSON 兜底,统一压空白+截断;tools/result 感知与技能线索两处共用 | frame-guard.ts 断言:`{code,message}` 透出真实信息无 `[object Object]` ✔、字符串错误原样 ✔、isError 无 error 用兜底文案 ✔ | | **P1-1 帧归档门槛 + episodicCap 容量上界** | 取证:旧实现稳态下**每个意识帧**都经工作环(容量 7)溢出归档为 episodic(salience 0.3),约 80 帧/小时、150~260 字 + 1024 维向量/条且无任何上界。修复:①内核 finalizeFrame 仅对广播含**外部通道**(perception=真人发言/action=工具结局)的帧绑定归档意图,纯内感受帧(心跳低语/助手发言/任务状态/novelty 回灌)入环供当下内省、挤出即弃;②`pushWorking` 归档意图改为入环项**平行数组自带**(旧实现借新帧标记存旧帧文本,外部帧可能被后续内省帧挤丢;顺带修正 frame id 与帧 tick 错位);③新增 `episodicCap`(MemoryLayer opts→kernel→config/env `LAAP_EPISODIC_CAP`,产品默认 **2000**,0=不限;内核独立默认 0),启动时全量重建 episodic 时间序索引并立即 prune,超限 FIFO 淘汰最旧,长程经历仍由语义自传保留 | frame-guard.ts:1 外部帧+12 内省帧仅归档 1 条且文本/id 属于该外部帧 ✔;平行数组 3 组冲刷断言 ✔;cap=3 写 5 留 3 且留新弃旧 ✔、semantic 不被误淘汰 ✔、同库 cap=2 重开立即 prune ✔、cap=0 不限 ✔ | | **P1-2 内省召回分层闸门(治指令自指)** | 取证:用户先问「火星殖民地特色美食」正确回答「没有记忆浮现」;随后**下达查询指令的原文**本身被帧存档,再问同一问题时以 0.55 分越过 0.45 闸门命中了那条指令帧——记忆系统把「刚收到的指令」误认成「过去的经历」。修复:`recallMemories` 分层闸门,episodic 用 `recallThreshold + 0.15`(实测自指 0.54~0.55、真实经历回忆 0.63,0.45 上 0.15 余量居中可分),semantic 仍走基础闸门;新异性检测与技能去重依旧走原始 recall 不受影响 | frame-guard.ts 合成向量:episodic 1.0 过闸 ✔、semantic 0.78 过 0.70 ✔、episodic 0.78 被 0.85 拦截 ✔ | | **P2 技能碎片化提示词治理** | 取证:程序层 8 条技能中 6 条是同一场 SVG 调试任务的不同侧面(静态校验/ASCII 化/分层读取/迭代调试/截图验证/渐层调试),SKILL_DUP_RAW=0.9 合并不了(名字与措辞各异)。收紧静态规则 4 与技能沉淀提醒尾注:**仅跨任务可复用才沉淀**,沉淀前先 `laap_skill(list)` 查同主题、有则 `merge`,禁止为同一工作流的不同侧面各建近义技能,一次性任务技巧/偶发环境问题直接忽略。SKILL_DUP_RAW 保持 0.9(无实测空档前不放松,避免误并不同技能) | L0 文案编译进 bundle;L0/L1/L1.5/L2 全过 | | 取证中非插件问题的旁证 | 网关 402/401008 账户额度错误当晚复发 3 次,感知链路(agent/request-error→挫折刺激)工作正常;身份连续性 tick 1492→2060、autobio 蒸馏、recall 闸门(秋光换说法 0.76 命中、鹈鹕 SVG 0.63 命中、真空回答正确拦截)均确认无病 | 生产库/会话日志只读分析,未改动生产数据 | ### ✅ 第十一轮完善(v2.6.0:v2.5.0 真实自验复测——四项修复确认 + P1-2 方案被实测数据推翻并重构) 契机:v2.5.0 发布后清空生产库,用户完成一轮完整真实任务(愤怒小鸟 HTML 游戏,多回合 debug),对新库(52 条:episodic 51 / semantic 1 / procedural 0)与真实 bge-m3 分数做取证。 **确认生效的四项:** | 项 | 实测证据 | |---|---| | P0-1 入流过滤 | runtime-context 快照污染 **0** 条;46 条 frame 归档经通道解析 = 9 条 `[perception] 用户说:…`(真人发言)+ 37 条 `[action] 行动成功:ask_user_question/write/read/edit…`(真实工具结局),**纯 somatic 帧归档 0**;连接感 0.87 由 9 次真实对话驱动,不再被快照钉顶 | | P0-2 错误保真 | `[object Object]` **0** 条 | | P1-1 帧归档门槛+容量 | 归档率从旧版 ~80 帧/小时(帧帧落库)降为「仅外部通道」;帧内容全是可复述的真实经历(游戏需求、物理 bug 反馈、工具结局),无心跳/助手自语流水账;episodicCap 机制单测覆盖 | | P2 技能碎片 | 一整场编码任务 procedural 增长 **0**(收紧后模型不再为一次性技巧建技能;是否过严待后续观察,暂不调整) | | autobio | 唯一 semantic 文档为 tick 2188 自传,内容干净(无快照原文、无碎片事实) | **P1-2 分层闸门被真实数据证伪 → 重构为「相关门 + 同回合时近窗」:** | | 旧方案(v2.5.0,episodic 门 = recallThreshold+0.15 = 0.60) | 实测问题 | |---|---|---| | 指令逐字自指 | 用户本回合提问原文帧 vs 同句查询 = **0.706** | 照样越过 0.60——分数门拦不住逐字自指 | | 真事换说法回忆 | 「弹弓物理逻辑不对,第二个小鸟不可用」vs 其反馈帧 = **0.600**;「物理引擎不对,小鸟碰不到怪物」= 0.541/0.538 | 全部被 0.60 **误杀**(这正是该浮现的真记忆) | | 无关查询 | 火星美食/年假 = 0.30~0.34 | 正确拦截 | 根因:自指是**时间**问题不是语义问题——危害仅发生在「本回合提问刚被帧存档、模型同回合 laap_recall 同一个问题」;而帧叙事带 4 行状态前缀稀释了相似度,导致「自指/真事」的分数带天然重叠(0.54~0.71),任何静态切点都顾此失彼。第十轮依据的 0.55 vs 0.63 空档是小样本噪声。 新方案([kernel.ts](../src/core/kernel.ts) `recallMemories`): 1. **相关性门回归统一 recallThreshold**(env 0.45;实测无关 ≤0.34 / 真事 ≥0.54,0.45 正居空档),删除 EPISODIC_GATE_MARGIN; 2. **同回合时近窗** `EPISODIC_RECENT_MS = 90s`:recall 时排除 ts 在 90 秒内新存档的 episodic 帧(仅 episodic;semantic 偏好/自传不受限;当下 7 帧在工作记忆环/frameLog 另有入口;recallThreshold=0 时两道闸整体旁路,hash 默认口径不变)。 3. 行为效果:同回合自指 0.71 也不可见;几十分钟后再问同一事,旧帧以「你上次问过」正常浮现——跨回合的自我提问记录本来就是有效记忆。 验证:frame-guard.ts 闸门段重写(21 断言)——本回合帧 1.0 逐字命中被时近窗排除 ✔、跨回合旧帧 0.78 浮现(真事不被误杀)✔、跨回合 0.60 弱相关仍被相关门拦 ✔、semantic 不受时近窗 ✔、闸门关闭整体旁路 ✔;L0 双 tsc / memory-dedup 13 / sim / fsm-mood 26 / host 全绿。 ### ✅ 第十二轮完善(v2.6.0:技能沉淀链路——触发提质 + 提示词去忽略偏置 + merge 契约补齐) 契机:v2.5.0 复测确认四项修复后,用户完整跑了一轮真实编码任务(愤怒小鸟,会话 ac96a7ea,10 轮真人对话),procedural 增长为 0。会话日志取证(多帧 zstd 扫描 + 时间窗过滤):技能提醒注入 **10 次、laap_skill 真实调用 0 次**,模型两次明确回复「一次性技巧,不具备跨任务通用性」。三环归因与修复: **① 触发信号提质([hooks.ts](../src/adapters/cordis/hooks.ts))** 旧 repeat 判据「相邻工具对单轮 2 次」当晚捕到的全是 `read→read`、`edit↔todo_write` 这类所有编码任务的呼吸节奏(模型忽略它们的判断正确);repair 要求「同轮先败后成」,长回合失败隔多步绕回时整晚 0 触发。 - repeat 改为:**完全落在本回合内的 3 元组**(`REPEAT_MIN_GRAM=3`)、序列含 ≥2 种工具(`REPEAT_MIN_DISTINCT=2`,滤 edit/edit/edit 连击)、剔除记账元工具 `todo_write`(`META_TOOLS`),会话内跨轮计数到第 2 次(`REPEAT_TIMES=2`)才提示。 - 实现细节(实现期测试发现并修正):不能对跨回合连续流做滑动窗口——重复工作流的**错位窗口**(read→write→edit 与 edit→read→write)会被重复计数,一个模式最多炸出 3 条近义提醒。故序列窗口按回合切(turn/start 清空 turnSeq),计数与去重保留在会话级。 - repair 放宽为**同会话内**同工具先失败后成功(不再限同轮);失败账 sessionFailures、计数 sessionGrams 均在 session/flush 重置。调参常量集中在 hooks.ts 顶部。 **② 提示词去忽略偏置([prompt.ts](../src/adapters/cordis/prompt.ts))** 旧尾注「只有…才值得沉淀;一次性技巧**直接忽略**并说明原因」构成零成本忽略出口,从旧版「垃圾全收」(6 条 SVG 碎片)矫枉过正成「一条不收」。改为流程式:① 先 `list` 核对已有技能 → ② 可跨任务复用:无同主题 learn、有同主题 merge 追加 → ③ **仅当 list 核对后**确认是一次性技巧才跳过并说明。静态规则 4 同步改写。 **③ merge 契约补齐([kernel.ts](../src/core/kernel.ts) / [tools.ts](../src/adapters/cordis/tools.ts) / [service.ts](../src/adapters/cordis/service.ts))** P2 提示词两处指示 `action=merge`,但工具 enum 只有 learn/list——一旦模型照做即被参数校验拒绝(当晚未爆雷)。: - core 抽出 `appendToSkill()` 私有方法(learnSkill/mergeSkill 共用同一合并口径:按 normStep 去重、旧在前新在后、MAX_SKILL_STEPS=12 封顶);新增公开 `mergeSkill(name, howto)`:**仅归一化精确同名**匹配(不做 SKILL_DUP_RAW 语义近邻——显式合并必须可预测,防误并),找不到返回 `not_found` 且不创建。 - adapter 工具 enum 扩为 learn/list/merge,三态回执(updated/unchanged/not_found 引导「先 list 核对或改用 learn」),service 透传,描述文本三动作语义。 验证:新增 test/skill-learning.ts(**15 断言**)——mergeSkill 四态、旧 bigram/单工具连击/元工具零提示、跨轮 3 元组恰报 1 条且会话去重、repair 跨轮与同轮双路径、flush 清零、schema enum、merge 回执与零写入、learn→merge→list 不膨胀;L0 双 tsc + frame-guard 21 / memory-dedup 13 / sim / fsm-mood 26 / host 全绿。行为级效果(模型是否按 list→learn/merge 行动)需下一轮真实对话验证;若 3 元组仍偏严(零提醒),按方案风险预案把常量降为「跨轮 bigram 且两种不同工具」即可(一行改动)。 ### 📋 剩余路线(下一轮候选) 1. ~~联网实测 openaiEmbed~~ **已完成(第八轮)**:本地 Ollama 实测,中文场景推荐 `bge-m3`(`ollama pull bge-m3`,.env 设 `LAAP_EMBED_PROVIDER=ollama`、`LAAP_EMBED_BASE_URL=http://localhost:11434/v1`、`LAAP_EMBED_MODEL=bge-m3`、`LAAP_EMBED_DIMENSION=1024`、`LAAP_RECALL_THRESHOLD=0.45`,**切换后必须删旧 zvec 库目录重建,consciousness.json 不受影响**);nomic-embed-text 仅英文可用,中文禁用。本机旧库已删除并以 1024 维重建,L3 对话写入与召回闸门均实测通过 2. **dsh-scope 多 Agent 隔离**:经调研 dsh 模型为「一进程 = 一 profile = 一 agent」,多 agent 天然按进程隔离;进程内多 session 共享连续自我是意识内核的预期行为(按 session 拆实例反而碎片化人格)。**结论:暂缓**,若未来出现单进程多 agent 形态再按 scope 键分实例 3. **第二平台适配器**:需要独立 Node 服务/其他 Agent 框架时,在 `src/adapters/` 下新增目录实现 PlatformAdapter(内核不动) 4. **npm 发布**:`npm publish` + `gh repo edit --add-topic dsh-plugin`(发布前检查包名占用与 files 字段) ## 旧版规划存档 1. **真实嵌入模型接入**:实现 `EmbedFn` 调用 dsh `ctx.llm` 侧 embedding(或外部 API),替换哈希袋;召回质量做 A/B。 2. **程序记忆层**:技能库沉淀进 zvec(`kind='procedural'`),配合 `laap_recall` 供模式复用。 3. **L3 递归自我审视**:`laap_reflect` 增加「对反思的反思」——用 `modeEfficacy()` 数据评估模式切换本身是否有效。 4. **L4 认知策略库**:把 `MetacognitiveMonitor.modeEfficacy()` 统计回注 selectMode 规则(用胜率替代启发式阈值)。 5. **意识状态 UI 面板**(双面插件):`ctx.rpc.expose` 意识帧序列 + `ctx.slots.register('sidebar-bottom')` 渲染五维雷达图与意识流时间线。 6. **自我模型整合**:定期(compaction 钩子)把高显著性情景记忆蒸馏成 semantic 层「自传」。 7. **配置 Schema 化**:把 env 配置迁移到 `LaapService.Config`(schemastery z),支持 cordis patch 直接配置。 8. **发布**:npm publish + `gh repo edit --add-topic dsh-plugin`,README 写清前提(本地盘路径)与限制(MVP 语义精度)。 ## 9. 已知限制(诚实清单) - 意识「动力学」是功能主义最小实现:连续时间被离散化为 tick(事件驱动 + 30s 心跳),非真 ODE 求解器。 - 哈希袋嵌入的语义分辨力有限,短文本近似查询可能排序不稳定(实测召回 top-k 语义方向正确但分数偏低,属正常)。 - 自我报告的意识文本("我感到好奇")是**状态向量的叙事投影**,是工程化内感受接口,不是对现象意识的声称。 - 多 Agent scope 隔离:当前内核实例为 dsh 进程全局(每进程一个 LaapKernel)。经调研 dsh 为「一进程 = 一 profile = 一 agent」模型,多 agent 天然按进程隔离;进程内多会话共享连续自我是预期行为,故暂不按 session 拆分(详见第 8 节剩余路线)。 - 浏览器半区只能渲染内核快照(RPC 拉取 JSON):zvec 是原生 mmap 插件,内核本身不进浏览器;跨宿主复用目前限于 Node 兼容运行时。