@yottameta/yotta-memory 0.13.2 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: yotta-memory
3
- description: 元忆 —— 有权限边界的文件式智能体记忆。文件式、零依赖、可 diff/可回滚:让任何 AI 智能体活过会话,开工 recall 恢复上下文、重要信息 remember 落盘、收工归档。类型体系 FACT(公共共享)/ PREF / BOUND / COMMIT(私密隔离)。触发:记住、别忘了、记一笔、记忆、remember、recall、跨会话、上次说到、续测、交接、归档、记忆盘、共享记忆、局域网记忆、画像、开工上下文、记忆守则、profile、context、越用越懂、语义检索、反馈、维护、蒸馏、feedback、maintain、distill、explain、自我学习、自我进化、自我提升、查看平台分页、recall 候选预过滤、任务相关记忆、--focus、--embedding、压缩遗忘、consolidate、周期摘要、自动合并、分类型衰减、回滚、备份、backup、防误删、doctor、事务快照
4
- version: 0.13.2
3
+ description: 元忆 —— 有权限边界的文件式智能体记忆。文件式、零依赖、可 diff/可回滚:让任何 AI 智能体活过会话,开工 recall 恢复上下文、重要信息 remember 落盘、收工归档。类型体系 FACT(公共共享)/ PREF / BOUND / COMMIT(私密隔离)。触发:记住、别忘了、记一笔、记忆、remember、recall、跨会话、上次说到、续测、交接、归档、记忆盘、共享记忆、局域网记忆、画像、开工上下文、长期理解摘要、近期走廊、会话闭环、记忆守则、profile、context、越用越懂、语义检索、反馈、维护、蒸馏、feedback、maintain、distill、explain、自我学习、自我进化、自我提升、查看平台分页、recall 候选预过滤、任务相关记忆、--focus、--embedding、压缩遗忘、consolidate、周期摘要、自动合并、分类型衰减、回滚、备份、backup、防误删、doctor、事务快照
4
+ version: 0.16.1
5
5
  license: MIT
6
6
  ---
7
7
 
@@ -15,7 +15,11 @@ license: MIT
15
15
  - **零依赖**:无 daemon / 无数据库 / 无向量库,Node.js 自带即可运行。
16
16
  - **类型体系**:FACT(事实,公共共享)/ PREF(偏好,私密)/ BOUND(边界,私密)/ COMMIT(承诺,私密)。
17
17
  - **双级存储**:用户级 `~/.yottamemory/`(跨项目)+ 项目级 `.yottamemory/`(随项目共享)。
18
- - **越用越懂**:`profile` 聚合用户画像(引擎零推断,只归组原文)+ `context` 一键生成开工上下文包(身份 + 画像 + 近期记忆 + 边界 + 承诺)+ SKILL「记忆守则」规则层;只注入规则与机制,不注入人格数据(出厂零数据)。
18
+ - **越用越懂(v0.14.0)**:`context` 一键生成开工上下文包——长期理解摘要优先(复用 `consolidate` 产物)+ 用户画像(引擎零推断,只归组原文)+ 近期走廊(按更新时间取样)+ 近期高价值补位 + 边界 + 承诺 + 会话闭环契约;SKILL「记忆守则」规则层只注入规则与机制,不注入人格数据(出厂零数据)。
19
+ - **MCP 工具分组(v0.15.0)**:`serve --tools core|full` 控制工具暴露面。`core` 固定为 `context / recall / search / remember`,适合常驻;`full` 为现有 16 工具,适合维护与诊断。未指定时默认 `full`,保持现有配置兼容。
20
+ - **身份模型(v0.16.0)**:身份不再从环境变量读取。HTTP / 远程 MCP 只认请求头 `Authorization` + `X-Agent-Id` + `X-Agent-Key`;stdio MCP 只认显式参数 `--agent-id` + `--agent-key-file`;CLI 用 `--agent` + `--agent-key` / `--agent-key-file`。旧身份 env 会在 MCP 启动时被明确拒绝。
21
+ - **运行时稳定入口(v0.16.0 M2)**:`runtime install --from-current` 把当前引擎安装到 `<runtimeRoot>/versions/<version>/` 并创建 `<runtimeRoot>/current` 稳定指针;`runtime use <version>` 原子切换、`runtime rollback` 回滚、`runtime status` 查看漂移。stdio MCP、`lan enable` 与备份调度只指向 `<runtimeRoot>/current/bin/yotta-memory.js`,不写版本目录。
22
+ - **运行时诊断与握手(v0.16.0 M3)**:`doctor --runtime` 检查 CLI / current / runtime.json / MCP 配置 / 运行中 server / 技能副本 / 身份模式漂移,逐项给出实际版本、期望版本、修复命令和是否阻断;MCP `initialize` / `server/discover` 的 `serverInfo` 返回 `runtimePath` / `identityMode` / `toolProfile`。
19
23
  - **自我学习 / 自我进化 / 自我提升(v0.8.0)**:`recall` 语义检索(同义词 / 拼音 / 字段加权 / 模糊匹配,零依赖);`feedback` 显式使用反馈闭环(useful / useless → weight / confidence / feedback_net 演化,越用越懂);`maintain` 规则层自组织(统一效用分 + 年龄自动归档 / 遗忘候选 / 去重,默认 dry-run,immutable / BOUND 豁免);`distill` 心理日志蒸馏(统计摘要 / 主题画像 / 知识地图,可选 `--model` 外部模型增强);`explain` 查看单条记忆效用分项。
20
24
  - **召回质量与上下文选择(v0.9.0)**:`recall` 支持可选本地 embedding 插件(`--embedding <command>` / `config set embedding_cmd <command>`);`context --focus <关键词>` 生成任务感知上下文;`--explain` 输出选择 trace,无插件时自动降级为词法检索。
21
25
  - **压缩遗忘(v0.10.0)**:记忆库长期可用不膨胀——`consolidate` 周期摘要压缩(把超龄 + 低效用 + 长期闲置的同主题旧记忆归纳成**带溯源**的摘要,原文整体进 `.archive/`,`--undo` 一键回滚);`maintain --dedup` 近重复**自动合并**(置信度分档,`--apply` 批量执行高置信组);效用分时效改为**分类型衰减**(FACT 慢 / PREF 中 / COMMIT 任务类快 / BOUND 不衰减);`consolidate --batches` 批次审计可查。
@@ -39,11 +43,19 @@ AI 更新流程:先运行 `yotta-memory --version` 记录当前引擎版本;
39
43
 
40
44
  ## 核心流程
41
45
 
