{"_id":"@eco-dsh/eco-memory-tree","_rev":"3-cd1cf14319e80d5c1d32570a3e3d9f54","name":"@eco-dsh/eco-memory-tree","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@eco-dsh/eco-memory-tree","version":"0.1.0","keywords":["dsh","dsh-plugin","cordis","memory","memory-tree","bm25","obsidian","rag","eco-agent"],"license":"MIT","_id":"@eco-dsh/eco-memory-tree@0.1.0","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"dist":{"shasum":"fd3ba6e7f8dab60c86b1dffce50bf9a5032a9577","tarball":"https://registry.npmjs.org/@eco-dsh/eco-memory-tree/-/eco-memory-tree-0.1.0.tgz","fileCount":4,"integrity":"sha512-aDkupMi5j5hNqmoQjUYpU++lZo+aUxyesH5nAzZxVZ+OICKHyDoA8UrZW/jyaXWw8TZQV/yHjHqgYT2LYAeh/Q==","signatures":[{"sig":"MEYCIQCReV3zbSI0cor/yErM5b0COWhR+zrDus8d8Z+NJSzWAgIhAPyfqhniuBIRtm8e6uf05d9YwGNXWiqBg8BSfXgg4U+V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21090},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"_npmVersion":"10.9.0","description":"dsh plugin: scored memory tree with BM25 search and Obsidian bidirectional sync (port of eco-agent memory_tree.py)","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eco-memory-tree_0.1.0_1787056861267_0.37116039453687977","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@eco-dsh/eco-memory-tree","version":"0.2.0","keywords":["dsh","dsh-plugin","cordis","memory","memory-tree","bm25","obsidian","rag","eco-agent"],"license":"MIT","_id":"@eco-dsh/eco-memory-tree@0.2.0","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"dist":{"shasum":"d9d12f77304673337276e5e64cfa7c0895ecb731","tarball":"https://registry.npmjs.org/@eco-dsh/eco-memory-tree/-/eco-memory-tree-0.2.0.tgz","fileCount":4,"integrity":"sha512-lNcHAIw/d7o2KLALoxhrVjoq1aTzUPfo+jdFJhlYQreUTM1V476685moO3+lj2J7OVCgITdgXg0yU0VacIh3vQ==","signatures":[{"sig":"MEYCIQDdqhDvyuuqRdxbf+bum+7OdBWjKH+786iEBVZAddYQMAIhAOsnrsrHJKw92Trrj5Q06wrlM85nuSh5hnnhGJiFaLDQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31870},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"_npmVersion":"10.9.0","description":"dsh plugin: scored memory tree with BM25 search and Obsidian bidirectional sync (port of eco-agent memory_tree.py)","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/eco-memory-tree_0.2.0_1787058293018_0.9765151332302866","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@eco-dsh/eco-memory-tree","version":"0.3.0","description":"dsh plugin: scored memory tree with BM25 search and Obsidian bidirectional sync (port of eco-agent memory_tree.py)","type":"module","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"keywords":["dsh","dsh-plugin","cordis","memory","memory-tree","bm25","obsidian","rag","eco-agent"],"license":"MIT","peerDependencies":{"@deepseek-ai/cordis":"^4.0.0","@deepseek-ai/dsh-tools":"^0.0.1-rc.1","@deepseek-ai/schemastery":"^3.0.0"},"devDependencies":{"typescript":"^5.5.0"},"_id":"@eco-dsh/eco-memory-tree@0.3.0","gitHead":"4ce16543838f1abefd0c4fb203c61a84dc1736fa","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-hadrcbDgN5pO/Bd+0n1oDwtv+4NoRc3ynkEER43GJTAYliZiSsmMzUGWG0CkoFnK5VgjiaipSGa5sD3rAz6q+Q==","shasum":"206597f0d058b1ba838e6379b8fdcf0196563828","tarball":"https://registry.npmjs.org/@eco-dsh/eco-memory-tree/-/eco-memory-tree-0.3.0.tgz","fileCount":4,"unpackedSize":38097,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEWzV3dFA9YAWc08U75BgU9Y5OT6QGxmuIaeVr+RMjOLAiAXIUBP6YtcM2qM71rfPDR014UtdQKcPuMBhNLDZfpHdg=="}]},"_npmUser":{"name":"13907387110ms","email":"awep000@qq.com"},"directories":{},"maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eco-memory-tree_0.3.0_1787062329805_0.4585166750024694"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T12:41:01.093Z","modified":"2026-08-18T14:12:10.180Z","0.1.0":"2026-08-18T12:41:01.396Z","0.2.0":"2026-08-18T13:04:53.171Z","0.3.0":"2026-08-18T14:12:09.953Z"},"license":"MIT","keywords":["dsh","dsh-plugin","cordis","memory","memory-tree","bm25","obsidian","rag","eco-agent"],"description":"dsh plugin: scored memory tree with BM25 search and Obsidian bidirectional sync (port of eco-agent memory_tree.py)","maintainers":[{"name":"13907387110ms","email":"awep000@qq.com"}],"readme":"# eco-memory-tree\n\ndsh plugin — 评分制记忆树：BM25 搜索 + 中文降级 + Obsidian 双向同步。\n\n> 移植自 [xiejianjun000/eco-agent](https://github.com/xiejianjun000/eco-agent) 的 `agent_core/memory_tree.py`（MIT License）。\n\n## 作用\n\n- **评分制节点**：每条记忆带 `score`（重要性）、`tags`、`parent_id`（树形结构）。\n- **BM25 排序检索**：英文按 token 计算 BM25；含 CJK 字符时降级为子串命中 + 覆盖率加分（对齐原版 FTS5 + LIKE 中文降级思路）。\n- **Obsidian 双向同步**：导出为带 frontmatter 的 Markdown 笔记（`id/score/tags/updated_at`），也从 vault 导入用户编辑后的笔记，按 `updated_at` 保留最新。\n\n## v0.2.0 — 向量检索通道\n\n- 新增 `eco_memory_vector_search`：配置 OpenAI 兼容 embedding 端点后启用向量检索（BM25 + 余弦分数融合排序）。\n- 未配置 embedding 时自动降级返回 BM25 结果并标记 `vector_enabled=false`，不阻塞使用。\n- 配置方式：`embeddingBaseUrl` / `embeddingApiKey` / `embeddingModel`，或运行时 `ctx.ecoMemory.setEmbeddingFn(fn)`。\n\n## v0.3.0 — 遗忘与维护（eco_memory_prune）\n\n- 新增 `eco_memory_prune` 工具：遗忘机制，按低分（`min_score`）或长期未访问（`max_age_days`，基于 `last_access`）清理节点。\n- `security` / `denied` 标签节点始终受保护，不被清理；被删节点的子节点自动提升为根节点。\n- `dry_run=true` 预览模式：返回候选数量与样本，不实际删除，方便先评估后执行。\n\n## 安装\n\n```bash\nnpm install @eco-dsh/eco-memory-tree\n```\n\n```ts\nimport * as ecoMemoryTree from '@eco-dsh/eco-memory-tree'\n\napp.plugin(ecoMemoryTree, {\n  storeFile: '~/.eco/dsh/memory/memory_tree.json',\n  obsidianVault: '/path/to/vault/eco-memory', // 留空则禁用同步\n  syncOnStart: false,\n})\n```\n\n## 注册工具\n\n| 工具 | 说明 |\n|------|------|\n| `eco_memory_add` | 添加节点（content / score / tags / parent_id） |\n| `eco_memory_search` | 按相关性检索（BM25 + 中文降级 + score 加成） |\n| `eco_memory_update` | 更新节点 |\n| `eco_memory_delete` | 删除节点 |\n| `eco_memory_stats` | 统计：节点数、平均分、标签分布 |\n| `eco_memory_sync` | Obsidian 同步：`to` / `from` / `both` |\n\n## 配置项\n\n| 字段 | 默认 | 说明 |\n|------|------|------|\n| `storeFile` | `~/.eco/dsh/memory/memory_tree.json` | 节点账本路径 |\n| `obsidianVault` | `''` | Obsidian vault 目录（空 = 禁用同步） |\n| `syncOnStart` | `false` | 启动时先导入一次 vault |\n\n## 许可\n\nMIT。原始实现版权归 [xiejianjun000/eco-agent](https://github.com/xiejianjun000/eco-agent) 所有，本包为 dsh 生态移植版。\n","readmeFilename":"README.md"}