memory-eternal 0.30.0 → 0.30.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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/cursor-extension/package.json +1 -1
- package/docs/INTEGRATIONS.md +96 -0
- package/dsh-tui-plugin/dsh-plugin.json +1 -1
- package/dsh-tui-plugin/package.json +1 -1
- package/lib/client.js +1 -1
- package/llms-install.md +50 -0
- package/orca-plugin/orca-plugin.json +1 -1
- package/package.json +150 -148
- package/web/app.js +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "memory-eternal",
|
|
4
|
-
"version": "0.30.
|
|
4
|
+
"version": "0.30.2",
|
|
5
5
|
"description": "记忆核心(Memory Eternal):对话结束后自动沉淀知识卡到本地记忆库(~/.dsh/memory-vault),支持检索 / 召回 / 审核中心。",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "EternalNight996",
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
[](https://github.com/EternalNight996/memory-eternal/stargazers)
|
|
17
17
|
[](https://www.npmjs.com/package/memory-eternal)
|
|
18
|
-
[](https://github.com/EternalNight996/memory-eternal/releases)
|
|
19
19
|
[](LICENSE)
|
|
20
20
|
|
|
21
21
|
**English (default)** · [简体中文](README.zh-CN.md)
|
|
@@ -49,7 +49,7 @@ npm i -g memory-eternal
|
|
|
49
49
|
dsh-memory connect claude # or: codex / cursor
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**Any MCP client
|
|
52
|
+
**Any MCP client**(MengBot / OpenClaw / Hermes 见 [docs/INTEGRATIONS.md](docs/INTEGRATIONS.md))
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
55
|
npx -y -p memory-eternal dsh-memory mcp
|
package/README.zh-CN.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
[](https://github.com/EternalNight996/memory-eternal/stargazers)
|
|
17
17
|
[](https://www.npmjs.com/package/memory-eternal)
|
|
18
|
-
[](https://github.com/EternalNight996/memory-eternal/releases)
|
|
19
19
|
[](LICENSE)
|
|
20
20
|
|
|
21
21
|
[English (default)](README.md) · **简体中文(镜像)**
|
|
@@ -49,7 +49,7 @@ npm i -g memory-eternal
|
|
|
49
49
|
dsh-memory connect claude # 或:codex / cursor
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
**任意 MCP
|
|
52
|
+
**任意 MCP 客户端**(MengBot / OpenClaw / Hermes 的配置见 [docs/INTEGRATIONS.md](docs/INTEGRATIONS.md))
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
55
|
npx -y -p memory-eternal dsh-memory mcp
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "memory-eternal",
|
|
3
3
|
"displayName": "Memory Atlas",
|
|
4
4
|
"description": "Memory-eternal: open the local Memory Atlas library, review queue and knowledge graph in a Cursor/VS Code webview.",
|
|
5
|
-
"version": "0.30.
|
|
5
|
+
"version": "0.30.2",
|
|
6
6
|
"publisher": "EternalNight996",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"repository": {
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# 第三方 Agent 接入:MengBot / OpenClaw / Hermes
|
|
2
|
+
|
|
3
|
+
memory-eternal 对外就是一个**标准 MCP stdio server**,所以「支持某个 agent」= 在它的 MCP 配置里加一条 server 定义。同一份 SQLite 库可以被多个 agent 共用,也可以按库隔离。
|
|
4
|
+
|
|
5
|
+
## 通用启动命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 不安装、按需拉取(推荐写进各客户端配置)
|
|
9
|
+
npx -y memory-eternal@0.30.0 mcp
|
|
10
|
+
|
|
11
|
+
# 已全局安装
|
|
12
|
+
npm i -g memory-eternal
|
|
13
|
+
dsh-memory mcp
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
MCP 能力(5 个工具):`memory_recall` / `memory_capture` / `memory_stats` / `memory_audit_list` / `memory_revise`。
|
|
17
|
+
|
|
18
|
+
> 写入语义:agent 只能**提交待审卡**,不会直接改主库——审核闸门在 memory-eternal 内部,和 agent 是谁无关。
|
|
19
|
+
|
|
20
|
+
## Hermes Agent(NousResearch)
|
|
21
|
+
|
|
22
|
+
配置文件:`~/.hermes/config.yaml`
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
mcp_servers:
|
|
26
|
+
memory-eternal:
|
|
27
|
+
command: npx
|
|
28
|
+
args: ["-y", "memory-eternal@0.30.0", "mcp"]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Hermes 启动时会自动发现工具。若想限制只暴露部分工具,用它的 per-server 过滤(见官方 MCP 文档)。
|
|
32
|
+
|
|
33
|
+
## OpenClaw
|
|
34
|
+
|
|
35
|
+
配置位置:`mcp.servers`(Control UI 的 **Settings → MCP → Add server → Stdio** 写的就是这里)
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"mcp": {
|
|
40
|
+
"servers": {
|
|
41
|
+
"memory-eternal": {
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "memory-eternal@0.30.0", "mcp"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
验证连通性(OpenClaw 自带探针):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
openclaw mcp doctor memory-eternal --probe
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## MengBot
|
|
57
|
+
|
|
58
|
+
MengBot 的 bot 引擎(Claude Code)支持**按 bot 自定义 MCP server**,stdio 规格是 `{ command, args, env }`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"memory-eternal": {
|
|
63
|
+
"command": "npx",
|
|
64
|
+
"args": ["-y", "memory-eternal@0.30.0", "mcp"],
|
|
65
|
+
"env": {}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
要点:
|
|
71
|
+
|
|
72
|
+
- **每 bot 独立记忆**:给不同 bot 设不同的 `MEMORY_VAULT_DIR`,就是各自独立的库;
|
|
73
|
+
- **共用一份记忆**:不设(或设为同一个目录),多个 bot 共享同一库,审核仍由你在 DSH / Web 面板完成;
|
|
74
|
+
- MengBot 自己的 `MEMORY.md` 仍是它的工作区记忆,两者不冲突:MEMORY.md 是"这个 bot 现在在做的事",memory-eternal 是"审核过的长期结论"。
|
|
75
|
+
|
|
76
|
+
## 验证清单
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# 1) 协议握手(应返回 serverInfo + tools 列表)
|
|
80
|
+
npx -y memory-eternal@0.30.0 mcp
|
|
81
|
+
|
|
82
|
+
# 2) 库路径是否正确
|
|
83
|
+
dsh-memory stats
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
| 现象 | 原因 |
|
|
87
|
+
|---|---|
|
|
88
|
+
| 首次调用卡 10–20s | `npx` 在下载包;写进配置后只发生一次 |
|
|
89
|
+
| 工具列表为空 | 客户端没读到 `mcp` 子命令参数(必须是 `memory-eternal ... mcp`) |
|
|
90
|
+
| 召回为空 | 库是空的,先去 DSH 面板审核几张卡 |
|
|
91
|
+
| 多 agent 看到不同内容 | 各自设了不同的 `MEMORY_VAULT_DIR` |
|
|
92
|
+
|
|
93
|
+
## 相关
|
|
94
|
+
|
|
95
|
+
- [MCP 安装页(llms-install.md)](../llms-install.md)
|
|
96
|
+
- [分发清单(各 MCP 目录)](MCP_DISTRIBUTION.md)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "urn:dsh-std:community-draft:dsh-plugin:0.15",
|
|
3
3
|
"id": "memory-eternal-tui",
|
|
4
4
|
"name": "memory-eternal-tui",
|
|
5
|
-
"version": "0.30.
|
|
5
|
+
"version": "0.30.2",
|
|
6
6
|
"manifestVersion": "0.15",
|
|
7
7
|
"description": "Open Memory Atlas from dsh-TUI: native /audit scene plus browser launcher.",
|
|
8
8
|
"facets": {
|
package/lib/client.js
CHANGED
|
@@ -1033,7 +1033,7 @@ Option A, because:
|
|
|
1033
1033
|
.mc-audit-batchcard > .mc-btn { width: 100%; }
|
|
1034
1034
|
.mc-audit-batchcard > div[style*="flex: 1"] { display: none; }
|
|
1035
1035
|
}
|
|
1036
|
-
`;function jo(t){t.effect(()=>t.locale.register(ta,{zh:Gn,en:Kn}),"memory-eternal: locale");let a=t.locale.bind(ta);t.effect(()=>t.slots.inject("settings.section",()=>t.slots.register({name:"settings.section",id:ta,order:25,label:()=>a("nav"),locale:ta,inject:()=>({})},()=>r.default.createElement(Oo,{t:a}))),"memory-eternal: settings section"),t.effect(()=>t.slots.inject("sidebar.footer.action",()=>t.slots.register({name:"sidebar.footer.action",id:`${ta}:footer`,order:100,label:()=>a("nav"),locale:ta,inject:()=>({})},n=>r.default.createElement(Wo,{t:a,locale:t.locale,wide:!(n&&n.wide===!1)}))),"memory-eternal: sidebar footer action")}function Ho(){let[t,a]=(0,r.useState)(K+"/ui/app");return(0,r.useEffect)(()=>{let n=!0,i=()=>fetch("/memory-eternal/api/web-info").then(s=>s.json()).then(s=>{n&&s&&s.ok&&s.alive!==!1&&s.url&&a(s.url.endsWith("/")?s.url:s.url+"/")}).catch(()=>{});return fetch(K+"/ui/app",{method:"HEAD"}).then(s=>{if(n&&!s.ok)return i()}).catch(()=>n?i():void 0),()=>{n=!1}},[]),t}function Oo({t}){return(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,e.jsx)("style",{children:ht}),(0,e.jsx)(Jn,{t,onReload:()=>{},version:0})]})}function Wo({t,locale:a,wide:n}){let[i,s]=(0,r.useState)(!1);return(0,e.jsxs)("div",{className:`me-footer${n?"":" rail"}`,children:[(0,e.jsx)("style",{children:ht}),(0,e.jsxs)("button",{type:"button",className:"me-footer-btn",onClick:()=>s(!0),"aria-label":t("nav"),title:t("nav"),children:[(0,e.jsx)("span",{className:"me-footer-ico","aria-hidden":"true",children:(0,e.jsx)(Go,{})}),(0,e.jsx)("span",{className:"me-footer-label",children:t("nav")})]}),i&&(0,e.jsx)(qo,{t,locale:a,onClose:()=>s(!1)})]})}function _o(){return(0,e.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,e.jsx)("rect",{x:"2.9",y:"2.9",width:"10.2",height:"10.2",rx:"1.7"})})}function Uo(){return(0,e.jsxs)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,e.jsx)("rect",{x:"2.6",y:"5.4",width:"8",height:"8",rx:"1.5"}),(0,e.jsx)("path",{d:"M5.6 5.4V4.1c0-.9.7-1.6 1.6-1.6h4.7c.9 0 1.6.7 1.6 1.6v4.7c0 .9-.7 1.6-1.6 1.6h-1.3"})]})}function $o(){return(0,e.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:(0,e.jsx)("path",{d:"M3.9 3.9l8.2 8.2M12.1 3.9l-8.2 8.2"})})}function qo({t,locale:a,onClose:n,tab:i}){let[s,m]=(0,r.useState)(!1),[u,k]=(0,r.useState)(!1),f=(0,r.useRef)(null),h=Ho(),p=(0,r.useCallback)(V=>a&&typeof a.subscribe=="function"?a.subscribe(V):()=>{},[a]),w=(0,r.useCallback)(()=>a&&typeof a.getSnapshot=="function"?a.getSnapshot():null,[a]),x=(0,r.useSyncExternalStore)(p,w),T=x&&(x.active==="zh"||x.active==="en")?x.active:null,G=(0,r.useRef)(null);G.current===null&&T&&(G.current=T);let H=(0,r.useMemo)(()=>{let V=G.current?`lang=${G.current}`:"";if(i==="config")return`${K}/ui/config?tab=config${V?`&${V}`:""}`;let L=h.replace(/\/$/,""),Y=L.endsWith("/ui/app")?"?":"/?";return i?`${L}${Y}tab=${i}${V?`&${V}`:""}`:V?`${L}${Y}${V}`:h},[h,i]);(0,r.useEffect)(()=>{let V=f.current&&f.current.contentWindow;V&&T&&V.postMessage({source:"memory-eternal",type:"locale",lang:T},"*")},[T]),(0,r.useEffect)(()=>{let V=L=>{L.key==="Escape"&&n()};return window.addEventListener("keydown",V),()=>window.removeEventListener("keydown",V)},[n]);let R=(0,e.jsxs)("div",{className:"me-overlay-top",onClick:n,children:[(0,e.jsx)("style",{children:ht}),(0,e.jsx)("div",{className:"me-modal"+(s?" me-modal-full":""),onClick:V=>V.stopPropagation(),children:(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,position:"relative"},children:[(0,e.jsxs)("div",{className:"me-wctl",children:[(0,e.jsx)("button",{type:"button",className:"me-wctl-btn","data-me-wctl":s?"restore":"full","aria-pressed":s,onClick:()=>m(V=>!V),"aria-label":t(s?"exitFullscreen":"enterFullscreen"),title:t(s?"exitFullscreen":"enterFullscreen"),children:s?(0,e.jsx)(Uo,{}):(0,e.jsx)(_o,{})}),(0,e.jsx)("button",{type:"button",className:"me-wctl-btn me-wctl-close","data-me-wctl":"close",onClick:n,"aria-label":t("close"),title:t("close"),children:(0,e.jsx)($o,{})})]}),(0,e.jsx)("iframe",{ref:f,src:H,title:"memory-eternal",allow:"clipboard-write; clipboard-read",onLoad:()=>k(!0),style:{width:"100%",flex:1,border:0,borderRadius:"inherit",background:"transparent"}}),!u&&(0,e.jsxs)("div",{className:"me-frame-boot",role:"status","aria-live":"polite",children:[(0,e.jsx)(ma,{}),(0,e.jsx)("span",{className:"me-loading-text",children:t("loading")})]})]})})]});return typeof document>"u"?R:(0,qn.createPortal)(R,document.body)}function Go(){return(0,e.jsxs)("svg",{viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,e.jsx)("defs",{children:(0,e.jsxs)("linearGradient",{id:"mg-brain",x1:"0",y1:"0",x2:"1",y2:"1",children:[(0,e.jsx)("stop",{offset:"0%",stopColor:"#FFC46B"}),(0,e.jsx)("stop",{offset:"50%",stopColor:"#F97316"}),(0,e.jsx)("stop",{offset:"100%",stopColor:"#EA580C"})]})}),(0,e.jsx)("path",{fill:"url(#mg-brain)",d:"M12 4.5a3.2 3.2 0 0 0-6.4.1 4.1 4.1 0 0 0-2.7 5.9 4.1 4.1 0 0 0 .6 6.7A4.2 4.2 0 0 0 12 18.2Z"}),(0,e.jsx)("path",{fill:"url(#mg-brain)",d:"M12 4.5a3.2 3.2 0 0 1 6.4.1 4.1 4.1 0 0 1 2.7 5.9 4.1 4.1 0 0 1-.6 6.7A4.2 4.2 0 0 1 12 18.2Z"}),(0,e.jsx)("path",{d:"M12 9.2c-.8-1.4-1.7-2-3.1-2.2M12 9.2c.8-1.4 1.7-2 3.1-2.2M12 12.4c-1.2 1-3.2 1.6-5 1.4M12 12.4c1.2 1 3.2 1.6 5 1.4M12 13.2v4",fill:"none",stroke:"rgba(255,255,255,0.62)",strokeWidth:"1",strokeLinecap:"round"}),(0,e.jsx)("circle",{cx:"12",cy:"8.6",r:"1.1",fill:"rgba(255,255,255,0.85)"})]})}var aa="0.30.
|
|
1036
|
+
`;function jo(t){t.effect(()=>t.locale.register(ta,{zh:Gn,en:Kn}),"memory-eternal: locale");let a=t.locale.bind(ta);t.effect(()=>t.slots.inject("settings.section",()=>t.slots.register({name:"settings.section",id:ta,order:25,label:()=>a("nav"),locale:ta,inject:()=>({})},()=>r.default.createElement(Oo,{t:a}))),"memory-eternal: settings section"),t.effect(()=>t.slots.inject("sidebar.footer.action",()=>t.slots.register({name:"sidebar.footer.action",id:`${ta}:footer`,order:100,label:()=>a("nav"),locale:ta,inject:()=>({})},n=>r.default.createElement(Wo,{t:a,locale:t.locale,wide:!(n&&n.wide===!1)}))),"memory-eternal: sidebar footer action")}function Ho(){let[t,a]=(0,r.useState)(K+"/ui/app");return(0,r.useEffect)(()=>{let n=!0,i=()=>fetch("/memory-eternal/api/web-info").then(s=>s.json()).then(s=>{n&&s&&s.ok&&s.alive!==!1&&s.url&&a(s.url.endsWith("/")?s.url:s.url+"/")}).catch(()=>{});return fetch(K+"/ui/app",{method:"HEAD"}).then(s=>{if(n&&!s.ok)return i()}).catch(()=>n?i():void 0),()=>{n=!1}},[]),t}function Oo({t}){return(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[(0,e.jsx)("style",{children:ht}),(0,e.jsx)(Jn,{t,onReload:()=>{},version:0})]})}function Wo({t,locale:a,wide:n}){let[i,s]=(0,r.useState)(!1);return(0,e.jsxs)("div",{className:`me-footer${n?"":" rail"}`,children:[(0,e.jsx)("style",{children:ht}),(0,e.jsxs)("button",{type:"button",className:"me-footer-btn",onClick:()=>s(!0),"aria-label":t("nav"),title:t("nav"),children:[(0,e.jsx)("span",{className:"me-footer-ico","aria-hidden":"true",children:(0,e.jsx)(Go,{})}),(0,e.jsx)("span",{className:"me-footer-label",children:t("nav")})]}),i&&(0,e.jsx)(qo,{t,locale:a,onClose:()=>s(!1)})]})}function _o(){return(0,e.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:(0,e.jsx)("rect",{x:"2.9",y:"2.9",width:"10.2",height:"10.2",rx:"1.7"})})}function Uo(){return(0,e.jsxs)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4","aria-hidden":"true",children:[(0,e.jsx)("rect",{x:"2.6",y:"5.4",width:"8",height:"8",rx:"1.5"}),(0,e.jsx)("path",{d:"M5.6 5.4V4.1c0-.9.7-1.6 1.6-1.6h4.7c.9 0 1.6.7 1.6 1.6v4.7c0 .9-.7 1.6-1.6 1.6h-1.3"})]})}function $o(){return(0,e.jsx)("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round","aria-hidden":"true",children:(0,e.jsx)("path",{d:"M3.9 3.9l8.2 8.2M12.1 3.9l-8.2 8.2"})})}function qo({t,locale:a,onClose:n,tab:i}){let[s,m]=(0,r.useState)(!1),[u,k]=(0,r.useState)(!1),f=(0,r.useRef)(null),h=Ho(),p=(0,r.useCallback)(V=>a&&typeof a.subscribe=="function"?a.subscribe(V):()=>{},[a]),w=(0,r.useCallback)(()=>a&&typeof a.getSnapshot=="function"?a.getSnapshot():null,[a]),x=(0,r.useSyncExternalStore)(p,w),T=x&&(x.active==="zh"||x.active==="en")?x.active:null,G=(0,r.useRef)(null);G.current===null&&T&&(G.current=T);let H=(0,r.useMemo)(()=>{let V=G.current?`lang=${G.current}`:"";if(i==="config")return`${K}/ui/config?tab=config${V?`&${V}`:""}`;let L=h.replace(/\/$/,""),Y=L.endsWith("/ui/app")?"?":"/?";return i?`${L}${Y}tab=${i}${V?`&${V}`:""}`:V?`${L}${Y}${V}`:h},[h,i]);(0,r.useEffect)(()=>{let V=f.current&&f.current.contentWindow;V&&T&&V.postMessage({source:"memory-eternal",type:"locale",lang:T},"*")},[T]),(0,r.useEffect)(()=>{let V=L=>{L.key==="Escape"&&n()};return window.addEventListener("keydown",V),()=>window.removeEventListener("keydown",V)},[n]);let R=(0,e.jsxs)("div",{className:"me-overlay-top",onClick:n,children:[(0,e.jsx)("style",{children:ht}),(0,e.jsx)("div",{className:"me-modal"+(s?" me-modal-full":""),onClick:V=>V.stopPropagation(),children:(0,e.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0,position:"relative"},children:[(0,e.jsxs)("div",{className:"me-wctl",children:[(0,e.jsx)("button",{type:"button",className:"me-wctl-btn","data-me-wctl":s?"restore":"full","aria-pressed":s,onClick:()=>m(V=>!V),"aria-label":t(s?"exitFullscreen":"enterFullscreen"),title:t(s?"exitFullscreen":"enterFullscreen"),children:s?(0,e.jsx)(Uo,{}):(0,e.jsx)(_o,{})}),(0,e.jsx)("button",{type:"button",className:"me-wctl-btn me-wctl-close","data-me-wctl":"close",onClick:n,"aria-label":t("close"),title:t("close"),children:(0,e.jsx)($o,{})})]}),(0,e.jsx)("iframe",{ref:f,src:H,title:"memory-eternal",allow:"clipboard-write; clipboard-read",onLoad:()=>k(!0),style:{width:"100%",flex:1,border:0,borderRadius:"inherit",background:"transparent"}}),!u&&(0,e.jsxs)("div",{className:"me-frame-boot",role:"status","aria-live":"polite",children:[(0,e.jsx)(ma,{}),(0,e.jsx)("span",{className:"me-loading-text",children:t("loading")})]})]})})]});return typeof document>"u"?R:(0,qn.createPortal)(R,document.body)}function Go(){return(0,e.jsxs)("svg",{viewBox:"0 0 24 24","aria-hidden":"true",children:[(0,e.jsx)("defs",{children:(0,e.jsxs)("linearGradient",{id:"mg-brain",x1:"0",y1:"0",x2:"1",y2:"1",children:[(0,e.jsx)("stop",{offset:"0%",stopColor:"#FFC46B"}),(0,e.jsx)("stop",{offset:"50%",stopColor:"#F97316"}),(0,e.jsx)("stop",{offset:"100%",stopColor:"#EA580C"})]})}),(0,e.jsx)("path",{fill:"url(#mg-brain)",d:"M12 4.5a3.2 3.2 0 0 0-6.4.1 4.1 4.1 0 0 0-2.7 5.9 4.1 4.1 0 0 0 .6 6.7A4.2 4.2 0 0 0 12 18.2Z"}),(0,e.jsx)("path",{fill:"url(#mg-brain)",d:"M12 4.5a3.2 3.2 0 0 1 6.4.1 4.1 4.1 0 0 1 2.7 5.9 4.1 4.1 0 0 1-.6 6.7A4.2 4.2 0 0 1 12 18.2Z"}),(0,e.jsx)("path",{d:"M12 9.2c-.8-1.4-1.7-2-3.1-2.2M12 9.2c.8-1.4 1.7-2 3.1-2.2M12 12.4c-1.2 1-3.2 1.6-5 1.4M12 12.4c1.2 1 3.2 1.6 5 1.4M12 13.2v4",fill:"none",stroke:"rgba(255,255,255,0.62)",strokeWidth:"1",strokeLinecap:"round"}),(0,e.jsx)("circle",{cx:"12",cy:"8.6",r:"1.1",fill:"rgba(255,255,255,0.85)"})]})}var aa="0.30.2";function Ko({t}){let[a,n]=(0,r.useState)(""),i="dsh-memory tui",s="dsh-memory tui --write",m=async(h,p)=>{try{await navigator.clipboard.writeText(h),n(p),setTimeout(()=>n(""),1600)}catch{}},u={border:"1px solid #3a404a",borderRadius:14,background:"#22262d",padding:"16px 18px"},k={margin:"10px 0 0",padding:"12px 14px",borderRadius:10,background:"#171a1f",border:"1px solid #333943",color:"#f3f5f8",fontSize:12.5,lineHeight:1.7,overflowX:"auto",fontFamily:"ui-monospace, Consolas, monospace"},f={marginTop:10,border:"1px solid #4a515c",background:"transparent",color:"#ffb08a",borderRadius:9,padding:"7px 12px",fontSize:12,cursor:"pointer"};return(0,e.jsxs)("div",{style:{padding:"22px 26px 34px",maxWidth:1040,color:"#f3f5f8"},children:[(0,e.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:12,flexWrap:"wrap"},children:[(0,e.jsx)("h2",{style:{margin:0,fontSize:24,letterSpacing:"-.02em"},children:t("terminalTitle")}),(0,e.jsx)("span",{style:{color:"#99a1ac",fontSize:12},children:"TUI \xB7 LIVE \xB7 dsh-tui"})]}),(0,e.jsx)("p",{style:{margin:"9px 0 20px",color:"#aeb5bf",fontSize:13.5,lineHeight:1.8},children:t("terminalIntro")}),(0,e.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1.1fr) minmax(0, .9fr)",gap:14},children:[(0,e.jsxs)("div",{style:u,children:[(0,e.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",t("terminalRun")]}),(0,e.jsx)("pre",{style:k,children:i}),(0,e.jsx)("button",{type:"button",style:f,onClick:()=>m(i,"run"),children:a==="run"?"\u2713 "+t("terminalCopied"):"\u29C9 "+t("terminalCopy")}),(0,e.jsxs)("div",{style:{marginTop:12,color:"#99a1ac",fontSize:12,lineHeight:1.7},children:["\u9ED8\u8BA4\u8BFB\u53D6\u771F\u5B9E\u8BB0\u5FC6\u5E93\u4E0E\u5F85\u5BA1\u961F\u5217\uFF1B\u53EA\u8BFB\uFF0C\u786E\u8BA4\u540E\u624D\u7528 `--write`\u3002\u793A\u4F8B\u6570\u636E\u7528 `--demo`\u3002",(0,e.jsx)("br",{}),"\u6CA1\u6709 `dsh-memory` \u547D\u4EE4\u65F6\uFF1A`npx -p memory-eternal dsh-memory tui`"]})]}),(0,e.jsxs)("div",{style:u,children:[(0,e.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",t("terminalTui")]}),(0,e.jsx)("pre",{style:k,children:s}),(0,e.jsx)("button",{type:"button",style:f,onClick:()=>m(s,"tui"),children:a==="tui"?"\u2713 "+t("terminalCopied"):"\u29C9 "+t("terminalCopy")}),(0,e.jsx)("div",{style:{marginTop:12,color:"#99a1ac",fontSize:12,lineHeight:1.7},children:"\u771F\u5B9E\u6279\u51C6/\u9A73\u56DE\uFF1B\u4E0D\u786E\u5B9A\u65F6\u5148\u7528\u53EA\u8BFB\u6A21\u5F0F\u3002"})]})]}),(0,e.jsxs)("div",{style:{...u,marginTop:14},children:[(0,e.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",t("terminalPreview")]}),(0,e.jsx)("pre",{style:{...k,marginTop:10,color:"#d7dce3",fontSize:12,lineHeight:1.5},children:`\u256D\u2500 MEMORY ATLAS / \u5F85\u5BA1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E
|
|
1037
1037
|
\u2502 \u7C7B\u578B \u25CF \u5168\u90E8 7 \u25CB \u9879\u76EE 3 \u25CB \u77E5\u8BC6 1 \u25CB \u6559\u8BAD 1 \u2502
|
|
1038
1038
|
\u2502 \u2502
|
|
1039
1039
|
\u2502 \u25A3 \u5168\u9009 7 \u5DF2\u9009 3 s \u5168\u9009 \u2502
|
package/llms-install.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# memory-eternal — install notes for AI agents
|
|
2
|
+
|
|
3
|
+
You are installing an MCP server: a local-first long-term memory for coding agents.
|
|
4
|
+
|
|
5
|
+
## What it does
|
|
6
|
+
|
|
7
|
+
- Stores knowledge cards in a local SQLite vault (`~/.dsh/memory-vault` by default) plus a Markdown mirror.
|
|
8
|
+
- Exposes them over **MCP** (stdio) so Claude Code, Codex, Cursor, Cline or any MCP client can call `memory_recall`.
|
|
9
|
+
- Nothing leaves the machine; no account, no API key required to read memory.
|
|
10
|
+
|
|
11
|
+
## Install (MCP client)
|
|
12
|
+
|
|
13
|
+
Use this server entry in the client's `mcpServers` config:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"mcpServers": {
|
|
18
|
+
"memory-eternal": {
|
|
19
|
+
"command": "npx",
|
|
20
|
+
"args": ["-y", "-p", "memory-eternal", "dsh-memory", "mcp"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or install globally:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm i -g memory-eternal
|
|
30
|
+
dsh-memory connect claude # configures Claude Code / Codex / Cursor automatically
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Verify
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx -y -p memory-eternal dsh-memory stats --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
A fresh vault reports `total: 0`; that is a successful start.
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- Requires Node.js >= 22.
|
|
44
|
+
- Optional: DSH users can instead install the plugin (`dsh plugin --profile desktop add memory-eternal`) to get the review UI.
|
|
45
|
+
- Write paths go through a review queue by design; `memory_recall` only returns approved cards.
|
|
46
|
+
|
|
47
|
+
## Other agents (MengBot / OpenClaw / Hermes / any MCP client)
|
|
48
|
+
|
|
49
|
+
memory-eternal is a standard MCP stdio server: `npx -y memory-eternal@0.30.0 mcp`.
|
|
50
|
+
Client-specific config (Hermes `mcp_servers`, OpenClaw `mcp.servers`, MengBot per-bot stdio spec) is documented in [docs/INTEGRATIONS.md](docs/INTEGRATIONS.md).
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"id": "memory-eternal",
|
|
4
4
|
"publisher": "eternalnight996",
|
|
5
5
|
"name": "memory-eternal",
|
|
6
|
-
"version": "0.30.
|
|
6
|
+
"version": "0.30.2",
|
|
7
7
|
"description": "Memory Atlas for Orca: open the local memory vault, pending review and knowledge graph from a sandboxed Orca panel.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "EternalNight996",
|
package/package.json
CHANGED
|
@@ -1,148 +1,150 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "memory-eternal",
|
|
3
|
-
"version": "0.30.
|
|
4
|
-
"description": "记忆核心(Memory Eternal):自研的 DeepSeek Harness 记忆插件,不移植任何既有记忆框架——对话结束后自动沉淀知识卡到本地 Markdown Vault(自研去重、自研 CJK 检索、可 git 管理),设置页提供图形化知识库(统计 / 搜索 / 知识图谱 + 侧边栏一键弹窗),Agent 通过 memory_recall 工具按需召回历史上下文。零人工干预。",
|
|
5
|
-
"icon": "assets/icon.png",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/EternalNight996/memory-eternal.git"
|
|
10
|
-
},
|
|
11
|
-
"homepage": "https://github.com/EternalNight996/memory-eternal",
|
|
12
|
-
"author": "EternalNight996",
|
|
13
|
-
"publishConfig": {
|
|
14
|
-
"registry": "https://registry.npmjs.org/"
|
|
15
|
-
},
|
|
16
|
-
"type": "module",
|
|
17
|
-
"main": "index.js",
|
|
18
|
-
"bin": {
|
|
19
|
-
"dsh-memory": "bin/dsh-memory.mjs"
|
|
20
|
-
},
|
|
21
|
-
"exports": {
|
|
22
|
-
".": "./index.js",
|
|
23
|
-
"./client": "./lib/client.js",
|
|
24
|
-
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
25
|
-
"./package.json": "./package.json"
|
|
26
|
-
},
|
|
27
|
-
"files": [
|
|
28
|
-
"index.js",
|
|
29
|
-
"lib",
|
|
30
|
-
"bin",
|
|
31
|
-
"scripts",
|
|
32
|
-
"examples",
|
|
33
|
-
"web",
|
|
34
|
-
"hooks",
|
|
35
|
-
"skills",
|
|
36
|
-
"assets/icon.png",
|
|
37
|
-
"orca-plugin",
|
|
38
|
-
"dsh-tui-plugin",
|
|
39
|
-
"cursor-extension",
|
|
40
|
-
".claude-plugin",
|
|
41
|
-
".codex-plugin",
|
|
42
|
-
".cursor-plugin",
|
|
43
|
-
".mcp.json",
|
|
44
|
-
"cordis.patch.yml",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"@deepseek-ai/
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"react": "18.3.1",
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
"
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
"0.1.5-
|
|
138
|
-
"0.1.
|
|
139
|
-
"0.
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "memory-eternal",
|
|
3
|
+
"version": "0.30.2",
|
|
4
|
+
"description": "记忆核心(Memory Eternal):自研的 DeepSeek Harness 记忆插件,不移植任何既有记忆框架——对话结束后自动沉淀知识卡到本地 Markdown Vault(自研去重、自研 CJK 检索、可 git 管理),设置页提供图形化知识库(统计 / 搜索 / 知识图谱 + 侧边栏一键弹窗),Agent 通过 memory_recall 工具按需召回历史上下文。零人工干预。",
|
|
5
|
+
"icon": "assets/icon.png",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/EternalNight996/memory-eternal.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/EternalNight996/memory-eternal",
|
|
12
|
+
"author": "EternalNight996",
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"registry": "https://registry.npmjs.org/"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"main": "index.js",
|
|
18
|
+
"bin": {
|
|
19
|
+
"dsh-memory": "bin/dsh-memory.mjs"
|
|
20
|
+
},
|
|
21
|
+
"exports": {
|
|
22
|
+
".": "./index.js",
|
|
23
|
+
"./client": "./lib/client.js",
|
|
24
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
25
|
+
"./package.json": "./package.json"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"index.js",
|
|
29
|
+
"lib",
|
|
30
|
+
"bin",
|
|
31
|
+
"scripts",
|
|
32
|
+
"examples",
|
|
33
|
+
"web",
|
|
34
|
+
"hooks",
|
|
35
|
+
"skills",
|
|
36
|
+
"assets/icon.png",
|
|
37
|
+
"orca-plugin",
|
|
38
|
+
"dsh-tui-plugin",
|
|
39
|
+
"cursor-extension",
|
|
40
|
+
".claude-plugin",
|
|
41
|
+
".codex-plugin",
|
|
42
|
+
".cursor-plugin",
|
|
43
|
+
".mcp.json",
|
|
44
|
+
"cordis.patch.yml",
|
|
45
|
+
"docs/INTEGRATIONS.md",
|
|
46
|
+
"llms-install.md",
|
|
47
|
+
"README.md",
|
|
48
|
+
"README.zh-CN.md",
|
|
49
|
+
"LICENSE"
|
|
50
|
+
],
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=22",
|
|
53
|
+
"dsh": ">=0.1.5-alpha.2 <0.3.0-0"
|
|
54
|
+
},
|
|
55
|
+
"keywords": [
|
|
56
|
+
"deepseek-harness",
|
|
57
|
+
"dsh",
|
|
58
|
+
"dsh-plugin",
|
|
59
|
+
"plugin",
|
|
60
|
+
"memory",
|
|
61
|
+
"knowledge-base",
|
|
62
|
+
"vault",
|
|
63
|
+
"markdown",
|
|
64
|
+
"knowledge-graph",
|
|
65
|
+
"rag",
|
|
66
|
+
"second-brain"
|
|
67
|
+
],
|
|
68
|
+
"scripts": {
|
|
69
|
+
"build": "node build.mjs",
|
|
70
|
+
"build:client": "node build.mjs",
|
|
71
|
+
"prepublishOnly": "node build.mjs",
|
|
72
|
+
"release": "node scripts/release.mjs",
|
|
73
|
+
"release:dry": "node scripts/release.mjs --dry-run",
|
|
74
|
+
"panel-check": "node scripts/panel-check.mjs",
|
|
75
|
+
"test": "node build.mjs && node tests/vault.test.mjs && node tests/capture.test.mjs && node tests/capture-route.test.mjs && node tests/stall.test.mjs && node tests/vault-path.test.mjs && node tests/vault-resolve.test.mjs && node tests/minhash.test.mjs && node tests/settings-save.test.mjs && node tests/config-coverage.test.mjs && node tests/config-sync.test.mjs && node tests/config-merge.test.mjs && node tests/sse.test.mjs && node tests/api.test.mjs && node tests/import-roundtrip.test.mjs && node tests/graph-perf.test.mjs && node tests/graph-force.test.mjs && node tests/settings-compat.test.mjs && node tests/node-bin.test.mjs && node tests/watchdog-lock.test.mjs && node tests/markdown.test.mjs && node tests/feedback.test.mjs && node tests/graph-subgraph.test.mjs && node tests/graph-lod.test.mjs && node tests/graph-warmup.test.mjs && node tests/loading-hints.test.mjs && node tests/web-entry.test.mjs && node tests/tui-scroll.test.mjs && node tests/tui-audit-scene.test.mjs && node tests/tui-plugin-boot.test.mjs && node tests/capture-session-id.test.mjs && node tests/ssr.test.mjs && node tests/window-controls.test.mjs && node tests/web-assets.test.mjs && node tests/manifests.test.mjs && node tests/two-store.test.mjs && node tests/noise-gate.test.mjs && node tests/e2e-recall.test.mjs && node tests/issue-fixes.test.mjs && node tests/issue-fixes-2.test.mjs && node tests/issue-fixes-3.test.mjs && node tests/watchdog-orphans.test.mjs && node tests/watchdog-restart.test.mjs && node tests/readme-i18n.test.mjs && node tests/issue-fixes-4.test.mjs && node tests/host-drain.test.mjs && node tests/e2e-host-drain.mjs && node tests/issue-fixes-5.test.mjs && node tests/issue-fixes-6.test.mjs && node tests/capture-json-repair.test.mjs && node tests/csrf-origin.test.mjs && node tests/watchdog-orphan-web.test.mjs && node tests/config-validate.test.mjs && node tests/issue-fixes-8.test.mjs && node tests/issue-fixes-9.test.mjs && node tests/release-verify.test.mjs && node tests/refine.test.mjs && node tests/db-restore.test.mjs && node tests/align.test.mjs && node tests/tags-normalize.test.mjs && node tests/resident-state.test.mjs && node tests/llm-route.test.mjs && node tests/host-managed.test.mjs && node tests/replace-claim.test.mjs && node tests/version-check-self.test.mjs && node tests/setup-codex.test.mjs && node tests/listener-netstat.test.mjs && node tests/issue-46-overlay.test.mjs && node tests/graph-initial-zoom.test.mjs && node tests/card-head-actions.test.mjs && node tests/card-reader-ux.test.mjs && node tests/tag-filter.test.mjs && node tests/ui-overflow.test.mjs && node tests/version-card-state.test.mjs && node tests/llm-routes-proxy.test.mjs && node tests/model-strikes.test.mjs && node tests/support-bundle.test.mjs && node tests/health-panel.test.mjs && node tests/issue-48-timeout.test.mjs && node tests/setup-node-path.test.mjs && node tests/capture-kind.test.mjs && node tests/core-memory.test.mjs && node tests/skill-cards.test.mjs && node tests/audit-search.test.mjs && node tests/news.test.mjs && node tests/news-feed.test.mjs && node tests/ledger.test.mjs && node tests/issue-55-timezone.test.mjs && node tests/recycle-center.test.mjs && node tests/news-follows.test.mjs && node tests/news-digest.test.mjs && node tests/search-index.test.mjs && node tests/star-prompt.test.mjs && node tests/working-memory.test.mjs && node tests/mcp-manifests.test.mjs"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@deepseek-ai/schemastery": "^3.18.1"
|
|
79
|
+
},
|
|
80
|
+
"peerDependencies": {
|
|
81
|
+
"@deepseek-ai/cordis": "^4.0.1",
|
|
82
|
+
"@deepseek-ai/dsh-llm": ">=0.1.0-rc.2 <0.3.0-0",
|
|
83
|
+
"@deepseek-ai/dsh-tools": ">=0.1.0-rc.2 <0.3.0-0"
|
|
84
|
+
},
|
|
85
|
+
"devDependencies": {
|
|
86
|
+
"@types/react": "^18.3.1",
|
|
87
|
+
"esbuild": "^0.24.0",
|
|
88
|
+
"react": "18.3.1",
|
|
89
|
+
"react-dom": "18.3.1"
|
|
90
|
+
},
|
|
91
|
+
"dsh": {
|
|
92
|
+
"client": {
|
|
93
|
+
"platform": "web",
|
|
94
|
+
"inject": [
|
|
95
|
+
"@deepseek-ai/dsh-client-ui-settings",
|
|
96
|
+
"@deepseek-ai/dsh-client-locale"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"bundle": {
|
|
100
|
+
"patch": "./cordis.patch.yml"
|
|
101
|
+
},
|
|
102
|
+
"marketplace": {
|
|
103
|
+
"profiles": [
|
|
104
|
+
"web",
|
|
105
|
+
"desktop"
|
|
106
|
+
],
|
|
107
|
+
"requiresBuildApproval": false,
|
|
108
|
+
"requiresRestart": true,
|
|
109
|
+
"manualSteps": false
|
|
110
|
+
},
|
|
111
|
+
"permissions": {
|
|
112
|
+
"level": "medium",
|
|
113
|
+
"files": "read-write",
|
|
114
|
+
"network": "restricted",
|
|
115
|
+
"commands": "node",
|
|
116
|
+
"credentials": [],
|
|
117
|
+
"externalServices": [
|
|
118
|
+
"Public RSS/Atom feeds: 量子位, 雷锋网, 钛媒体, InfoQ 中文, TechCrunch AI, The Verge AI, MIT Technology Review AI, Google DeepMind",
|
|
119
|
+
"Hacker News Algolia API (AI story ranking)"
|
|
120
|
+
],
|
|
121
|
+
"notes": "Read/write under ~/.dsh/memory-vault only. Memory data stays local; only the optional News page fetches the fixed public RSS/HN sources above on demand (titles, excerpts, links). No credentials, no shell. Hooks/MCP run via the `node` binary that hosts the DSH process."
|
|
122
|
+
},
|
|
123
|
+
"lifecycle": {
|
|
124
|
+
"scripts": [
|
|
125
|
+
"prepare",
|
|
126
|
+
"prepublishOnly"
|
|
127
|
+
],
|
|
128
|
+
"details": {
|
|
129
|
+
"prepare": "node build.mjs",
|
|
130
|
+
"prepublishOnly": "node build.mjs"
|
|
131
|
+
},
|
|
132
|
+
"notes": "Only `prepare` and `prepublishOnly` run `node build.mjs` (esbuild client bundling). No preinstall/install/postinstall hooks, no remote downloads, no native builds."
|
|
133
|
+
},
|
|
134
|
+
"compatibility": {
|
|
135
|
+
"dsh": ">=0.1.5-alpha.2 <0.3.0-0",
|
|
136
|
+
"dshReleases": {
|
|
137
|
+
"0.1.5-alpha.2": "compatible",
|
|
138
|
+
"0.1.5-rc.1": "compatible",
|
|
139
|
+
"0.1.5-rc.2": "compatible",
|
|
140
|
+
"0.1.7-rc.2": "compatible",
|
|
141
|
+
"0.2.0-rc.2": "compatible"
|
|
142
|
+
},
|
|
143
|
+
"node": ">=22",
|
|
144
|
+
"profiles": [
|
|
145
|
+
"web",
|
|
146
|
+
"desktop"
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
package/web/app.js
CHANGED
|
@@ -1035,7 +1035,7 @@ Option A, because:
|
|
|
1035
1035
|
.mc-audit-batchcard > .mc-btn { width: 100%; }
|
|
1036
1036
|
.mc-audit-batchcard > div[style*="flex: 1"] { display: none; }
|
|
1037
1037
|
}
|
|
1038
|
-
`;var Ia="0.30.
|
|
1038
|
+
`;var Ia="0.30.2";function i0({t:e}){let[t,n]=(0,p.useState)(""),a="dsh-memory tui",o="dsh-memory tui --write",i=async(u,m)=>{try{await navigator.clipboard.writeText(u),n(m),setTimeout(()=>n(""),1600)}catch{}},l={border:"1px solid #3a404a",borderRadius:14,background:"#22262d",padding:"16px 18px"},s={margin:"10px 0 0",padding:"12px 14px",borderRadius:10,background:"#171a1f",border:"1px solid #333943",color:"#f3f5f8",fontSize:12.5,lineHeight:1.7,overflowX:"auto",fontFamily:"ui-monospace, Consolas, monospace"},c={marginTop:10,border:"1px solid #4a515c",background:"transparent",color:"#ffb08a",borderRadius:9,padding:"7px 12px",fontSize:12,cursor:"pointer"};return(0,r.jsxs)("div",{style:{padding:"22px 26px 34px",maxWidth:1040,color:"#f3f5f8"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:12,flexWrap:"wrap"},children:[(0,r.jsx)("h2",{style:{margin:0,fontSize:24,letterSpacing:"-.02em"},children:e("terminalTitle")}),(0,r.jsx)("span",{style:{color:"#99a1ac",fontSize:12},children:"TUI \xB7 LIVE \xB7 dsh-tui"})]}),(0,r.jsx)("p",{style:{margin:"9px 0 20px",color:"#aeb5bf",fontSize:13.5,lineHeight:1.8},children:e("terminalIntro")}),(0,r.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1.1fr) minmax(0, .9fr)",gap:14},children:[(0,r.jsxs)("div",{style:l,children:[(0,r.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",e("terminalRun")]}),(0,r.jsx)("pre",{style:s,children:a}),(0,r.jsx)("button",{type:"button",style:c,onClick:()=>i(a,"run"),children:t==="run"?"\u2713 "+e("terminalCopied"):"\u29C9 "+e("terminalCopy")}),(0,r.jsxs)("div",{style:{marginTop:12,color:"#99a1ac",fontSize:12,lineHeight:1.7},children:["\u9ED8\u8BA4\u8BFB\u53D6\u771F\u5B9E\u8BB0\u5FC6\u5E93\u4E0E\u5F85\u5BA1\u961F\u5217\uFF1B\u53EA\u8BFB\uFF0C\u786E\u8BA4\u540E\u624D\u7528 `--write`\u3002\u793A\u4F8B\u6570\u636E\u7528 `--demo`\u3002",(0,r.jsx)("br",{}),"\u6CA1\u6709 `dsh-memory` \u547D\u4EE4\u65F6\uFF1A`npx -p memory-eternal dsh-memory tui`"]})]}),(0,r.jsxs)("div",{style:l,children:[(0,r.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",e("terminalTui")]}),(0,r.jsx)("pre",{style:s,children:o}),(0,r.jsx)("button",{type:"button",style:c,onClick:()=>i(o,"tui"),children:t==="tui"?"\u2713 "+e("terminalCopied"):"\u29C9 "+e("terminalCopy")}),(0,r.jsx)("div",{style:{marginTop:12,color:"#99a1ac",fontSize:12,lineHeight:1.7},children:"\u771F\u5B9E\u6279\u51C6/\u9A73\u56DE\uFF1B\u4E0D\u786E\u5B9A\u65F6\u5148\u7528\u53EA\u8BFB\u6A21\u5F0F\u3002"})]})]}),(0,r.jsxs)("div",{style:{...l,marginTop:14},children:[(0,r.jsxs)("div",{style:{fontSize:13,fontWeight:700},children:["\u25B8 ",e("terminalPreview")]}),(0,r.jsx)("pre",{style:{...s,marginTop:10,color:"#d7dce3",fontSize:12,lineHeight:1.5},children:`\u256D\u2500 MEMORY ATLAS / \u5F85\u5BA1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E
|
|
1039
1039
|
\u2502 \u7C7B\u578B \u25CF \u5168\u90E8 7 \u25CB \u9879\u76EE 3 \u25CB \u77E5\u8BC6 1 \u25CB \u6559\u8BAD 1 \u2502
|
|
1040
1040
|
\u2502 \u2502
|
|
1041
1041
|
\u2502 \u25A3 \u5168\u9009 7 \u5DF2\u9009 3 s \u5168\u9009 \u2502
|