42
- 1. **开工定向**:先按「开工第一步:确认记忆位置 + 智能体身份」检测记忆库与身份,再运行 `yotta-memory context`(主注入:身份 + 用户画像 + 近期记忆 + 边界 + 承诺)恢复上下文,需要细节再 `yotta-memory recall <关键词>`;若有明确任务关键词,用 `context --focus <关键词>` 获得任务相关记忆;项目级记忆优先,其次用户级。
43
- 2. **进行中落盘**:重要信息立即 `yotta-memory remember <type> <subject> <statement>`,不攒到收工。
44
- 3. **收工归档**:写会话小结(COMMIT / 笔记);旧记录定期 `yotta-memory maintain --apply`(单条低效用归档)+ 记忆多了周期 `yotta-memory consolidate --apply`(同主题压缩成带溯源摘要,`--undo` 可回滚)。
46
+ 1. **开工定向**:先按「开工第一步:确认记忆位置 + 智能体身份」检测记忆库与身份,再运行 `yotta-memory context`(主注入:身份 + 长期理解摘要 + 用户画像 + 近期走廊 + 近期高价值 + 边界 + 承诺 + 会话闭环契约)恢复上下文,需要细节再 `yotta-memory recall <关键词>`;若有明确任务关键词,用 `context --focus <关键词>` 获得任务相关记忆;项目级记忆优先,其次用户级。
47
+ 2. **进行中落盘**:出现事实 / 偏好 / 边界 / 纠正 / 承诺信号时立即 `yotta-memory remember <type> <subject> <statement> --verify`,不攒到收工。
48
+ 3. **收工归档**:收工前复盘本轮,检查是否留下 COMMIT / 会话小结;有关键结论但未落盘时补写并 `recall` 回读,无长期价值不硬凑。旧记录定期 `yotta-memory maintain --apply`(单条低效用归档)+ 记忆多了周期 `yotta-memory consolidate --apply`(同主题压缩成带溯源摘要,`--undo` 可回滚)。
45
49
  4. **多智能体纪律**:FACT 写入公共区,PREF / BOUND / COMMIT 只写本智能体私密区;不读取其他智能体私密区。**一切读写一律走 `yotta-memory` CLI / MCP 工具**——禁止用 shell(`Get-ChildItem` / `Get-Content` / `cat` / `ls` / `type` 等)直接读或改记忆库目录下的 `.md` / `index.json` / `tokens.json` / `agents.json` / `grants.json` 等文件,否则会绕过权限边界、读到别的智能体私密内容。
46
50
 
51
+ ## 会话闭环契约(v0.14.0,AI 必做)
52
+
53
+ `context` 输出末尾会固定注入这段契约;执行时按三步走:
54
+
55
+ 1. **开工已加载**:身份、长期摘要、画像、近期走廊、边界与承诺以 `context` 输出为准;需要细节再用 `recall` 下钻,不凭印象补全。
56
+ 2. **进行中立即写**:出现事实 / 偏好 / 边界 / 纠正 / 承诺信号时,立即 `remember <type> <subject> <statement> --verify`;不攒到收工,不把一次性闲聊当记忆。
57
+ 3. **收工前复盘**:复盘本轮是否留下 COMMIT / 会话小结;有关键结论但未落盘时补写并 `recall` 回读;没有长期价值就不硬凑。
58
+
47
59
  ## 可靠性基线(v0.12.0 / v0.12.2)
48
60
 
49
61
  **目的**:防止初始化覆盖、删除不可逆、备份缺失再次造成记忆库丢失。
@@ -178,7 +190,7 @@ yotta-memory doctor --json
178
190
 
179
191
  1. 开工:whoami → iam(身份)→ `context`(主注入)→ `recall`(关键词补细节)。
180
192
  2. 进行中:增量写,触发信号即记;`remember --verify` 写后回读确认落盘。
181
- 3. 收工:留交接锚点(COMMIT / 笔记),定期 `archive`。
193
+ 3. 收工:先复盘本轮并检查关键结论是否落盘,再留交接锚点(COMMIT / 笔记);定期 `archive`。
182
194
 
183
195
  ### 6. 写后验证
184
196
 
@@ -218,7 +230,7 @@ yotta-memory doctor --json
218
230
  - 输出 `memory_home: <目录>`(已显式设置)→ 直接用该位置。
219
231
  - 输出 `memory_home: (未设置,默认 ~/.yottamemory)` → 🔒 征得同意后引导设置:问用户用默认还是指定目录(项目级 `<repo>/.yottamemory`、记忆盘等),确认后 AI 执行 `yotta-memory config set memory_home <目录>`,回读 `config get` 验证。
220
232
  2. **已有记忆**:目标目录已存在 `facts/` 等子目录或 `index.json` → 直接 recall;全新目录 → 按「便携记忆盘模式 §0.3」初始化。
221
- 3. **私密区已加密(存在 `keys/`)**:先 `yotta-memory key list` 确认本智能体是否有 agent binding;没有 → 告知用户由用户自己执行 `yotta-memory view` → 浏览器打开平台 → 输入主口令 → 点「授权」并保存只展示一次的 `agent_key`。用户授权后服务端会写 `keys/pending/<id>.key`;AI 在新会话执行 `yotta-memory key status <id> --to <AI_HOME>`,有 pending 就执行 `yotta-memory key claim <id> --to <AI_HOME>`,落到 `<AI_HOME>/.yotta-memory-agent-key` 后再使用 `--agent-key-file`。**升级后首次调用元忆 / 重启会话时**,若输出 `[YTM_MIGRATION_REQUIRED]`,必须主动把 marker、受影响 agent 和处理步骤转达给用户。**AI 不得代替用户执行 `migrate` / `key bind` 迁移**,只负责提醒和讲解(marker 只列仍有私密数据、未绑定的 agent;仅有 legacy cache、无迁移数据的 owner 会单独提示,不进入迁移清单;公共 FACT 不受影响)。
233
+ 3. **私密区已加密(存在 `keys/`)**:先 `yotta-memory key list` 确认本智能体是否有 agent binding;没有 → 告知用户由用户自己执行 `yotta-memory view` → 浏览器打开平台 → 输入主口令 → 点「授权」并保存只展示一次的 `agent_key`。用户授权后服务端会写 `keys/pending/<id>.key`;AI 在新会话执行 `yotta-memory key status <id>`(需要时显式加 `--to <AI_HOME>` 或 `--agent-key-file <文件>`;默认发现规则见下),有 pending 就执行 `yotta-memory key claim <id>`,落到 `<AI_HOME>/.yotta-memory-agent-key` 后再使用 `--agent-key-file`。**升级后首次调用元忆 / 重启会话时**,若输出 `[YTM_MIGRATION_REQUIRED]`,必须主动把 marker、受影响 agent 和处理步骤转达给用户。**AI 不得代替用户执行 `migrate` / `key bind` 迁移**,只负责提醒和讲解(marker 只列仍有私密数据、未绑定的 agent;仅有 legacy cache、无迁移数据的 owner 会单独提示,不进入迁移清单;公共 FACT 不受影响)。
222
234
 
223
235
  **B. 确认本智能体唯一身份(强制,写私密记忆前必做)**:
224
236
 
@@ -231,7 +243,7 @@ yotta-memory doctor --json
231
243
  - 回读:`yotta-memory whoami` 显示「已登记 + 自我档案」。
232
244
  3. **自我档案校验**:`yotta-memory recall "自我接入档案"`(本智能体)能读回字段才算就绪:
233
245
  `agent_id / host / memory_home / mcp_mode(stdio|http)/ engine_url(仅远端)/ token(仅远端;本机不存 token)`,可扩展 `agent_name / user_name / relationship`(`iam --name/--user/--relationship` 写入)。
234
- 4. **本机多智能体(v0.13.2 安全模型)**:owner ID 不是身份认证。每个 AI 必须同时持有自己的 `agent_key`,并在 MCP 配置里注入 `YOTTA_AGENT_ID` + `YOTTA_MEMORY_AGENT_KEY` + `YOTTA_MEMORY_TRUST_ENV_AGENT=1`;CLI 直连用 `--agent <id> --agent-key <key>` 或 `--agent-key-file <文件>`。没有 agent_key 时,私密读写一律 fail-closed;禁止使用用户级 / 机器级 `YOTTA_AGENT_ID` fallback。
246
+ 4. **本机多智能体(v0.16.0 安全模型)**:owner ID 不是身份认证。每个 AI 必须同时持有自己的 `agent_key`。stdio MCP 用显式参数 `--agent-id <id> --agent-key-file <宿主key文件>`;HTTP MCP 用请求头 `X-Agent-Id` + `X-Agent-Key`;CLI 直连用 `--agent <id> --agent-key-file <文件>`。没有 agent_key 时,私密读写一律 fail-closed;身份不再读取 `YOTTA_AGENT_ID` / `YOTTA_MEMORY_AGENT_KEY` / `YOTTA_MEMORY_TRUST_ENV_AGENT`,旧配置启动即拒绝。
235
247
 
