@yottameta/yotta-memory 0.13.0 → 0.13.2
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/CHANGELOG.md +30 -0
- package/README.md +24 -13
- package/README.zh-CN.md +28 -17
- package/SKILL.md +80 -22
- package/USER_GUIDE.md +27 -14
- package/assets/view.html +71 -0
- package/bin/yotta-memory.js +636 -95
- package/package.json +1 -1
- package/references/faq.md +4 -4
- package/references/protocol.md +7 -7
- package/skill-manifest.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yottameta/yotta-memory",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.2",
|
|
4
4
|
"description": "Yuanyi (元忆) — boundary-aware, file-based memory for AI agents. File-based, zero-dependency, diff/rollback-able; FACT/PREF/BOUND/COMMIT types (public shared / private isolated), user-level + project-level storage; v0.12 reliability baseline (init guard, trash-based deletion, independent-volume backup/list/doctor/restore, start-of-work doctor, transactional snapshots before destructive writes), v0.10 consolidation (periodic summaries with provenance, near-duplicate auto-merge, per-type decay, batch audit + rollback), v0.9 recall quality + context focus + optional local embedding plugin, plus v0.8 semantic search, feedback loop, self-organization and distillation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
package/references/faq.md
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
类型只在写入时提示、不阻止(FACT=公共 / PREF、BOUND、COMMIT=私密)。写错不影响已写入内容;想改类型可 `forget` 后按正确类型重写。不需要提示可用 `--no-hint`。
|
|
7
7
|
|
|
8
8
|
## 2. 私密区加密怎么用?
|
|
9
|
-
`init` 默认初始化加密库(需主口令 + 恢复钥匙,请妥善保存);明文库可用 `migrate` 升级为加密。私密区文件为 `.md.enc`,可 git 版本化。查看/授权用 `yotta-memory view`(口令解锁,浏览/授权/吊销 AI
|
|
9
|
+
`init` 默认初始化加密库(需主口令 + 恢复钥匙,请妥善保存);明文库可用 `migrate` 升级为加密。私密区文件为 `.md.enc`,可 git 版本化。查看/授权用 `yotta-memory view`(口令解锁,浏览/授权/吊销 AI);授权时一次性展示的 `agent_key` 请立即保存,服务端同时写 `keys/pending/<id>.key` 供该 AI 新会话用 `key claim` 领取。出现 `[YTM_MIGRATION_REQUIRED]` 说明还有 agent 未绑定,请由你在 `view` 平台逐个点「授权」完成重新授权(AI 只提醒、不代执行)。
|
|
10
10
|
|
|
11
11
|
## 3. 多智能体权限怎么隔离?
|
|
12
|
-
公共 FACT 所有智能体可读;PREF / BOUND / COMMIT 按 owner
|
|
12
|
+
公共 FACT 所有智能体可读;PREF / BOUND / COMMIT 按 owner 物理隔离,调用方必须持有匹配的 `agent_key`(用户执行 `key bind <id>`,或在 `view` 平台授权获得)。owner ID 单独存在不构成认证,不授权 / 无 key 读不到。私密操作缺 key 时会输出 `[YTM_MIGRATION_REQUIRED]`;授权完成后该标记消失。AI 新会话用 `key status <id> --to <AI_HOME>` 检查,pending 存在则 `key claim <id> --to <AI_HOME>` 落到 `<AI_HOME>/.yotta-memory-agent-key`;吊销后旧 key 立即校验失败,需重新授权。
|
|
13
13
|
|
|
14
14
|
## 4. 记忆找不到了?
|
|
15
15
|
先 `config get` 确认 `memory_home` 指向的库;再 `reindex` 重建索引(升级后索引版本变化会自动重建);最后 `recall <关键词>` / `search <词>` 语义检索。跨项目记忆在项目级 `.yottamemory`。
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
用初始化时保存的**恢复钥匙**:`yotta-memory reset-password`。没有恢复钥匙则私密区无法解锁(这是加密的预期行为),公共 FACT 不受影响。
|
|
19
19
|
|
|
20
20
|
## 6. 局域网(便携记忆盘)怎么连?
|
|
21
|
-
引擎主机 `lan enable` 注册开机自启(Windows 计划任务 / Linux systemd)→ `token new --agent <id>` 生成 token;客户端配 `url: http://<主机IP>:8787/mcp` + `Authorization: Bearer <token>` + `X-Agent-Id: <id
|
|
21
|
+
引擎主机 `lan enable` 注册开机自启(Windows 计划任务 / Linux systemd)→ `token new --agent <id>` 生成 token;客户端配 `url: http://<主机IP>:8787/mcp` + `Authorization: Bearer <token>` + `X-Agent-Id: <id>` + `X-Agent-Key: <agent_key>`。同机 / 共享文件系统由 AI 用 `key status` / `key claim` 领取宿主 key;跨机不共享文件系统由用户通过密码管理器或安全文件传输放置,不走聊天明文。`lan status` 查状态。
|
|
22
22
|
|
|
23
23
|
## 7. MCP 工具没加载?
|
|
24
|
-
检查客户端 `mcpServers` 已配置 yotta-memory(url + token
|
|
24
|
+
检查客户端 `mcpServers` 已配置 yotta-memory(url + token + agent_key);agent_key 应来自 `<AI_HOME>/.yotta-memory-agent-key` 或 MCP secret 注入,不把明文 key 写进对话。改配置后重启/重载会话。本机直连可不配 MCP,直接用 CLI。
|
|
25
25
|
|
|
26
26
|
## 8. 记忆库在哪个目录?
|
|
27
27
|
`yotta-memory config get` 查看;`config set memory_home <目录>` 改位置。项目级记忆用 `init --project`(存 `.yottamemory/` 随项目共享)。
|
package/references/protocol.md
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
│ ├── facts/ # 公共 FACT 归档
|
|
30
30
|
│ └── private/<owner>/<type>/ # 私密归档(PREF/BOUND/COMMIT,带 owner 防撞名)
|
|
31
31
|
├── index.json # 公共 FACT 索引 + TF 打分(加密库只含公共条目)
|
|
32
|
-
├── keys/ #
|
|
32
|
+
├── keys/ # 加密库密钥库:salt / <owner>.key.enc(UMK 包裹) / <owner>.key.recovery(恢复钥匙包裹) / recovery.key.enc / bindings/<id>.key.agent;legacy cache/<id>.key 不再加载
|
|
33
33
|
├── agents.json # 智能体身份登记表(iam 写入,唯一性强制)
|
|
34
34
|
└── README.md # 记忆库说明
|
|
35
35
|
```
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
## 2.5 智能体身份(谁在写 / 谁在读)
|
|
42
42
|
|
|
43
43
|
- **agent ID 必须全局唯一**:`iam <id>` 写入 `agents.json`(记忆库根目录),唯一性强制——ID 已被其它主机 / 来源(含远端 token 登记)占用则拒绝,确认是同一智能体才 `--force`。
|
|
44
|
-
- **当次身份声明**:`whoami` / MCP `agent_info`
|
|
44
|
+
- **当次身份声明**:`whoami` / MCP `agent_info` 读「当次显式身份」——CLI 用 `--agent`,MCP 用 per-process `YOTTA_AGENT_ID` + `YOTTA_MEMORY_AGENT_KEY` + `YOTTA_MEMORY_TRUST_ENV_AGENT=1`;远端用 `X-Agent-Id` + `X-Agent-Key` 请求头(经 token 绑定校验)。不接受用户级全局 fallback。
|
|
45
45
|
- **自我档案**:`iam` 自动写一条 PREF `subject=自我接入档案`(owner=自己),statement 为 `; ` 分隔的 key:value——`agent_id / host / memory_home / mcp_mode(stdio|http) / engine_url(仅远端) / token(仅远端;本机不存 token)`,可含 `agent_name / user_name / relationship`(`iam --name/--user/--relationship` 写入)。
|
|
46
46
|
- **私密记忆必须有 owner**:PREF / BOUND / COMMIT 写入时未声明身份(owner 空)直接拒绝(公共 FACT 不受影响),从机制上防止「抄别人的 ID」。
|
|
47
47
|
|
|
@@ -92,7 +92,7 @@ immutable: false
|
|
|
92
92
|
- **UMK(用户主密钥)**:主口令 PBKDF2-SHA256(600000 次迭代 + 随机 16B 盐,盐存 `keys/salt`)派生,永不落盘明文。
|
|
93
93
|
- **Owner Key**:每 owner 随机 32B;被 UMK 包裹存 `keys/<owner>.key.enc`(头 `YTMKEY1`,AAD=`owner:<id>`),被恢复钥匙包裹存 `keys/<owner>.key.recovery`。
|
|
94
94
|
- **恢复钥匙(RK)**:随机 32B;被 UMK 包裹存 `keys/recovery.key.enc`(AAD=`recovery`),初始化/迁移时向用户打印一次(base64)。忘口令时用户提供 RK → 解开 `*.key.recovery` → 重设口令。
|
|
95
|
-
-
|
|
95
|
+
- **agent_key 绑定**:由用户执行 `key bind <id>` 或在 `view` 平台授权,生成 32 字节 agent_key,只展示一次;owner key 由 agent_key 包裹写入 `keys/bindings/<id>.key.agent`(AES-256-GCM),同时写临时待领取文件 `keys/pending/<id>.key`。AI 新会话用 `key status <id> --to <AI_HOME>` / `key claim <id> --to <AI_HOME>` 领取到 `<AI_HOME>/.yotta-memory-agent-key`,claim 成功后删除 pending。本机 MCP 用 `YOTTA_MEMORY_AGENT_KEY`,远程 MCP 用 `X-Agent-Key`,CLI 用 `--agent-key/--agent-key-file`;调用方必须提供 `agent_id + agent_key` 才能解出 owner key;UMK 永不接触 AI。`key revoke` 删除 binding 与 pending,旧 key 随即校验失败。`key list` 与私密操作失败时输出 `[YTM_MIGRATION_REQUIRED]`,AI 只负责把迁移步骤转达给用户。
|
|
96
96
|
|
|
97
97
|
### 密文记忆文件(`.md.enc`,头 `YTMENC1`)
|
|
98
98
|
```
|
|
@@ -110,10 +110,10 @@ magic "YTMIDX1" (7B) | nonce(12B) | tag(16B) | ciphertext(JSON: {version, update
|
|
|
110
110
|
|
|
111
111
|
### 命令扩展
|
|
112
112
|
- `init [--encrypt|--no-encrypt]`:新建默认加密(需主口令,打印恢复钥匙);`--no-encrypt` 明文降级。
|
|
113
|
-
- `migrate`:明文私密区 →
|
|
114
|
-
- `view [--port 8788] [--host 127.0.0.1]`:用户查看平台(本机 Web;口令解锁 → 浏览/搜索/导出全部;授权/吊销 AI;重设口令;显示恢复钥匙)。
|
|
113
|
+
- `migrate`:明文私密区 → 密文(由用户执行;需主口令;打印恢复钥匙;不写明文授权缓存,重新授权由用户在 `view` 平台逐个完成)。
|
|
114
|
+
- `view [--port 8788] [--host 127.0.0.1]`:用户查看平台(本机 Web;口令解锁 → 浏览/搜索/导出全部;授权/吊销 AI;授权时展示一次性 key 并写 pending;重设口令;显示恢复钥匙)。
|
|
115
115
|
- `reset-password [--password <当前> | --recovery-key <钥匙>] [--new-password <新>]`:重设主口令并重新包裹全部 owner 密钥。
|
|
116
|
-
- `key list |
|
|
116
|
+
- `key list | bind <id> | rotate <id> | claim <id> --to <AI_HOME> | status <id> | revoke <id>`:agent binding 管理(bind/rotate 由用户执行,需主口令或恢复钥匙;claim/status 由 AI 读取 pending 并落到宿主目录;`authorize` 保留为 bind 的兼容别名)。`view` 的授权按钮只对未绑定 agent 生成一次性 key 和 pending,已绑定需先吊销。
|
|
117
117
|
|
|
118
118
|
## 4. 类型体系
|
|
119
119
|
|
|
@@ -139,7 +139,7 @@ magic "YTMIDX1" (7B) | nonce(12B) | tag(16B) | ciphertext(JSON: {version, update
|
|
|
139
139
|
|---|---|
|
|
140
140
|
| 公共 FACT | 始终可读 |
|
|
141
141
|
| 当前 agent 自己的 private | 始终可读 |
|
|
142
|
-
| 其它 agent 的 private | 默认拒绝(不返回内容);需满足任一授权:① `grants.json` 显式授权记录 ② identity=user(`--agent user` / `--owner user
|
|
142
|
+
| 其它 agent 的 private | 默认拒绝(不返回内容);需满足任一授权:① `grants.json` 显式授权记录 ② identity=user(`--agent user` / `--owner user`)③ 显式 `--unsafe`;调用方仍须持有对应 agent_key |
|
|
143
143
|
|
|
144
144
|
> **默认隔离行为(recall)**:不带 `--all` / `--owner <其它agent>` 时(即默认 recall),遇其它 agent 私密记忆**静默跳过**,不输出任何「有私密被拒」提示、也不报错(exit 0),不泄露私密存在性;仅当**显式跨智能体读取**(`--all` 或 `--owner <其它agent>`,且非 user/自身)且无授权命中时,才报错/警告:无可读命中 → 「检测到 N 条越界访问已被拒绝」+ exit 3;有可读命中 → 正常展示 + 追加警告。
|
|
145
145
|
|