memory-eternal 0.16.0 → 0.18.0

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.
@@ -0,0 +1,138 @@
1
+ # 🧠 memory-eternal —— 给 AI 装一个可信的第二大脑
2
+
3
+ [![GitHub stars](https://img.shields.io/github/stars/EternalNight996/memory-eternal?style=flat)](https://github.com/EternalNight996/memory-eternal/stargazers)
4
+ [![npm](https://img.shields.io/npm/v/memory-eternal)](https://www.npmjs.com/package/memory-eternal)
5
+ [![release](https://img.shields.io/badge/release-v0.18.0-FF7A45)](https://github.com/EternalNight996/memory-eternal/releases)
6
+ [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
7
+
8
+ [English (default)](README.md) · **简体中文(镜像)**
9
+
10
+ <p align="center">
11
+ <a href="https://eternalnight996.github.io/memory-eternal/demo/"><img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/demo.gif" width="900" alt="memory-eternal 20 秒演示:审核队列、记忆账本、知识星图" /></a>
12
+ </p>
13
+ <p align="center"><sub>▲ 20 秒演示 —— 审核队列 · 记忆账本 · 知识星图 · <a href="https://eternalnight996.github.io/memory-eternal/demo/">在线 Demo</a></sub></p>
14
+
15
+ > **你的 AI 每次会话都失忆。给它一个可信的记忆库。**
16
+ >
17
+ > 本地优先、先审后入、可度量 —— 一个 SQLite 库,DSH / Claude Code / Codex / Cursor 与任意 MCP 客户端共享。
18
+
19
+ - 🔍 **先审核,再入库** —— 新卡先进待审队列,Web 或终端里批准/驳回;每次状态变更写入不可篡改的审计日志。
20
+ - 🧾 **记忆账本** —— 召回注入了多少、蒸馏调了几次、召回到底有没有用,全部可查。
21
+ - 🏠 **本地优先,零云端** —— SQLite + Markdown 存在你自己的磁盘上。没有第三方记忆框架、不需要账号、不外发请求。
22
+
23
+ <p align="center"><strong>⭐ 如果它帮你少解释了一遍上下文,点个 Star 就是最大的支持</strong><br/><sub>DSH 一条命令:<code>dsh plugin --profile desktop add memory-eternal</code></sub></p>
24
+
25
+ ## ⚡ 快速开始
26
+
27
+ **DeepSeek Harness(桌面版 / Web)**
28
+
29
+ ```bash
30
+ dsh plugin --profile desktop add memory-eternal
31
+ # 重开 DSH → 左栏「记忆」
32
+ ```
33
+
34
+ **Claude Code、Codex 或 Cursor —— 通过 MCP 共享同一个库**
35
+
36
+ ```bash
37
+ npm i -g memory-eternal
38
+ dsh-memory connect claude # 或:codex / cursor
39
+ ```
40
+
41
+ **任意 MCP 客户端**
42
+
43
+ ```bash
44
+ npx -y -p memory-eternal dsh-memory mcp
45
+ ```
46
+
47
+ **浏览器或终端**
48
+
49
+ ```bash
50
+ dsh-memory open # http://127.0.0.1:7999
51
+ npx -y -p memory-eternal dsh-memory tui # 终端里的实时待审队列
52
+ ```
53
+
54
+ ## 🧾 真的省 token 吗?
55
+
56
+ 大多数记忆产品都说自己省 token。我们认为你应该自己验证。插件内置**记忆账本**(运行状态 → 记忆账本),记录:
57
+
58
+ | 记录项 | 含义 |
59
+ |---|---|
60
+ | 召回:命中数 + 注入字符 | 到底有多少记忆进入了上下文 |
61
+ | 沉淀:LLM 调用次数 + 输入/输出字符 | 蒸馏花了你多少成本 |
62
+ | 有用率:有用 / 没用 反馈 | 召回的记忆是否真的帮上了忙 |
63
+
64
+ 诚实的算式:
65
+
66
+ ```text
67
+ 净收益 ≈ 被避免的上下文开销 −(注入字符 + 蒸馏调用 × 单价)
68
+ ```
69
+
70
+ | 场景 | 你要付 | 你能省 |
71
+ |---|---|---|
72
+ | 有决策与踩坑记录的多会话项目 | 每次召回约 0.6–0.9k token | 重新解释上下文(约 1.5–3k)或重读文件(3–6k) |
73
+ | 一次性问题、低命中率 | 召回注入 | 通常什么也省不到 |
74
+
75
+ > 以上是示意数字,不是 benchmark —— 用账本测你自己的。如果召回有用率长期低于约 60%,就调小(更少条数、更短摘要)或直接关掉记忆。
76
+
77
+ ## 🛡️ 先审核,再入库
78
+
79
+ 一个「什么都自动吞进去」的记忆系统,迟早会把错误事实当成真相召回。memory-eternal 默认**先审后入**:
80
+
81
+ - 新卡先进入**待审队列**,人工批准后才进主库;
82
+ - 在 Web、终端 TUI 或 CLI 里批准 / 驳回 / 批量处理;
83
+ - 每次状态变更追加到**不可篡改的审计日志**(谁 / 什么 / 何时 / 为什么)—— 由 SQLite 层强制,而不是靠约定;
84
+ - Agent 可以读取和提议,但**不能批准自己写的卡**;
85
+ - 删除的卡进回收站(默认保留 30 天)。
86
+
87
+ ## 🧩 一个库,所有 Agent
88
+
89
+ | 入口 | 你能得到什么 |
90
+ |---|---|
91
+ | **DSH 桌面版 / Web** | 内嵌记忆界面:审核、图谱、配置、账本 |
92
+ | **Claude Code / Codex / Cursor** | MCP server,同一个本地库,<code>dsh-memory connect</code> |
93
+ | **任意 MCP 客户端** | <code>npx -y -p memory-eternal dsh-memory mcp</code> |
94
+ | **终端** | <code>dsh-memory tui</code> —— 实时队列、全选、批量批/驳、长文读卡 |
95
+ | **浏览器** | <code>dsh-memory open</code> → http://127.0.0.1:7999 |
96
+
97
+ ## 📸 截图
98
+
99
+ <p align="center">
100
+ <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/graph.png" width="32%" alt="知识星图:按类型分簇、标签连边" />
101
+ <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/audit.png" width="32%" alt="审核中心:类型条、队列与判词栏" />
102
+ <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/status.png" width="32%" alt="运行状态:库、备份、自动沉淀与版本" />
103
+ </p>
104
+ <p align="center"><sub>▲ 知识星图 · 审核中心 · 运行状态</sub></p>
105
+
106
+ <p align="center">
107
+ <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/tui-audit.png" width="49%" alt="终端原生审核:全选、批量批准/驳回" />
108
+ <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/screen/tui-reader.png" width="49%" alt="终端原生长文读卡器" />
109
+ </p>
110
+ <p align="center"><sub>▲ 终端原生审核与长文读卡 —— <code>dsh-memory tui</code></sub></p>
111
+
112
+ ## 📚 文档与链接
113
+
114
+ - [英文完整手册](docs/GUIDE.md) · [完整手册(中文)](docs/GUIDE.zh-CN.md)
115
+ - [私有化部署(Docker / systemd)](docs/DEPLOY.md)
116
+ - [更新日志](docs/CHANGELOG.md) · [架构](docs/ARCHITECTURE.md)
117
+ - [终端插件(dsh-tui)](dsh-tui-plugin/README.md) · [Orca 启动器](orca-plugin/README.md) · [Cursor / VS Code 扩展](cursor-extension/README.md)
118
+ - [反馈问题](https://github.com/EternalNight996/memory-eternal/issues)
119
+
120
+ ## 💬 交流群
121
+
122
+ **遇到问题、想提需求、或者想聊聊 DSH 插件开发 —— 欢迎进群:**
123
+
124
+ | QQ 交流群 | 微信交流群 |
125
+ |:---:|:---:|
126
+ | <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/support/group-qr.jpg" width="240" alt="QQ 群二维码" /> | <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/support/group-wechat.png" width="240" alt="微信群二维码" /> |
127
+
128
+ **如果这个插件帮你省了时间,可以请作者喝杯咖啡(两个码任选其一):**
129
+
130
+ | 微信收款码 | 微信赞赏码 |
131
+ |:---:|:---:|
132
+ | <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/support/wechat-pay.jpg" width="200" alt="微信收款码" /> | <img src="https://raw.githubusercontent.com/EternalNight996/memory-eternal/main/assets/support/wechat-reward.jpg" width="200" alt="微信赞赏码" /> |
133
+
134
+ > 打赏完全自愿,不影响任何功能;插件本体始终开源免费(MIT)。详见 [SPONSOR.md](SPONSOR.md)。
135
+
136
+ ## 📄 License
137
+
138
+ MIT —— 随便用、随便自托管、随便二次开发。
@@ -4,7 +4,7 @@
4
4
  // 用法:
5
5
  // dsh-memory recall <query> [--limit N] [--vault DIR] 检索知识卡
6
6
  // dsh-memory capture <text | - > [--source TAG] 手动沉淀(- 读 stdin)
7
- // dsh-memory serve [--port N] [--vault DIR] 启动 Web UI(前台常驻)
7
+ // dsh-memory serve [--port N] [--host H] [--vault DIR] 启动 Web UI(前台常驻;--host 0.0.0.0 用于容器/内网,需自行加认证)
8
8
  // dsh-memory open [--port N] 确保 Web 存活并用浏览器打开
9
9
  // dsh-memory tui [--live] [--write] 打开完整终端客户端(无需绝对路径)
10
10
  // dsh-memory mcp MCP stdio server(各 agent 挂载)
@@ -18,6 +18,7 @@
18
18
  // dsh-memory refine [--vault DIR] [--json] 矛盾扫描候选(不调模型);--apply --a A --b B --action keepA|keepB|merge|keepBoth 落裁决
19
19
  // dsh-memory refine --junk [--purge --path P] [--json] 注入垃圾卡(技能目录等注入文本沉淀成的卡):列清单 / 送回收站
20
20
  // dsh-memory refine --goals [--keep --path A --path B] 同目标不同做法:聚类需模型(面板里跑);--keep 落"都保留"
21
+ // dsh-memory ledger [--days N] [--json] 记忆账本:召回注入 / 蒸馏调用 / 召回有用率
21
22
  //
22
23
  // 环境变量:
23
24
  // MEMORY_VAULT_DIR vault 目录(默认 ~/.dsh/memory-vault)
@@ -105,8 +106,10 @@ async function main() {
105
106
  const { startWebServer, DEFAULT_WEB_PORT } = await import('../lib/web.js')
106
107
  const { defaultVaultDir } = await import('../lib/capture-run.js')
107
108
  const port = Number(argOf('--port')) || DEFAULT_WEB_PORT
109
+ // 默认只监听本机:私有化/容器部署时显式 --host 0.0.0.0,并在前面加 TLS + 认证的反向代理
110
+ const host = argOf('--host') || process.env.MEMORY_WEB_HOST || '127.0.0.1'
108
111
  const vault = path.resolve(argOf('--vault') || defaultVaultDir())
109
- await startWebServer({ port, vaultRoot: vault })
112
+ await startWebServer({ port, vaultRoot: vault, host })
110
113
  process.on('SIGINT', () => process.exit(0))
111
114
  process.on('SIGTERM', () => process.exit(0))
112
115
  return
@@ -148,6 +151,32 @@ async function main() {
148
151
  startMcpServer()
149
152
  return
150
153
  }
154
+ case 'ledger': {
155
+ const { ledgerSummary } = await import('../lib/ledger.js')
156
+ const { defaultVaultDir } = await import('../lib/capture-run.js')
157
+ const root = path.resolve(argOf('--vault') || defaultVaultDir())
158
+ const days = Math.min(Math.max(Math.floor(Number(argOf('--days')) || 7), 1), 90)
159
+ let s
160
+ try { s = ledgerSummary(root, { days }) } catch (e) {
161
+ console.error('读取记忆账本失败:' + (e?.message || e))
162
+ process.exitCode = 1
163
+ return
164
+ }
165
+ if (has('--json')) { console.log(JSON.stringify(s, null, 2)); return }
166
+ const fmt = (n) => Number(n || 0).toLocaleString('en-US')
167
+ console.log('记忆账本(最近 ' + s.days + ' 天)\n')
168
+ console.log('召回 ' + fmt(s.totals.recalls) + ' 次 · 注入 ' + fmt(s.totals.injectedChars) + ' 字符')
169
+ console.log('沉淀 ' + fmt(s.totals.captures) + ' 次 · LLM ' + fmt(s.totals.llmCalls) + ' 次 · 输入 ' + fmt(s.totals.captureInChars) + ' / 输出 ' + fmt(s.totals.captureOutChars) + ' 字符')
170
+ console.log('估算 ≈ ' + fmt(s.totals.estTokens) + ' tokens(中英混排按 2 字符 ≈ 1 token,仅看量级)')
171
+ console.log('')
172
+ console.log(s.feedback.rate === null
173
+ ? '召回有用率 暂无反馈(Agent 回传 useful 后才有数据)'
174
+ : '召回有用率 ' + Math.round(s.feedback.rate * 100) + '%(有用 ' + fmt(s.feedback.useful) + ' / 无用 ' + fmt(s.feedback.useless) + ')')
175
+ console.log('\n最近 ' + s.days + ' 天:')
176
+ for (const d of s.byDay) console.log(' ' + d.date + ' 召回 ' + fmt(d.recalls) + ' · 注入 ' + fmt(d.injectedChars) + ' 字符 · 沉淀 ' + fmt(d.captures))
177
+ console.log('\n提示:--json 输出原始数据;Web 面板「运行状态 → 记忆账本」可看趋势。')
178
+ return
179
+ }
151
180
  case 'status': {
152
181
  const { watchdogStatus, probeServedVersion, findPortListener, looksLikeOurWeb } = await import('../lib/watchdog.js')
153
182
  const port = argOf('--port')
@@ -590,7 +619,7 @@ MCP 侧只提供只读的 memory_audit_list —— 批准/驳回必须由人显
590
619
  用法:
591
620
  dsh-memory recall <query> [--limit N] 检索知识卡
592
621
  dsh-memory capture <text | -> [--source T] 手动沉淀(- 读 stdin)
593
- dsh-memory serve [--port N] Web UI(前台)
622
+ dsh-memory serve [--port N] [--host H] Web UI(前台;私有化部署见 docs/DEPLOY.md)
594
623
  dsh-memory open 确保 Web 存活并打开浏览器
595
624
  dsh-memory mcp MCP stdio server
596
625
  dsh-memory setup [--dry-run] ... 自动挂载 MCP 到已装 agent
@@ -601,6 +630,7 @@ MCP 侧只提供只读的 memory_audit_list —— 批准/驳回必须由人显
601
630
  dsh-memory status [--port N] [--json] 查看常驻看门狗(pid/端口/版本/存活)
602
631
  dsh-memory stop [--port N] [--json] 停止常驻看门狗(显式命令,配置变更不会自动停)
603
632
  dsh-memory restart [--port N] [--vault DIR] 停止并重新拉起看门狗(应用新版本)
633
+ dsh-memory ledger [--days N] [--json] 记忆账本:召回注入 / 蒸馏调用 / 有用率
604
634
  dsh-memory audit list [--status pending] [--kind K] [--json] 列出待审/驳回卡片
605
635
  dsh-memory audit approve <path...> | reject <path...> [--reason "原因"] 人工批量审批
606
636
 
@@ -1,54 +1,54 @@
1
- {
2
- "name": "memory-eternal",
3
- "displayName": "Memory Atlas",
4
- "description": "Memory-eternal: open the local Memory Atlas library, review queue and knowledge graph in a Cursor/VS Code webview.",
5
- "version": "0.16.0",
6
- "publisher": "EternalNight996",
7
- "license": "MIT",
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/EternalNight996/memory-eternal"
11
- },
12
- "engines": {
13
- "vscode": "^1.80.0"
14
- },
15
- "categories": [
16
- "Other"
17
- ],
18
- "activationEvents": [
19
- "onView:memory-eternal.view",
20
- "onCommand:memory-eternal.open"
21
- ],
22
- "main": "./extension.js",
23
- "contributes": {
24
- "viewsContainers": {
25
- "activitybar": [
26
- {
27
- "id": "memory-eternal",
28
- "title": "Memory Atlas",
29
- "icon": "icon.png"
30
- }
31
- ]
32
- },
33
- "views": {
34
- "memory-eternal": [
35
- {
36
- "id": "memory-eternal.view",
37
- "name": "记忆",
38
- "type": "webview"
39
- }
40
- ]
41
- },
42
- "commands": [
43
- {
44
- "command": "memory-eternal.open",
45
- "title": "Memory Atlas: Open"
46
- }
47
- ]
48
- },
49
- "files": [
50
- "extension.js",
51
- "icon.png",
52
- "README.md"
53
- ]
54
- }
1
+ {
2
+ "name": "memory-eternal",
3
+ "displayName": "Memory Atlas",
4
+ "description": "Memory-eternal: open the local Memory Atlas library, review queue and knowledge graph in a Cursor/VS Code webview.",
5
+ "version": "0.18.0",
6
+ "publisher": "EternalNight996",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/EternalNight996/memory-eternal"
11
+ },
12
+ "engines": {
13
+ "vscode": "^1.80.0"
14
+ },
15
+ "categories": [
16
+ "Other"
17
+ ],
18
+ "activationEvents": [
19
+ "onView:memory-eternal.view",
20
+ "onCommand:memory-eternal.open"
21
+ ],
22
+ "main": "./extension.js",
23
+ "contributes": {
24
+ "viewsContainers": {
25
+ "activitybar": [
26
+ {
27
+ "id": "memory-eternal",
28
+ "title": "Memory Atlas",
29
+ "icon": "icon.png"
30
+ }
31
+ ]
32
+ },
33
+ "views": {
34
+ "memory-eternal": [
35
+ {
36
+ "id": "memory-eternal.view",
37
+ "name": "记忆",
38
+ "type": "webview"
39
+ }
40
+ ]
41
+ },
42
+ "commands": [
43
+ {
44
+ "command": "memory-eternal.open",
45
+ "title": "Memory Atlas: Open"
46
+ }
47
+ ]
48
+ },
49
+ "files": [
50
+ "extension.js",
51
+ "icon.png",
52
+ "README.md"
53
+ ]
54
+ }
@@ -1,42 +1,42 @@
1
- {
2
- "$schema": "urn:dsh-std:community-draft:dsh-plugin:0.15",
3
- "id": "memory-eternal-tui",
4
- "name": "memory-eternal-tui",
5
- "version": "0.16.0",
6
- "manifestVersion": "0.15",
7
- "description": "Open Memory Atlas from dsh-TUI: native /audit scene plus browser launcher.",
8
- "facets": {
9
- "host": {
10
- "entry": "main.js",
11
- "apiVersion": "v1alpha1"
12
- }
13
- },
14
- "requires": {
15
- "contracts": [
16
- {
17
- "apiVersion": "commands.dsh/v1alpha1",
18
- "kind": "Command"
19
- }
20
- ]
21
- },
22
- "permissions": [],
23
- "contributes": {
24
- "commands": [
25
- {
26
- "id": "memory-eternal-tui.open",
27
- "title": "memory",
28
- "description": "Open Memory Atlas in the browser"
29
- },
30
- {
31
- "id": "memory-eternal-tui.audit",
32
- "title": "audit",
33
- "description": "Open the native Memory Atlas audit scene"
34
- }
35
- ]
36
- },
37
- "subscriptions": [],
38
- "license": "MIT",
39
- "source": {
40
- "repository": "https://github.com/EternalNight996/memory-eternal"
41
- }
42
- }
1
+ {
2
+ "$schema": "urn:dsh-std:community-draft:dsh-plugin:0.15",
3
+ "id": "memory-eternal-tui",
4
+ "name": "memory-eternal-tui",
5
+ "version": "0.18.0",
6
+ "manifestVersion": "0.15",
7
+ "description": "Open Memory Atlas from dsh-TUI: native /audit scene plus browser launcher.",
8
+ "facets": {
9
+ "host": {
10
+ "entry": "main.js",
11
+ "apiVersion": "v1alpha1"
12
+ }
13
+ },
14
+ "requires": {
15
+ "contracts": [
16
+ {
17
+ "apiVersion": "commands.dsh/v1alpha1",
18
+ "kind": "Command"
19
+ }
20
+ ]
21
+ },
22
+ "permissions": [],
23
+ "contributes": {
24
+ "commands": [
25
+ {
26
+ "id": "memory-eternal-tui.open",
27
+ "title": "memory",
28
+ "description": "Open Memory Atlas in the browser"
29
+ },
30
+ {
31
+ "id": "memory-eternal-tui.audit",
32
+ "title": "audit",
33
+ "description": "Open the native Memory Atlas audit scene"
34
+ }
35
+ ]
36
+ },
37
+ "subscriptions": [],
38
+ "license": "MIT",
39
+ "source": {
40
+ "repository": "https://github.com/EternalNight996/memory-eternal"
41
+ }
42
+ }
@@ -1,51 +1,51 @@
1
- {
2
- "name": "memory-eternal-tui",
3
- "version": "0.16.0",
4
- "description": "Memory Atlas for dsh-TUI: /audit scene with reason/severity, batch confirmation and reject reasons.",
5
- "type": "module",
6
- "main": "main.js",
7
- "files": [
8
- "main.js",
9
- "scene.js",
10
- "demo-audit.mjs",
11
- "demo.mjs",
12
- "dsh-plugin.json",
13
- "cordis.patch.yml",
14
- "README.md"
15
- ],
16
- "keywords": [
17
- "dsh",
18
- "dsh-tui",
19
- "dsh-tui-plugin",
20
- "memory-eternal",
21
- "memory",
22
- "audit",
23
- "plugin"
24
- ],
25
- "license": "MIT",
26
- "author": "EternalNight996",
27
- "repository": {
28
- "type": "git",
29
- "url": "git+https://github.com/EternalNight996/memory-eternal.git",
30
- "directory": "dsh-tui-plugin"
31
- },
32
- "homepage": "https://github.com/EternalNight996/memory-eternal/tree/main/dsh-tui-plugin",
33
- "bugs": {
34
- "url": "https://github.com/EternalNight996/memory-eternal/issues"
35
- },
36
- "publishConfig": {
37
- "registry": "https://registry.npmjs.org/",
38
- "access": "public"
39
- },
40
- "engines": {
41
- "node": ">=22"
42
- },
43
- "dsh": {
44
- "bundle": {
45
- "patch": "./cordis.patch.yml"
46
- }
47
- },
48
- "peerDependencies": {
49
- "@deepseek-ai/cordis": "^4.0.1"
50
- }
51
- }
1
+ {
2
+ "name": "memory-eternal-tui",
3
+ "version": "0.18.0",
4
+ "description": "Memory Atlas for dsh-TUI: /audit scene with reason/severity, batch confirmation and reject reasons.",
5
+ "type": "module",
6
+ "main": "main.js",
7
+ "files": [
8
+ "main.js",
9
+ "scene.js",
10
+ "demo-audit.mjs",
11
+ "demo.mjs",
12
+ "dsh-plugin.json",
13
+ "cordis.patch.yml",
14
+ "README.md"
15
+ ],
16
+ "keywords": [
17
+ "dsh",
18
+ "dsh-tui",
19
+ "dsh-tui-plugin",
20
+ "memory-eternal",
21
+ "memory",
22
+ "audit",
23
+ "plugin"
24
+ ],
25
+ "license": "MIT",
26
+ "author": "EternalNight996",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/EternalNight996/memory-eternal.git",
30
+ "directory": "dsh-tui-plugin"
31
+ },
32
+ "homepage": "https://github.com/EternalNight996/memory-eternal/tree/main/dsh-tui-plugin",
33
+ "bugs": {
34
+ "url": "https://github.com/EternalNight996/memory-eternal/issues"
35
+ },
36
+ "publishConfig": {
37
+ "registry": "https://registry.npmjs.org/",
38
+ "access": "public"
39
+ },
40
+ "engines": {
41
+ "node": ">=22"
42
+ },
43
+ "dsh": {
44
+ "bundle": {
45
+ "patch": "./cordis.patch.yml"
46
+ }
47
+ },
48
+ "peerDependencies": {
49
+ "@deepseek-ai/cordis": "^4.0.1"
50
+ }
51
+ }