236
248
  **C. 身份红线(强制)**:
237
249
 
@@ -240,7 +252,7 @@ yotta-memory doctor --json
240
252
 
241
253
  **D. 开工主注入(context)**:
242
254
 
243
- - 身份就绪后运行 `yotta-memory context [--limit 10] [--budget 1800]`(远端经 MCP 用 `recall` 补细节):一键拿到「身份 + 多智能体铁律 + 用户画像摘要 + 近期记忆 + 边界提醒 + 承诺 / 锚点」;`--budget` 控制近期记忆字符预算(token 恒定,不随记忆膨胀)。
255
+ - 身份就绪后运行 `yotta-memory context [--limit 10] [--budget 1800]`(远端经 MCP 用 `recall` 补细节):一键拿到「身份 + 多智能体铁律 + 用户画像摘要 + 长期理解摘要 + 近期走廊 + 近期高价值记忆 + 边界提醒 + 承诺 / 锚点 + 会话闭环契约」;`--budget` 控制动态记忆字符预算,长期摘要 / 身份 / 铁律 / 画像 / 边界 / 承诺与闭环契约必保(token 恒定,不随记忆膨胀)。
244
256
  - 无画像时 context 自动生成一次或降级输出其余段,不报错。
245
257
  - 需要深挖旧事再 `recall <关键词>`。
246
258
  - 私密记忆(PREF / BOUND / COMMIT)**必须有 owner**:未声明身份写私密会被引擎拒绝(公共 FACT 不受影响)。
@@ -256,23 +268,24 @@ yotta-memory doctor --json
256
268
  | `yotta-memory migrate` | 明文私密区 → 密文迁移(**由用户执行**;需主口令;迁移后打印恢复钥匙;不写明文授权缓存,授权由用户在 `view` 平台完成)|
257
269
  | `yotta-memory view [--port 8788] [--host 127.0.0.1]` | 用户查看平台(本机 Web:口令解锁浏览 / 搜索 / 导出全部 AI 记忆 + 授权 / 吊销 AI + 重设口令 + 显示恢复钥匙)|
258
270
  | `yotta-memory reset-password [--password <当前> | --recovery-key <钥匙>] [--new-password <新>]` | 重设主口令(忘口令用恢复钥匙)|
259
- | `yotta-memory key list / bind <id> / rotate <id> / claim <id> --to <AI_HOME> / status <id> / revoke <id>` | 管理 agent_key binding(**bind/rotate 由用户执行**,需主口令或恢复钥匙;claim/status 由 AI 读取 pending 并落到宿主目录;revoke 立即吊销该 AI 解密能力,旧 key 随即校验失败;`key list` 输出 `[YTM_MIGRATION_REQUIRED]` 时提醒用户走 `view` 重新授权)|
271
+ | `yotta-memory key list / bind <id> / rotate <id> / claim <id> [--to <AI_HOME> | --agent-key-file <文件>] / status <id> [--to <AI_HOME> | --agent-key-file <文件>] / revoke <id>` | 管理 agent_key binding(**bind/rotate 由用户执行**,需主口令或恢复钥匙;claim/status 由 AI 读取 pending 并落到宿主目录,按同一 AI_HOME 发现规则;revoke 立即吊销该 AI 解密能力,旧 key 随即校验失败;`key list` 输出 `[YTM_MIGRATION_REQUIRED]` 时提醒用户走 `view` 重新授权)|
260
272
  | `yotta-memory remember <type> <subject> <statement> [--owner <id>] [--source <来源>] [--weight <0..>] [--verify] [--no-hint]` | 写入(同 subject+statement 自动更新;--owner 标注归属;--source 记录来源;--weight 重要性权重默认 1.0、去重取 max;--verify 写后回读校验;--no-hint 关闭类型启发式提示)|
261
273
  | `yotta-memory recall [关键词] [--type T] [--limit N] [--agent <id>] [--owner <id>] [--all] [--unsafe] [--explain] [--semantic] [--embedding <command>] [--embedding-timeout N]` | 检索(v0.8.0 默认语义检索:同义词 / 拼音全拼+首字母 / 字段加权 / 模糊匹配 + 效用分融合排序;v0.9.0 支持可选本地 embedding 插件,失败自动降级;`--explain` 显示命中理由与效用分项;`--semantic` 显式开启;读取分区过滤;越界读其它智能体私密默认拒绝,需 grant / identity=user / `--unsafe`;`--agent <其它>` 只作身份声明/展示,不授予跨读——读他人私密同样要授权;项目级优先)|
262
274
  | `yotta-memory profile [--owner <id>]` | 生成用户画像(聚合 `private/<owner>/` 原文,零推断,写 `profile.md`;跨 owner 默认拒绝)|
263
- | `yotta-memory context [--limit N] [--owner <id>] [--budget N] [--focus <关键词>] [--explain] [--embedding <command>]` | 生成开工上下文包(身份 + 多智能体铁律 + 画像 + 任务相关记忆 + 近期记忆 + 边界 + 承诺;--budget 字符预算,0=不限;--explain 输出 included / dropped 选择 trace)|
275
+ | `yotta-memory context [--limit N] [--owner <id>] [--budget N] [--focus <关键词>] [--explain] [--embedding <command>]` | 生成开工上下文包(身份 + 多智能体铁律 + 画像 + 长期摘要 + 任务相关记忆 + 近期走廊 + 近期高价值 + 边界 + 承诺 + 会话闭环契约;--budget 控制动态记忆字符预算,0=不限;--explain 输出 included / dropped 选择 trace)|
264
276
  | `yotta-memory forget <文件>` | 移入 `.trash/<时间>/` 回收区并写审计(v0.12.0;不再物理删除)|
265
277
  | `yotta-memory backup volumes / setup --dir <目录> / status / ensure-daily / schedule enable|disable|status` | 每日自动备份(v0.12.0;只展示实际枚举的异卷、用户确认一次位置后默认每日执行,Windows Task Scheduler / systemd timer / launchd 调度,`serve` 补跑)|
266
278
  | `yotta-memory backup create / list / doctor / restore <ID> --to <目录> / drill [<ID>]` | 备份、恢复与恢复演练(v0.12.0;独立盘校验、SHA-256 清单、排除 `keys/cache`、恢复默认只写新目录;drill 验证 manifest / 索引 / 测试私密解密)|
267
- | `yotta-memory doctor [--json]` | 开工可靠性检查(v0.12.2;根目录 / 密钥库 / 索引 / 身份 / 最近备份;严重异常时锁定破坏性写入)|
279
+ | `yotta-memory doctor [--json] [--runtime] [--mcp-config <文件>] [--skill-dir <目录>]` | 开工可靠性检查(v0.12.2;根目录 / 密钥库 / 索引 / 身份 / 最近备份;严重异常时锁定破坏性写入);加 `--runtime` 检查 CLI / current / MCP 配置 / 运行中 server / 技能副本漂移 |
268
280
  | `yotta-memory archive [--days 180] [--threshold 0.35]` | 归档旧记忆(v0.8.0 统一效用分 + v0.10.0 分类型衰减;immutable / BOUND 豁免;私密归档入 `.archive/private/<owner>/<type>/`;阈值默认读 config `maintain_archived_utility`)|
269
281
  | `yotta-memory reindex` | 重建索引(手动改 .md 后校正)|
270
282
  | `yotta-memory export [--out f.json]` / `import <f.json>` | 导出 / 导入 |
271
283
  | `yotta-memory config set memory_home <目录>` / `config set backup_dir <目录>` / `config get` | 持久记住 / 查看记忆库位置与备份目录(`~/.yottamemory/config.json`)|
272
- | `yotta-memory whoami --agent <id> [--agent-key <key>]` | 查看当前显式身份与登记状态;环境身份仅在 MCP 信任标记下有效 |
284
+ | `yotta-memory whoami --agent <id> [--agent-key <key>]` | 查看当前显式身份与登记状态;身份不从环境变量读取 |
273
285
  | `yotta-memory iam <id> [--name <显示名>] [--user <用户名>] [--relationship <关系>] [--force]` | 登记本智能体唯一身份并自动落自我档案(`agents.json`,ID 必须唯一;可选扩展显示名 / 用户 / 关系)|
274
286
  | `yotta-memory token new --agent <id> [--force]` / `token list` / `token revoke --agent <id>` | 每智能体访问 token:生成 / 列出 / 吊销(登记 `<记忆库>/.server/tokens.json`;同 ID 已被其它来源占用需 `--force` 覆盖,防不同智能体合流)|
275
- | `yotta-memory serve [--host 0.0.0.0] [--port 8787] [--no-auth] [--stdio]` | 启动 MCP 记忆引擎(streamable HTTP 局域网 / --stdio 本地零进程模式;Bearer token + X-Agent-Id + X-Agent-Key 鉴权)|
287
+ | `yotta-memory serve [--host 0.0.0.0] [--port 8787] [--no-auth] [--stdio] [--tools core|full]` | 启动 MCP 记忆引擎(streamable HTTP 局域网 / --stdio 本地零进程模式;Bearer token + X-Agent-Id + X-Agent-Key 鉴权;工具分组默认 full)|
288
+ | `yotta-memory runtime list / install <tarball|版本> [--from-current] [--force] / use <版本> [--restart] / rollback [--restart] / status` | 运行时稳定入口(runtime.json + versions + current;安装 / 切换 / 回滚 / 查看漂移;`--restart` 尝试重启受管 server,失败自动切回旧版本);漂移诊断用 `doctor --runtime` |
276
289
  | `yotta-memory lan enable [--onstart] / disable / status` | 开机自启管理(Windows:计划任务,默认 ONLOGON、--onstart 开机即启需管理员,非管理员自动降级用户级 Startup 静默自启,v0.6.3 起 VBS 自愈不弹 80070002;Linux:systemd 用户单元,不可用时自动降级用户 crontab @reboot)|
277
290
  | `yotta-memory feedback <文件|主题> --useful|--useless [--reason <原因>] [--undo]` | 显式使用反馈(v0.8.0 自我学习闭环:useful → weight×1.2 / useless → weight×0.8,confidence / feedback_net 同步演化;`--undo` 回滚最近一次;审计写 `.archive/feedback-<日期>.jsonl`)|
278
291
  | `yotta-memory maintain [--dry-run] [--apply] [--purge] [--threshold N] [--age N] [--dedup] [--dedup --apply] [--merge A,B]` | 记忆自组织(v0.8.0 自我进化 + v0.10.0 自动合并):默认 dry-run 预览;`--apply` 执行归档(immutable / BOUND 豁免;私密归档入 `.archive/private/<owner>/<type>/`),`--purge` 才真删遗忘候选;`--dedup` 查重并给**置信度分档**(≥0.85 高置信 / 0.65–0.85 建议手动 / 其余忽略),`--dedup --apply` 自动合并同归属高置信组(写批次审计可回滚;与归档互斥,不误归档);`--merge A,B` 手动合并两条;审计写 `.archive/audit-<日期>.jsonl`)|
@@ -319,11 +332,11 @@ yotta-memory doctor --json
319
332
  ### 流程
320
333
  1. **建加密库**:`yotta-memory init --encrypt`(新建默认加密)→ 设主口令 → 抄下恢复钥匙离线保存。
321
334
  2. **老库迁移**:由用户执行 `yotta-memory migrate`(需主口令)→ 明文私密逐文件加密后删除明文 → 打印恢复钥匙。迁移不写明文授权缓存;每个 AI 的重新授权由用户自己在 `yotta-memory view` 平台完成并自行备份弹窗 `agent_key`;AI 随后用 `key status` / `key claim` 领取(AI 只提醒授权,不代执行 `migrate` / `key bind`)。
322
- 3. **AI 读写自己的私密(v0.13.2)**:用户侧完成一次 `yotta-memory view` 授权(或用户自行执行 `yotta-memory key bind <id>`),生成只展示一次的 `agent_key`,并写入 `keys/bindings/<id>.key.agent` 与临时 `keys/pending/<id>.key`。AI 新会话用 `key status` / `key claim` 将 pending 落到 `<AI_HOME>/.yotta-memory-agent-key`,之后 CLI 用 `--agent <id> --agent-key-file <宿主key文件>`;MCP 注入 `YOTTA_AGENT_ID` + `YOTTA_MEMORY_AGENT_KEY` + `YOTTA_MEMORY_TRUST_ENV_AGENT=1`。owner ID 单独存在时不能解密私密;legacy `keys/cache/<id>.key` 不再加载。
335
+ 3. **AI 读写自己的私密(v0.16.0)**:用户侧完成一次 `yotta-memory view` 授权(或用户自行执行 `yotta-memory key bind <id>`),生成只展示一次的 `agent_key`,并写入 `keys/bindings/<id>.key.agent` 与临时 `keys/pending/<id>.key`。AI 新会话用 `key status` / `key claim` 将 pending 落到 `<AI_HOME>/.yotta-memory-agent-key`,之后 CLI 用 `--agent <id> --agent-key-file <宿主key文件>`;stdio MCP 用 `--agent-id <id> --agent-key-file <宿主key文件>`;HTTP MCP 用 `X-Agent-Id` + `X-Agent-Key` 请求头。owner ID 单独存在时不能解密私密;legacy `keys/cache/<id>.key` 不再加载。
323
336
  4. **用户查看全部 AI 记忆**:`yotta-memory view` → 输口令 → 浏览 / 搜索 / 导出全部(含各 AI 私密明文,仅用户可见)。口令只在本地内存派生,不落盘、不发远端;默认仅 127.0.0.1,远程需 `--host` 显式开启。
324
337
  5. **口令管理**:`yotta-memory reset-password`(当前口令或恢复钥匙);`key revoke <id>` 立即吊销某 AI 的 agent binding(该 AI 随即失去解密能力)。`view` 平台的「授权」只对未绑定 agent 生成新 key;已绑定的 agent 需先「吊销」再授权,避免误打断在用的 agent_key。
325
338
 
326
- ## agent_key 本地领取与恢复流程(v0.13.2,AI 必读)
339
+ ## agent_key 本地领取与恢复流程(v0.14.0,AI 必读)
327
340
 
328
341
  > 目标:用户只负责在 `view` 平台授权和备份弹窗 key;AI 负责把待领取 key 落到自己的宿主目录,并在新会话稳定读取。模型上下文不需要出现 key 明文。
329
342
 
@@ -340,15 +353,24 @@ yotta-memory doctor --json
340
353
  AI 在开工身份检查后执行:
341
354
 
342
355
  ```bash
343
- yotta-memory key status <agent_id> --to <AI_HOME>
356
+ yotta-memory key status <agent_id>
344
357
  ```
345
358
 
346
359
  若输出 `pending: yes`,执行:
347
360
 
348
361
  ```bash
349
- yotta-memory key claim <agent_id> --to <AI_HOME>
362
+ yotta-memory key claim <agent_id>
350
363
  ```
351
364
 
365
+ `AI_HOME` 解析优先级由 `claim` / `status` 共用:
366
+
367
+ 1. 显式 `--to <目录>` 或 `--agent-key-file <文件>`;
368
+ 2. `YOTTA_MEMORY_AGENT_HOME` 或 `YOTTA_MEMORY_AGENT_KEY_FILE`;
369
+ 3. 宿主默认:Codex 使用 `$CODEX_HOME`(未设置时 `~/.codex`)、OpenCode 使用 `$XDG_CONFIG_HOME/opencode`、其他宿主使用 `~/.<agent_id>`;
370
+ 4. 文件名统一为 `.yotta-memory-agent-key`。
371
+
372
+ `key status` 即使目标文件不存在也会输出 `checked: <实际检查路径>` 与 `discovery: <命中的发现规则>`,不要仅凭 `host_key: missing` 重复 `claim`。
373
+
352
374
  `claim` 会:
353
375
 
354
376
  1. 读取 `keys/pending/<agent_id>.key`
@@ -363,7 +385,7 @@ yotta-memory key claim <agent_id> --to <AI_HOME>
363
385
  yotta-memory context --agent <agent_id> --agent-key-file <AI_HOME>/.yotta-memory-agent-key
364
386
  ```
365
387
 
366
- MCP 模式由宿主把宿主 key 文件内容注入 `YOTTA_MEMORY_AGENT_KEY`,并设置 `YOTTA_AGENT_ID` + `YOTTA_MEMORY_TRUST_ENV_AGENT=1`。
388
+ MCP 模式由宿主显式声明身份:stdio 用 `--agent-id <agent_id> --agent-key-file <AI_HOME>/.yotta-memory-agent-key`;HTTP 用 `X-Agent-Id` + `X-Agent-Key` 请求头。宿主不得再用身份环境变量。
367
389
 
368
390
  ### 3. key 丢失与重新授权
369
391
 
@@ -435,7 +457,7 @@ MCP 模式由宿主把宿主 key 文件内容注入 `YOTTA_MEMORY_AGENT_KEY`,
435
457
  2. AI 引导用户在**引擎主机**执行:`yotta-memory token new --agent <本智能体ID>`(引擎主机没装 → 按 4.0 先装;或请引擎主机上的 AI 代执行)。
436
458
  3. 命令打印 token(`ytm_...`),只打印一次,请用户妥善保管。
437
459
  4. 确认本智能体已持有 `agent_key`;没有时由用户在引擎主机执行 `yotta-memory view` 授权并保存弹窗 key,引擎会同时写 `keys/pending/<id>.key`。
438
- 5. 如果 AI 宿主与记忆库同机或能访问同一文件系统:AI 执行 `yotta-memory key status <id> --to <AI_HOME>`,有 pending 就 `key claim`,写到 `<AI_HOME>/.yotta-memory-agent-key`。
460
+ 5. 如果 AI 宿主与记忆库同机或能访问同一文件系统:AI 执行 `yotta-memory key status <id>`,有 pending 就 `key claim`,写到 `<AI_HOME>/.yotta-memory-agent-key`(需要时显式加 `--to` / `--agent-key-file`)。
439
461
  6. 如果 AI 宿主与引擎主机不共享文件系统:pending 不能跨机自动读取。用户必须通过密码管理器、加密文件传输或目标主机本地输入把 key 放到 AI 宿主目录;不要粘贴到聊天窗口。
440
462
 
441
463
  > token 可以按用户习惯复制;agent_key 属于私密能力,优先走 `key claim` 或安全文件传输,不走对话明文。
@@ -449,6 +471,8 @@ MCP 模式由宿主把宿主 key 文件内容注入 `YOTTA_MEMORY_AGENT_KEY`,
449
471
 
450
472
  > MCP 工具集与 CLI 一致:remember / recall / search / forget / archive / reindex / export / import / profile;管理动作(init / config / token / lan / serve)不进 MCP,token 管理不远程暴露;MCP export/import 路径限记忆库内、distill 不支持 `--model`(仅本地 CLI)。
451
473
 
474
+ > 工具分组(v0.15.0):常驻场景用 `yotta-memory serve --stdio --tools core --agent-id <id> --agent-key-file <path>`,只暴露 `context / recall / search / remember`;需要诊断、维护、导入导出时用 `--tools full`。调用不属于当前分组的工具会返回明确提示,不会静默执行。
475
+
452
476
  ### 4.7 MCP 配置位置表
453
477
  | 智能体 | 常见 MCP 配置位置 |
454
478
  |---|---|
@@ -477,6 +501,23 @@ MCP 模式由宿主把宿主 key 文件内容注入 `YOTTA_MEMORY_AGENT_KEY`,
477
501
 
478
502
  `X-Agent-Key` 的值来自该 AI 的宿主 key 文件 `<AI_HOME>/.yotta-memory-agent-key`。同机 / 共享文件系统先用 `key claim` 写入;不共享文件系统时由用户安全传输,不要把 key 发到对话里。配置文件写入前仍需获得用户同意。
479
503
 
504
+ 本机 stdio 配置使用显式参数,不写身份 env:
505
+ ```json
506
+ {
507
+ "mcpServers": {
508
+ "yotta-memory": {
509
+ "command": "node",
510
+ "args": [
511
+ "<runtimeRoot>/current/bin/yotta-memory.js",
512
+ "serve", "--stdio", "--tools", "core",
513
+ "--agent-id", "<本智能体ID>",
514
+ "--agent-key-file", "<AI_HOME>/.yotta-memory-agent-key"
515
+ ]
516
+ }
517
+ }
518
+ }
519
+ ```
520
+
480
521
  ### 4.9 验证连接(循环兜底)
481
522
  - 🔒 连接远程引擎前已获同意(4.5 / 4.6)→ 调一次 `recall` / `search` 确认能读到记忆 → 成功。
482
523
  - 失败:查 IP / 端口 / token 完整性 / agent_key 是否匹配 / 是否已吊销 / 防火墙 / token 吊销;仍失败回 4.3。
package/USER_GUIDE.md CHANGED
@@ -12,6 +12,7 @@
12
12
  3.7 查看平台分页与检索优化(v0.8.1)
13
13
  3.8 可靠性基线:防覆盖、回收区与备份(v0.12.0)
14
14
  3.9 开工 doctor 与事务快照(v0.12.2)
15
+ 3.10 MCP 工具分组(v0.15.0)
15
16
  4. 便携记忆盘 · 记忆引擎主机篇(Linux / Windows)
16
17
  5. 智能体接入篇(本机 / 局域网其它主机)
17
18
  6. CLI 命令速查
@@ -31,9 +32,10 @@
31
32
  - **多智能体共享**:FACT 进公共区共享,PREF / BOUND / COMMIT 各自私密隔离。
32
33
  - **交接与团队协作**:项目级 `.yottamemory` 随仓库走,交接即恢复。
33
34
  - **便携记忆盘**:记忆装在固定主机上,本机与局域网其它主机共享同一份记忆(见第 4 / 5 篇)。
34
- - **越用越懂(v0.6.0)**:AI 按「记忆守则」主动捕获信号,`profile` 聚合画像、`context` 开工注入——用得越久越懂你。
35
+ - **越用越懂(v0.14.0)**:AI 按「记忆守则」主动捕获信号,`context` 开工注入长期摘要、画像、近期走廊、边界、承诺与会话闭环契约——用得越久越懂你。
35
36
  - **自我学习 / 自我进化 / 自我提升(v0.8.0 + v0.9.0)**:`recall` 语义检索(同义词 / 拼音 / 字段加权 / 模糊,v0.9.0 可选本地 embedding 插件)+ `feedback` 使用反馈闭环 + `maintain` 规则层自组织 + `distill` 心理日志蒸馏——记忆系统会自己整理、提炼、演化。
36
37
  - **可靠性基线(v0.12.0 / v0.12.2)**:`init` 对已有库拒绝覆盖;`forget` 进回收区;`backup volumes/setup/status/ensure-daily/schedule/drill` 在用户确认真实独立卷后默认每日自动备份,并提供校验、恢复与恢复演练;`doctor` 开工检查风险,破坏性操作写入前自动创建事务快照。
38
+ - **MCP 工具分组(v0.15.0)**:`serve --tools core` 只暴露 `context / recall / search / remember`,适合常驻;`--tools full` 提供完整诊断与维护工具。未指定时默认 `full`。
37
39
 
38
40
  ## 2. 安装(CLI + 技能)
39
41
 
@@ -81,16 +83,16 @@ yotta-memory config get # 查看记忆库位置
81
83
  - 想换记忆位置:`yotta-memory config set memory_home <目录>`,之后所有命令自动用新位置。
82
84
  - 项目级记忆:在项目目录里 `yotta-memory init --project`,该项目的智能体优先读项目级记忆。
83
85
 
84
- ### 画像与开工上下文(v0.6.0)
86
+ ### 画像与开工上下文(v0.6.0 + v0.9.0 + v0.14.0)
85
87
 
86
88
  ```bash
87
89
  yotta-memory profile # 生成用户画像(写 private/<owner>/profile.md)
88
- yotta-memory context --limit 10 --budget 1800 # 生成开工上下文包(身份+铁律+画像+近期记忆+边界+承诺,预算控 token)
90
+ yotta-memory context --limit 10 --budget 1800 # 生成开工上下文包(身份+铁律+画像+长期摘要+近期走廊+高价值补位+边界+承诺+闭环契约,预算控 token)
89
91
  yotta-memory iam <id> --name 元忆 --user 用户 --relationship 伙伴 # 自我档案扩展显示名/用户/关系
90
92
  ```
91
93
 
92
94
  - `profile` 引擎零推断:只按类型 / 主题 / 标签归组呈现原文,画像结论由 AI 内部形成,不当面贴标签。
93
- - `context` 是每次会话开工的主注入,替代裸 `recall`;无画像时自动生成一次或降级,不报错;`--budget` 控制近期记忆字符预算(token 恒定)。
95
+ - `context` 是每次会话开工的主注入,替代裸 `recall`;长期摘要优先、近期走廊按时间取样、近期高价值补位按文件去重;无画像时自动生成一次或降级,不报错;`--budget` 控制动态记忆字符预算,长期摘要 / 身份 / 铁律 / 画像 / 边界 / 承诺 / 闭环契约必保(token 恒定)。
94
96
  - `remember --verify` 写后回读校验;`remember --no-hint` 关闭「疑似偏好,建议 PREF」的提示。
95
97
 
96
98
  ### 记忆库位置:本机智能体如何找到记忆
@@ -133,9 +135,9 @@ statement: 本周完成发布
133
135
 
134
136
  **AI 接入加密库**
135
137
 
136
- 1. 该 AI 登记身份(`iam` / MCP 配置 `YOTTA_AGENT_ID`)。
138
+ 1. 该 AI 登记身份(`iam` / MCP 启动参数 `--agent-id`,或 HTTP 请求头 `X-Agent-Id`)。
137
139
  2. 由用户执行一次 `yotta-memory view` → 在平台点「授权」→ 生成只展示一次的 `agent_key`,写入 `keys/bindings/<id>.key.agent` 和临时 `keys/pending/<id>.key`;不再写明文 owner key cache。高级用户也可自行执行 `yotta-memory key bind <id>`;AI 只负责提醒,不代执行。
138
- 3. 该 AI 新会话执行 `yotta-memory key status <id> --to <AI_HOME>`;有 pending 就执行 `yotta-memory key claim <id> --to <AI_HOME>`,落到 `<AI_HOME>/.yotta-memory-agent-key`。之后 MCP 配置注入 `YOTTA_MEMORY_AGENT_KEY`,CLI 用 `--agent-key-file <AI_HOME>/.yotta-memory-agent-key`。
140
+ 3. 该 AI 新会话执行 `yotta-memory key status <id>`;有 pending 就执行 `yotta-memory key claim <id>`,落到 `<AI_HOME>/.yotta-memory-agent-key`(需要指定位置时可加 `--to` / `--agent-key-file`)。之后 stdio MCP 用 `--agent-key-file <AI_HOME>/.yotta-memory-agent-key`,HTTP MCP 发送 `X-Agent-Key` 请求头,CLI 用 `--agent-key-file <AI_HOME>/.yotta-memory-agent-key`。
139
141
  4. 之后该 AI 正常 `remember / recall / profile / context`,读写自动加解密;未绑定 / key 缺失时会出现 `[YTM_MIGRATION_REQUIRED]` 迁移提示,公共 FACT 不受影响。
140
142
 
141
143
  **口令管理**
@@ -237,6 +239,16 @@ statement: 本周完成发布
237
239
  - `maintain --apply`、`consolidate --apply`、`merge`、`archive` 与 `--purge` 在写入前自动创建新的整库事务快照,并在 `.archive/audit-<日期>.jsonl` 记录 transaction / operation / snapshot。
238
240
  - 未配置独立备份目录、doctor critical 或快照失败时,命令直接拒绝执行,原记忆保持不变;`forget` 仍只移入 `.trash/`,不重复创建整库快照。
239
241
 
242
+ ## 3.10 运行时稳定入口与漂移诊断(v0.16.0 M2/M3)
243
+
244
+ - `yotta-memory runtime install --from-current`:把当前 CLI 所属的完整包安装到 `<runtimeRoot>/versions/<版本>/`,并创建 `<runtimeRoot>/current` 稳定指针。
245
+ - `yotta-memory runtime install <tarball|版本> [--force]`:安装本地 tarball,或从 npm 拉取指定版本;内容哈希写入 `runtime.json`。
246
+ - `yotta-memory runtime use <版本> [--restart]`:切换到已安装版本;`--restart` 会尝试重启受管的 `lan` 服务,失败时自动把 current 切回旧版本。
247
+ - `yotta-memory runtime rollback [--restart]`:回到上一个版本;`runtime list` / `runtime status` 查看版本、current 指针与漂移。
248
+ - stdio MCP、`lan enable` 与备份调度只引用 `<runtimeRoot>/current/bin/yotta-memory.js`,不写死 `versions/<版本>/` 路径;升级只需 `runtime install` + `runtime use --restart`。
249
+ - `yotta-memory doctor --runtime [--json]`:检查 CLI / current / `runtime.json` / MCP 配置 / 运行中 server / 技能副本 / 身份模式漂移;每项漂移给出实际版本、期望版本、修复命令和是否阻断。可用 `--mcp-config <文件>`、`--skill-dir <目录>` 显式补充检查目标。
250
+ - MCP `initialize` / `server/discover` 的 `serverInfo` 返回 `runtimePath` / `identityMode` / `toolProfile`,宿主可显示实际执行的运行时路径与工具分组,不再只看配置里的版本。
251
+
240
252
  ## 4. 便携记忆盘 · 记忆引擎主机篇
241
253
 
242
254
  场景:记忆放在一台主机上(Linux / Windows 均可),本机直接 CLI 读写;局域网内其它主机上的 AI 智能体经 MCP 远程接入。引擎主机只需装 CLI,不需要装任何 AI 智能体。
@@ -256,6 +268,8 @@ yotta-memory init --dir /srv/yotta-memory # 新库:初始化(
256
268
 
257
269
  **第 3 步:注册开机自启(可选,推荐)**
258
270
 
271
+ `lan enable` 会先准备稳定运行时入口:没有 `<runtimeRoot>/current` 时自动执行 `runtime install --from-current`,然后把计划任务 / systemd / crontab 指向 `<runtimeRoot>/current/bin/yotta-memory.js`。如需手动准备,可先执行 `yotta-memory runtime install --from-current && yotta-memory runtime status`。
272
+
259
273
  ```bash
260
274
  # Windows:内置命令(优先计划任务;非管理员自动降级用户级 Startup 静默自启;
261
275
  # v0.6.3 起启动脚本自愈——启动文件被清理也会在开机时自动重建,无需手动处理)
@@ -315,29 +329,30 @@ yotta-memory remember FACT 主题 内容 # 智能体落盘
315
329
  **方式二:stdio MCP(零常驻进程,智能体按需拉起 CLI)。** 先让 AI 领取 agent_key:
316
330
 
317
331
  ```bash
318
- yotta-memory key status <本智能体ID> --to <AI_HOME>
319
- yotta-memory key claim <本智能体ID> --to <AI_HOME>
332
+ yotta-memory key status <本智能体ID>
333
+ yotta-memory key claim <本智能体ID>
320
334
  ```
321
335
 
322
- 领取成功后宿主目录出现 `<AI_HOME>/.yotta-memory-agent-key`;再由 MCP 宿主读取该文件并注入环境变量。然后在智能体 MCP 配置里加:
336
+ 领取成功后宿主目录出现 `<AI_HOME>/.yotta-memory-agent-key`;再由 MCP 宿主通过 `--agent-key-file` 读取该文件。然后在智能体 MCP 配置里加:
337
+
338
+ `AI_HOME` 解析由 `key status` / `key claim` 共用:显式 `--to <目录>` 或 `--agent-key-file <文件>` > `YOTTA_MEMORY_AGENT_HOME` / `YOTTA_MEMORY_AGENT_KEY_FILE` > 宿主默认(Codex `$CODEX_HOME` 或 `~/.codex`、OpenCode `$XDG_CONFIG_HOME/opencode`、通用 `~/.<agent_id>`);文件名固定为 `.yotta-memory-agent-key`。`key status` 会输出实际检查路径 `checked:` 与命中的发现规则 `discovery:`,即使文件暂不存在也可据此定位。
323
339
 
324
340
  ```json
325
341
  {
326
342
  "mcpServers": {
327
343
  "yotta-memory": {
328
344
  "command": "yotta-memory",
329
- "args": ["serve", "--stdio"],
330
- "env": {
331
- "YOTTA_AGENT_ID": "<该智能体唯一ID>",
332
- "YOTTA_MEMORY_AGENT_KEY": "<AI_HOME>/.yotta-memory-agent-key 的内容",
333
- "YOTTA_MEMORY_TRUST_ENV_AGENT": "1"
334
- }
345
+ "args": [
346
+ "serve", "--stdio", "--tools", "core",
347
+ "--agent-id", "<该智能体唯一ID>",
348
+ "--agent-key-file", "<AI_HOME>/.yotta-memory-agent-key"
349
+ ]
335
350
  }
336
351
  }
337
352
  }
338
353
  ```
339
354
 
340
- 本机接入不需要网络 token,也不需要启动 HTTP 服务;但**必须同时声明唯一的 `YOTTA_AGENT_ID` 与 `YOTTA_MEMORY_AGENT_KEY`,并设置 `YOTTA_MEMORY_TRUST_ENV_AGENT=1`**,否则私密读写会被拒。
355
+ 本机接入不需要网络 token,也不需要启动 HTTP 服务;但**必须用 `--agent-id` 声明唯一的智能体 ID,并用 `--agent-key-file` 指向自己的宿主 key 文件**,否则私密读写会被拒。身份环境变量已删除。
341
356
 
342
357
  **本机智能体装好技能后如何获取记忆存放位置?** 按优先级:`YOTTA_MEMORY_HOME` 环境变量 > `config set memory_home` 持久化的 `~/.yottamemory/config.json` > 默认 `~/.yottamemory`。AI 开工执行 `yotta-memory config get` 查看当前生效位置;记忆库移动后执行一次 `config set memory_home <新目录>` 即可。
343
358
 
@@ -345,7 +360,7 @@ yotta-memory key claim <本智能体ID> --to <AI_HOME>
345
360
 
346
361
  1. 开工先 `yotta-memory whoami` 确认「我是谁」。
347
362
  2. 未登记 → 向用户确认一个**全局唯一** ID(建议 `<主机名>-<角色>`,别用 `dashu` / `codex` 这类易撞名),执行 `yotta-memory iam <id>`:引擎**强制唯一性**(被其它主机 / 来源占用会拒绝),并自动落一条「自我接入档案」PREF(owner=自己)。
348
- 3. 本机多个 AI 智能体共用引擎时,**每个都要在它自己的 MCP 配置里声明唯一 `YOTTA_AGENT_ID` + 自己的 `YOTTA_MEMORY_AGENT_KEY`**;CLI 直连每次带 `--agent <id> --agent-key <key>` 或 `--agent-key-file <文件>`。owner ID 单独存在时不构成认证。
363
+ 3. 本机多个 AI 智能体共用引擎时,**每个都要在自己的 MCP 配置里用 `--agent-id` 声明唯一 ID,并用 `--agent-key-file` 指向自己的 key 文件**;HTTP 场景则在请求头写 `X-Agent-Id` + `X-Agent-Key`。CLI 直连每次带 `--agent <id> --agent-key <key>` 或 `--agent-key-file <文件>`。owner ID 单独存在时不构成认证。
349
364
  4. **禁止**从记忆里读到别人的 ID 就当自己的(比如看到「Kali 智能体 ID 为 dashu」就把自己当 dashu);不确定先 `whoami` 再问用户,**禁止猜**。
350
365
  5. **不设则 owner 为空**:写私密记忆会被引擎拒绝(公共 FACT 不受影响),避免私密隔离退化。
351
366
 
@@ -384,17 +399,18 @@ yotta-memory key claim <本智能体ID> --to <AI_HOME>
384
399
  | `yotta-memory remember <类型> <主题> <内容> [--owner <id>] [--source <来源>] [--weight <0..>] [--verify] [--no-hint]` | 写入记忆(--source 来源;--weight 重要性权重;--verify 写后回读;--no-hint 关闭类型提示)|
385
400
  | `yotta-memory recall [关键词] [--type T] [--limit N] [--agent <id>] [--owner <id>] [--all] [--unsafe] [--explain] [--semantic] [--embedding <命令>] [--embedding-timeout N]` | 检索记忆(语义 + 效用分排序;可选本地 embedding 插件;读取分区过滤;越界读其它智能体私密默认拒绝,需 grant / identity=user / `--unsafe`)|
386
401
  | `yotta-memory profile [--owner <id>]` | 生成用户画像(零推断,写 `profile.md`)|
387
- | `yotta-memory context [--limit N] [--owner <id>] [--budget N] [--focus <关键词>] [--explain] [--embedding <命令>]` | 开工上下文包(身份+铁律+画像+任务相关记忆+近期记忆+边界+承诺;--focus 任务聚焦;--explain 输出 included/dropped 选择解释)|
402
+ | `yotta-memory context [--limit N] [--owner <id>] [--budget N] [--focus <关键词>] [--explain] [--embedding <命令>]` | 开工上下文包(身份+铁律+画像+长期摘要+任务相关记忆+近期走廊+近期高价值+边界+承诺+会话闭环契约;--budget 控制动态记忆字符预算;--focus 任务聚焦;--explain 输出 included/dropped 选择解释)|
388
403
  | `yotta-memory forget <文件>` | 删除一条记忆 |
389
- | `yotta-memory doctor [--json]` | 开工可靠性检查(v0.12.2:根目录 / 密钥库 / 索引 / 身份 / 最近备份;严重异常时锁定破坏性写入)|
404
+ | `yotta-memory doctor [--json] [--runtime] [--mcp-config <文件>] [--skill-dir <目录>]` | 开工可靠性检查(v0.12.2:根目录 / 密钥库 / 索引 / 身份 / 最近备份;严重异常时锁定破坏性写入;v0.16.0:`--runtime` 检查 CLI / current / MCP 配置 / 运行中 server / 技能副本漂移)|
390
405
  | `yotta-memory archive [--days 180] [--threshold 0.4]` | 归档旧记忆(分类型衰减效用分 + 年龄;immutable / BOUND 豁免;私密入 `.archive/private/<owner>/<type>/`)|
391
406
  | `yotta-memory reindex` | 重建索引 |
392
407
  | `yotta-memory export [--out 文件.json]` / `import <文件.json>` | 导出 / 导入 |
393
408
  | `yotta-memory config set <键> <值>` / `config get` | 记忆库位置与引擎参数(`memory_home` / `embedding_cmd` / `embedding_timeout` / `maintain_archived_utility` / `maintain_decay_halflife_<TYPE>` / `consolidate_*` 等)|
394
- | `yotta-memory whoami --agent <id>` | 查看当前显式身份与登记状态;环境身份仅在 MCP 信任标记下有效 |
409
+ | `yotta-memory whoami --agent <id>` | 查看当前显式身份与登记状态;身份不从环境变量读取 |
395
410
  | `yotta-memory iam <id> [--name <显示名>] [--user <用户名>] [--relationship <关系>] [--force]` | 登记本智能体唯一身份并自动落自我档案(`agents.json`,ID 必须唯一;可选扩展显示名 / 用户 / 关系)|
396
411
  | `yotta-memory token new --agent <id> [--force]` / `token list` / `token revoke --agent <id>` | 访问 token(同 ID 已被其它来源占用需 `--force` 覆盖)|
397
412
  | `yotta-memory serve [--port 8787] [--stdio] [--no-auth]` | 启动记忆引擎(--no-auth 关闭鉴权,仅限可信内网)|
413
+ | `yotta-memory runtime list / install <tarball|版本> [--from-current] [--force] / use <版本> [--restart] / rollback [--restart] / status` | 运行时稳定入口(runtime.json + versions + current;安装 / 切换 / 回滚 / 查看漂移;`--restart` 尝试重启受管 server)|
398
414
  | `yotta-memory lan enable [--onstart] / disable / status` | 开机自启管理(Windows:计划任务/用户级 Startup 静默自启;Linux:systemd 用户单元/用户 crontab @reboot)|
399
415
  | `yotta-memory feedback <文件|主题> --useful|--useless [--reason <原因>] [--undo]` | 使用反馈(v0.8.0:useful/useless 调 weight/confidence/feedback_net;--undo 回滚)|
400
416
  | `yotta-memory maintain [--dry-run] [--apply] [--purge] [--threshold N] [--age N] [--dedup] [--dedup --apply] [--merge A,B]` | 记忆自组织(v0.8.0 + v0.10.0 自动合并):归档 / 遗忘候选 / 置信度查重 / 自动合并;默认 dry-run,`--dedup` 与归档互斥 |
package/assets/view.html CHANGED
@@ -57,7 +57,7 @@ async function loadOwners(){const d=await api('/api/owners');const box=document.
57
57
  for(const o of d.owners){const c=document.createElement('span');c.className='owner';c.innerHTML=esc(o.owner)+(o.authorized?' ✅':' 🔒')+' <button class="ghost" data-a="'+esc(o.owner)+'">授权</button><button class="danger" data-r="'+esc(o.owner)+'">吊销</button>';box.appendChild(c);}
58
58
  box.querySelectorAll('[data-a]').forEach(function(b){b.onclick=function(){var owner=b.getAttribute('data-a');if(!confirm('确认由你为用户授权 '+owner+' 读取其私密记忆?授权后将生成只显示一次的 agent_key,请立即保存;同时写入待领取文件供该 AI 新会话领取。AI 不应代为执行该授权操作。'))return;b.disabled=true;api('/api/authorize',{owner:owner}).then(function(d){b.disabled=false;if(!d||d.error){alert((d&&d.error)||'授权失败');loadOwners();return;}if(d.agentKey){showKey(d.agentKey);}loadOwners();});};});
59
59
  box.querySelectorAll('[data-r]').forEach(function(b){b.onclick=function(){if(!confirm('确认吊销 '+b.getAttribute('data-r')+' 的 agent_key?吊销后该智能体立即失去私密读写能力。'))return;api('/api/revoke',{owner:b.getAttribute('data-r')}).then(function(){loadOwners();});};});
60
- function showKey(k){var ov=document.createElement('div');ov.style.cssText='position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:99';var box=document.createElement('div');box.className='card';box.style.cssText='max-width:640px;word-break:break-all';var t=document.createElement('div');t.innerHTML='<b>agent_key(只显示一次)</b>';var hint=document.createElement('div');hint.className='meta';hint.textContent='请用户立即单独保存。AI 新会话执行 yotta-memory key claim <agent_id> --to <AI_HOME> 领取,写入 <AI_HOME>/.yotta-memory-agent-key 后删除待领取文件。若 key 丢失,可吊销后重新授权;旧 key 会立即校验失败。';var ta=document.createElement('textarea');ta.readOnly=true;ta.value=k;ta.style.cssText='width:100%;height:72px;margin-top:8px;font-family:monospace;font-size:12px';var close=document.createElement('button');close.textContent='我已保存,关闭';close.onclick=function(){ov.remove();};box.appendChild(t);box.appendChild(hint);box.appendChild(ta);box.appendChild(close);ov.appendChild(box);document.body.appendChild(ov);ta.focus();ta.select();}
60
+ function showKey(k){var ov=document.createElement('div');ov.style.cssText='position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:99';var box=document.createElement('div');box.className='card';box.style.cssText='max-width:640px;word-break:break-all';var t=document.createElement('div');t.innerHTML='<b>agent_key(只显示一次)</b>';var hint=document.createElement('div');hint.className='meta';hint.textContent='请用户立即单独保存。AI 新会话先执行 yotta-memory key status <agent_id>,有 pending 再执行 key claim <agent_id>;默认写入 AI_HOME/.yotta-memory-agent-key,需要时用 --to 或 --agent-key-file 指定。若 key 丢失,可吊销后重新授权;旧 key 会立即校验失败。';var ta=document.createElement('textarea');ta.readOnly=true;ta.value=k;ta.style.cssText='width:100%;height:72px;margin-top:8px;font-family:monospace;font-size:12px';var close=document.createElement('button');close.textContent='我已保存,关闭';close.onclick=function(){ov.remove();};box.appendChild(t);box.appendChild(hint);box.appendChild(ta);box.appendChild(close);ov.appendChild(box);document.body.appendChild(ov);ta.focus();ta.select();}
61
61
  }
62
62
  let off=0,PS=50;
63
63
  async function load(){const d=await api('/api/entries',{query:document.getElementById('q').value,offset:off,limit:PS});const meta=document.getElementById('meta');const pg=document.getElementById('pageinfo');if(meta)meta.textContent='共 '+d.count+' 条';const lim=d.limit||PS;const totalPg=Math.max(1,Math.ceil(d.count/lim));const curPg=Math.floor((d.offset||0)/lim)+1;if(pg)pg.textContent='第 '+curPg+' / '+totalPg+' 页';const box=document.getElementById('entries');box.innerHTML='';if(d.entries)for(const e of d.entries){const div=document.createElement('div');div.className='entry';div.innerHTML='<b>['+esc(e.type)+'] '+esc(e.subject)+'</b><div>'+esc(e.statement)+'</div><div class="meta">'+esc(e.file)+' · owner='+esc(e.owner||'-')+' · '+esc(e.updated||e.created||'')+'</div>';box.appendChild(div);}const pb=document.getElementById('prevb'),nb=document.getElementById('nextb');if(pb)pb.disabled=(d.offset||0)<=0;if(nb)nb.disabled=!d.hasMore;}