221 lines
24 KiB
HTML
221 lines
24 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||
<title>MemOS Local Plugin 安装排查 | OpenClaw / Hermes</title>
|
||
<meta name="description" content="MemOS Local Plugin 安装与运行排查指南,覆盖 OpenClaw、Hermes、Node.js、better-sqlite3、Viewer、Bridge、配置与日志。">
|
||
<link rel="icon" href="https://statics.memtensor.com.cn/logo/color-m.svg" type="image/svg+xml">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
:root{--bg:#06080f;--card:rgba(14,18,32,.72);--card2:rgba(20,26,48,.82);--line:rgba(99,140,255,.12);--line2:rgba(99,140,255,.25);--text:#eef1ff;--muted:rgba(200,210,255,.58);--soft:rgba(160,175,220,.34);--cyan:#00e5ff;--green:#00e676;--amber:#ffca28;--rose:#ff5f8f;--grad:linear-gradient(135deg,#00e5ff,#638cff,#b16cff);--mono:'JetBrains Mono','SF Mono',ui-monospace,monospace;--font:'Inter',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
||
html{scroll-behavior:smooth;scroll-padding-top:86px}
|
||
body{font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.72;font-size:15px;overflow-x:hidden}
|
||
body::before{content:'';position:fixed;inset:0;z-index:0;pointer-events:none;background-image:linear-gradient(rgba(99,140,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(99,140,255,.03) 1px,transparent 1px);background-size:60px 60px}
|
||
body::after{content:'';position:fixed;inset:-20% -10%;z-index:0;pointer-events:none;background:radial-gradient(circle at 12% 0,rgba(0,229,255,.10),transparent 28%),radial-gradient(circle at 86% 12%,rgba(177,108,255,.09),transparent 30%),radial-gradient(circle at 50% 80%,rgba(255,60,172,.04),transparent 34%)}
|
||
a{color:var(--cyan);text-decoration:none;transition:all .2s}a:hover{color:var(--text)}
|
||
.top{position:fixed;inset:0 0 auto 0;height:60px;z-index:30;display:flex;align-items:center;gap:14px;padding:0 24px;border-bottom:1px solid var(--line);background:rgba(6,8,15,.76);backdrop-filter:blur(24px) saturate(1.4)}
|
||
.brand{display:flex;align-items:center;gap:10px;color:var(--text);font-weight:800;font-size:17px;letter-spacing:-.02em;text-decoration:none}.brand:hover{color:var(--text);text-decoration:none}.brand img{width:36px;height:36px}.brand .sub,.brand small{display:block;color:var(--muted);font-size:10px;font-weight:400;line-height:1.1}
|
||
.top nav{margin-left:auto;display:flex;gap:4px;align-items:center}.top nav a{color:var(--muted);font-size:13px;font-weight:600;padding:6px 12px;border-radius:8px;border:1px solid transparent}.top nav a:hover,.top nav a.active{background:rgba(99,140,255,.08);border-color:var(--line);color:var(--text)}
|
||
.lang{display:flex;gap:2px;margin-left:8px;padding:2px;border:1px solid var(--line);border-radius:8px;background:rgba(99,140,255,.04)}
|
||
.lang button{color:var(--muted);font-size:13px;font-weight:600;padding:6px 12px;border-radius:8px;border:1px solid transparent;background:transparent;cursor:pointer}
|
||
.lang button.active{background:rgba(99,140,255,.08);border-color:var(--line);color:var(--text)}
|
||
.lang-en{display:none}body.en .lang-zh{display:none!important}body.en .lang-en{display:initial!important}
|
||
.layout{position:relative;z-index:1;display:grid;grid-template-columns:268px minmax(0,960px);gap:40px;align-items:start;margin-top:60px;padding:44px clamp(16px,2vw,32px) 96px}
|
||
.sidebar{position:sticky;top:84px;border:1px solid var(--line);background:rgba(14,18,32,.62);border-radius:18px;padding:16px;max-height:calc(100vh - 104px);overflow:auto;backdrop-filter:blur(12px);box-shadow:0 10px 40px rgba(0,0,0,.28)}
|
||
.side-title{color:var(--soft);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.12em;margin:14px 8px 8px}.side-title:first-child{margin-top:0}
|
||
.sidebar a{display:block;padding:7px 9px;border-radius:10px;color:var(--muted);font-size:13px;font-weight:650}.sidebar a:hover{background:rgba(99,140,255,.08);color:var(--text)}
|
||
main{min-width:0}
|
||
.hero{padding:42px 0 34px}.badge{display:inline-flex;gap:8px;align-items:center;border:1px solid rgba(0,229,255,.2);background:rgba(0,229,255,.06);color:var(--cyan);border-radius:24px;padding:6px 18px;font-size:12px;font-weight:700;backdrop-filter:blur(8px)}
|
||
h1{font-size:clamp(40px,6vw,72px);font-weight:900;line-height:1.05;letter-spacing:-.055em;margin:18px 0;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.hero p{font-size:18px;color:var(--muted);max-width:820px;line-height:1.85}
|
||
section{border-top:1px solid var(--line);padding:50px 0}h2{font-size:clamp(28px,4vw,44px);font-weight:900;letter-spacing:-.04em;line-height:1.1;margin-bottom:14px}h3{font-size:20px;font-weight:800;margin:28px 0 8px;color:var(--text)}p,li{color:var(--muted)}p{margin:8px 0 12px}ul,ol{padding-left:22px;margin:10px 0 16px}strong{color:var(--text)}
|
||
pre{overflow:auto;background:rgba(10,14,28,.86);border:1px solid var(--line);border-radius:16px;padding:18px;color:#d4ddff;font-family:var(--mono);font-size:13px;line-height:1.7;margin:14px 0 20px;backdrop-filter:blur(12px);box-shadow:0 10px 40px rgba(0,0,0,.24)}code{font-family:var(--mono);font-size:.9em;color:#aefbf0;background:rgba(0,229,255,.08);border:1px solid rgba(0,229,255,.12);border-radius:5px;padding:1px 5px}pre code{background:transparent;border:0;padding:0;color:inherit}.c{color:rgba(212,221,255,.42)}
|
||
.grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:18px 0}.card{border:1px solid var(--line);background:var(--card);border-radius:16px;padding:20px;backdrop-filter:blur(12px);transition:all .25s;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--grad);opacity:0;transition:opacity .25s}.card:hover{border-color:var(--line2);background:var(--card2);transform:translateY(-3px);box-shadow:0 0 30px rgba(0,229,255,.11)}.card:hover::before{opacity:1}.card h3{margin-top:0}.card p{font-size:14px}
|
||
.callout{border:1px solid rgba(0,229,255,.22);background:rgba(0,229,255,.07);border-radius:16px;padding:15px 17px;margin:16px 0;color:var(--muted);backdrop-filter:blur(10px)}.callout.warnbox{border-color:rgba(255,202,40,.25);background:rgba(255,202,40,.07)}.callout.errbox{border-color:rgba(255,95,143,.28);background:rgba(255,95,143,.07)}
|
||
table{width:100%;border-collapse:collapse;margin:16px 0 24px;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:rgba(14,18,32,.5);backdrop-filter:blur(12px)}th,td{padding:11px 13px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:rgba(99,140,255,.08);font-size:13px}td{color:var(--muted);font-size:13px}tr:last-child td{border-bottom:0}
|
||
@media(max-width:980px){.layout{grid-template-columns:1fr}.sidebar{position:relative;top:auto;max-height:none}.grid{grid-template-columns:1fr}.top nav a:nth-child(n+4){display:none}}
|
||
@media(max-width:720px){.layout{padding:30px 16px 70px}.brand .sub,.brand small{display:none}.brand img{width:32px;height:32px}h1{font-size:38px}table{display:block;overflow:auto}}
|
||
.site-footer{position:relative;z-index:1;border-top:1px solid var(--line);padding:36px 0;background:rgba(6,8,15,.6)}
|
||
.site-footer .inner{max-width:1200px;margin:0 auto;padding:0 24px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:14px}
|
||
.site-footer .brand-foot{display:flex;align-items:center;gap:8px;color:var(--muted);font-weight:700;font-size:13px}
|
||
.site-footer .brand-foot img{width:28px;height:28px}
|
||
.site-footer .links{display:flex;gap:20px;flex-wrap:wrap}
|
||
.site-footer .links a{color:var(--soft);font-size:12px;text-decoration:none}
|
||
.site-footer .links a:hover{color:var(--cyan)}
|
||
.site-footer .copy{color:var(--soft);font-size:10px;width:100%;text-align:center;margin-top:12px}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="top">
|
||
<a class="brand" href="../index.html"><img src="https://statics.memtensor.com.cn/logo/white-memos.svg" alt="MemOS"><span>MemOS<span class="sub lang-zh">安装排查</span><span class="sub lang-en">Troubleshooting</span></span></a>
|
||
<nav>
|
||
<a href="../index.html"><span class="lang-zh">首页</span><span class="lang-en">Home</span></a>
|
||
<a href="index.html"><span class="lang-zh">文档</span><span class="lang-en">Docs</span></a>
|
||
<a class="active" href="troubleshooting.html"><span class="lang-zh">排查</span><span class="lang-en">Troubleshooting</span></a>
|
||
<a href="#quick"><span class="lang-zh">快速诊断</span><span class="lang-en">Quick Check</span></a>
|
||
<a href="#logs"><span class="lang-zh">日志</span><span class="lang-en">Logs</span></a>
|
||
</nav>
|
||
<div class="lang"><button type="button" data-lang="zh" class="active">中</button><button type="button" data-lang="en">EN</button></div>
|
||
</header>
|
||
<div class="layout">
|
||
<aside class="sidebar">
|
||
<div class="side-title">Troubleshooting</div>
|
||
<a href="#quick"><span class="lang-zh">快速诊断</span><span class="lang-en">Quick Check</span></a>
|
||
<a href="#install"><span class="lang-zh">安装器没有检测到宿主</span><span class="lang-en">Installer Cannot Detect Host</span></a>
|
||
<a href="#node">Node.js / better-sqlite3</a>
|
||
<a href="#openclaw"><span class="lang-zh">OpenClaw 插件未加载</span><span class="lang-en">OpenClaw Plugin Not Loading</span></a>
|
||
<a href="#hermes"><span class="lang-zh">Hermes provider / bridge 问题</span><span class="lang-en">Hermes Provider / Bridge</span></a>
|
||
<a href="#viewer"><span class="lang-zh">Viewer 无法访问</span><span class="lang-en">Viewer Unreachable</span></a>
|
||
<a href="#config"><span class="lang-zh">配置与 API key</span><span class="lang-en">Config and API Keys</span></a>
|
||
<a href="#logs"><span class="lang-zh">日志位置</span><span class="lang-en">Log Locations</span></a>
|
||
<a href="#upgrade"><span class="lang-zh">升级与旧插件</span><span class="lang-en">Upgrade and Legacy Plugins</span></a>
|
||
<a href="#reinstall"><span class="lang-zh">安全重装</span><span class="lang-en">Safe Reinstall</span></a>
|
||
</aside>
|
||
<main>
|
||
<div class="hero">
|
||
<div class="badge">OpenClaw + Hermes · Troubleshooting</div>
|
||
<h1><span class="lang-zh">MemOS Local Plugin 安装排查</span><span class="lang-en">MemOS Local Plugin Troubleshooting</span></h1>
|
||
<p><span class="lang-zh">新版插件同时支持 OpenClaw 和 Hermes。排查时先确认你正在检查的是哪个宿主、哪个运行时目录、哪个 Viewer 端口。</span><span class="lang-en">The current plugin supports both OpenClaw and Hermes. When debugging, first confirm which host, which runtime directory, and which Viewer port you are inspecting.</span></p>
|
||
</div>
|
||
<section id="quick">
|
||
<h2><span class="lang-zh">1. 快速诊断</span><span class="lang-en">1. Quick Check</span></h2>
|
||
<p><span class="lang-zh">先跑下面的命令,确认安装目录、数据库、Viewer 和核心依赖状态。</span><span class="lang-en">Run the following commands to verify install directory, database, Viewer, and core dependencies.</span></p>
|
||
<pre><code><span class="c"># Host homes</span>
|
||
test -d ~/.openclaw && echo "OpenClaw home OK"
|
||
test -d ~/.hermes && echo "Hermes home OK"
|
||
|
||
<span class="c"># OpenClaw install/runtime</span>
|
||
ls ~/.openclaw/extensions/memos-local-plugin 2>/dev/null
|
||
ls ~/.openclaw/memos-plugin 2>/dev/null
|
||
|
||
<span class="c"># Hermes runtime/package</span>
|
||
ls ~/.hermes/memos-plugin 2>/dev/null
|
||
ls ~/.hermes/memos-plugin/adapters/hermes 2>/dev/null
|
||
|
||
<span class="c"># Viewer health</span>
|
||
curl -fsS http://127.0.0.1:18799/api/v1/health || true
|
||
curl -fsS http://127.0.0.1:18800/api/v1/health || true</code></pre>
|
||
<div class="grid">
|
||
<div class="card"><h3>OpenClaw</h3><p><span class="lang-zh">代码在 <code>~/.openclaw/extensions/memos-local-plugin/</code>,数据在 <code>~/.openclaw/memos-plugin/</code>,Viewer 是 <code>:18799</code>。</span><span class="lang-en">Code lives at <code>~/.openclaw/extensions/memos-local-plugin/</code>, data at <code>~/.openclaw/memos-plugin/</code>, Viewer at <code>:18799</code>.</span></p></div>
|
||
<div class="card"><h3>Hermes</h3><p><span class="lang-zh">包和运行时在 <code>~/.hermes/memos-plugin/</code>,Python provider 通过 symlink 接入 Hermes,Viewer 是 <code>:18800</code>。</span><span class="lang-en">Package and runtime live at <code>~/.hermes/memos-plugin/</code>; the Python provider attaches via symlink, Viewer at <code>:18800</code>.</span></p></div>
|
||
</div>
|
||
</section>
|
||
<section id="install">
|
||
<h2><span class="lang-zh">2. 安装器没有检测到宿主</span><span class="lang-en">2. Installer Cannot Detect Host</span></h2>
|
||
<p><span class="lang-zh">安装器根据 <code>~/.openclaw</code> 与 <code>~/.hermes</code> 判断宿主是否存在。交互式安装时可以手动选择;非交互环境会自动安装到检测到的宿主。</span><span class="lang-en">The installer detects hosts via <code>~/.openclaw</code> and <code>~/.hermes</code>. Interactive runs let you pick manually; non-interactive runs install into whatever is detected.</span></p>
|
||
<pre><code><span class="c"># Re-run from repository checkout</span>
|
||
cd apps/memos-local-plugin
|
||
bash install.sh
|
||
|
||
<span class="c"># Show installer help</span>
|
||
bash install.sh --help</code></pre>
|
||
<div class="callout warnbox"><strong><span class="lang-zh">没有 <code>--port</code> 参数。</span><span class="lang-en">No <code>--port</code> flag.</span></strong> <span class="lang-zh">新版端口固定:OpenClaw <code>18799</code>,Hermes <code>18800</code>。如果端口被占用,请先停掉旧进程,而不是给安装器传端口。</span><span class="lang-en">The new ports are fixed: OpenClaw <code>18799</code>, Hermes <code>18800</code>. If a port is busy, kill the stale process instead of passing a port to the installer.</span></div>
|
||
</section>
|
||
<section id="node">
|
||
<h2>3. Node.js / better-sqlite3</h2>
|
||
<p><span class="lang-zh">插件要求 Node.js 20+。Node 25+ 往往没有 <code>better-sqlite3</code> 预编译二进制,会走源码编译;如果失败,建议切换 Node LTS。</span><span class="lang-en">Plugin requires Node.js 20+. Node 25+ often lacks <code>better-sqlite3</code> prebuilt binaries and falls back to building from source; if that fails, switch to Node LTS.</span></p>
|
||
<pre><code>node -v
|
||
|
||
<span class="c"># OpenClaw package check</span>
|
||
cd ~/.openclaw/extensions/memos-local-plugin
|
||
node -e "require('better-sqlite3'); console.log('better-sqlite3 OK')"
|
||
|
||
<span class="c"># Hermes package check</span>
|
||
cd ~/.hermes/memos-plugin
|
||
node -e "require('better-sqlite3'); console.log('better-sqlite3 OK')"</code></pre>
|
||
<p><span class="lang-zh">更多平台细节见 <a href="https://github.com/WiseLibs/better-sqlite3/blob/master/docs/troubleshooting.md" target="_blank" rel="noopener">better-sqlite3 官方排查文档</a>。</span><span class="lang-en">For platform details, see the <a href="https://github.com/WiseLibs/better-sqlite3/blob/master/docs/troubleshooting.md" target="_blank" rel="noopener">official better-sqlite3 troubleshooting docs</a>.</span></p>
|
||
</section>
|
||
<section id="openclaw">
|
||
<h2><span class="lang-zh">4. OpenClaw 插件未加载</span><span class="lang-en">4. OpenClaw Plugin Not Loading</span></h2>
|
||
<p><span class="lang-zh">OpenClaw 安装流程会部署包、生成 <code>openclaw.plugin.json</code>,并 patch <code>~/.openclaw/openclaw.json</code> 的 memory slot。</span><span class="lang-en">OpenClaw install deploys the package, writes <code>openclaw.plugin.json</code>, and patches the memory slot in <code>~/.openclaw/openclaw.json</code>.</span></p>
|
||
<pre><code>test -f ~/.openclaw/extensions/memos-local-plugin/openclaw.plugin.json
|
||
test -f ~/.openclaw/extensions/memos-local-plugin/dist/adapters/openclaw/index.js</code></pre>
|
||
<p><span class="lang-zh">修改后重启 OpenClaw gateway:</span><span class="lang-en">Restart the OpenClaw gateway after changes:</span></p>
|
||
<pre><code>openclaw gateway stop
|
||
openclaw gateway start</code></pre>
|
||
<div class="callout errbox"><strong><span class="lang-zh">旧 ID 冲突:</span><span class="lang-en">Legacy ID conflict:</span></strong> <span class="lang-zh">如果看到 <code>memos-local-openclaw-plugin</code> 或 <code>memos-lite-openclaw-plugin</code>,它们是旧版单适配插件。新版安装器会从配置中移除旧 ID,但不会删除旧数据。</span><span class="lang-en">If you see <code>memos-local-openclaw-plugin</code> or <code>memos-lite-openclaw-plugin</code>, those are legacy single-adapter plugins. The new installer removes legacy IDs from config but never deletes legacy data.</span></div>
|
||
</section>
|
||
<section id="hermes">
|
||
<h2><span class="lang-zh">5. Hermes provider / bridge 问题</span><span class="lang-en">5. Hermes Provider / Bridge Issues</span></h2>
|
||
<p><span class="lang-zh">Hermes 适配器由 Python provider 加载,再启动或连接 <code>bridge.cts</code>。最常见问题是 provider symlink 没建立、Hermes Python 环境不一致、bridge 旧进程占用端口。</span><span class="lang-en">The Hermes adapter is loaded by a Python provider that starts or connects to <code>bridge.cts</code>. Common failures: missing provider symlink, mismatched Hermes Python env, or stale bridge holding the port.</span></p>
|
||
<pre><code>ls ~/.hermes/memos-plugin/adapters/hermes/memos_provider
|
||
test -f ~/.hermes/memos-plugin/bridge.cts
|
||
pgrep -af "bridge.cts" || true
|
||
lsof -nP -iTCP:18800 -sTCP:LISTEN || true</code></pre>
|
||
<p><span class="lang-zh">如需重启 Hermes bridge,优先重新运行安装器;它会停止旧 bridge、重新部署 provider 并等待 Viewer。</span><span class="lang-en">To restart the Hermes bridge, prefer rerunning the installer: it stops the old bridge, redeploys the provider, and waits for Viewer.</span></p>
|
||
</section>
|
||
<section id="viewer">
|
||
<h2><span class="lang-zh">6. Viewer 无法访问</span><span class="lang-en">6. Viewer Unreachable</span></h2>
|
||
<table>
|
||
<tr><th>Viewer</th><th>URL</th><th>Health</th><th><span class="lang-zh">常见原因</span><span class="lang-en">Common Causes</span></th></tr>
|
||
<tr><td>OpenClaw</td><td><code>http://127.0.0.1:18799</code></td><td><code>/api/v1/health</code></td><td><span class="lang-zh">gateway 未启动、插件未加载、端口被旧进程占用。</span><span class="lang-en">Gateway not started, plugin not loaded, or port held by stale process.</span></td></tr>
|
||
<tr><td>Hermes</td><td><code>http://127.0.0.1:18800</code></td><td><code>/api/v1/health</code></td><td><span class="lang-zh">bridge 未启动、provider 未加载、Hermes LLM 配置缺失。</span><span class="lang-en">Bridge not started, provider not loaded, or missing Hermes LLM config.</span></td></tr>
|
||
</table>
|
||
</section>
|
||
<section id="config">
|
||
<h2><span class="lang-zh">7. 配置与 API key</span><span class="lang-en">7. Config and API Keys</span></h2>
|
||
<p><span class="lang-zh"><code>config.yaml</code> 是唯一运行时配置文件。OpenClaw 默认可使用 <code>llm.provider: host</code> 复用宿主模型;Hermes 没有 host LLM,通常需要配置真实 LLM provider 与 API key。</span><span class="lang-en"><code>config.yaml</code> is the only runtime config. OpenClaw can default to <code>llm.provider: host</code> and reuse the host model; Hermes has no host LLM and usually needs a real LLM provider plus API key.</span></p>
|
||
<pre><code>sed -n '1,120p' ~/.openclaw/memos-plugin/config.yaml
|
||
sed -n '1,120p' ~/.hermes/memos-plugin/config.yaml</code></pre>
|
||
<div class="callout warnbox"><span class="lang-zh">排障时不要把完整 API key 贴到 issue 或聊天里。Viewer 与日志会做脱敏,但终端命令输出不会自动脱敏。</span><span class="lang-en">Do not paste full API keys into issues or chats. Viewer and logs redact secrets, but raw terminal output does not.</span></div>
|
||
</section>
|
||
<section id="logs">
|
||
<h2><span class="lang-zh">8. 日志位置</span><span class="lang-en">8. Log Locations</span></h2>
|
||
<table>
|
||
<tr><th>Agent</th><th>MemOS logs</th><th>Host logs</th></tr>
|
||
<tr><td>OpenClaw</td><td><code>~/.openclaw/memos-plugin/logs/</code></td><td><code>/tmp/openclaw/openclaw-*.log</code>, <code>/tmp/openclaw-memos-gateway.log</code></td></tr>
|
||
<tr><td>Hermes</td><td><code>~/.hermes/memos-plugin/logs/</code></td><td><span class="lang-zh"><code>~/.hermes/</code> 下的 Hermes 自身日志,视安装方式而定</span><span class="lang-en">Hermes' own logs under <code>~/.hermes/</code>, depending on install method</span></td></tr>
|
||
</table>
|
||
<pre><code>rg -i "error|fail|warn" ~/.openclaw/memos-plugin/logs ~/.hermes/memos-plugin/logs</code></pre>
|
||
</section>
|
||
<section id="upgrade">
|
||
<h2><span class="lang-zh">9. 升级与旧插件</span><span class="lang-en">9. Upgrade and Legacy Plugins</span></h2>
|
||
<p><span class="lang-zh">旧版包名和插件 ID 包含 <code>memos-local-openclaw-plugin</code>,新版统一为 <code>@memtensor/memos-local-plugin</code> / <code>memos-local-plugin</code>。升级时安装器会清理 OpenClaw 配置里的旧 ID,防止两个记忆插件争用 memory slot。</span><span class="lang-en">Legacy package and plugin IDs use <code>memos-local-openclaw-plugin</code>; the current name is <code>@memtensor/memos-local-plugin</code> / <code>memos-local-plugin</code>. The installer cleans legacy IDs from OpenClaw config to prevent two memory plugins competing for the same slot.</span></p>
|
||
<pre><code>curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash
|
||
rg "memos-local-openclaw-plugin|memos-lite" ~/.openclaw/openclaw.json || true</code></pre>
|
||
</section>
|
||
<section id="reinstall">
|
||
<h2><span class="lang-zh">10. 安全重装</span><span class="lang-en">10. Safe Reinstall</span></h2>
|
||
<p><span class="lang-zh">安全重装只删除代码包和 provider 链接,不删除数据库、技能、日志和配置。</span><span class="lang-en">A safe reinstall removes only code packages and provider symlinks; databases, skills, logs, and config stay intact.</span></p>
|
||
<pre><code>rm -rf ~/.openclaw/extensions/memos-local-plugin
|
||
cp -a ~/.hermes/memos-plugin ~/.hermes/memos-plugin.backup.$(date +%Y%m%d-%H%M%S)
|
||
cd apps/memos-local-plugin
|
||
bash install.sh</code></pre>
|
||
<div class="callout errbox"><strong><span class="lang-zh">不要直接删除 <code>~/.hermes/memos-plugin</code>,</span><span class="lang-en">Do not delete <code>~/.hermes/memos-plugin</code> directly,</span></strong> <span class="lang-zh">除非你已经备份并确认可以同时移除 Hermes 的 MemOS 数据库、配置、日志和技能包。</span><span class="lang-en">unless you have backed up and intentionally want to remove Hermes' MemOS database, config, logs, and skills together.</span></div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
<footer class="site-footer">
|
||
<div class="inner">
|
||
<div class="brand-foot"><img src="https://statics.memtensor.com.cn/logo/white-memos.svg" alt="MemOS"> MemOS</div>
|
||
<div class="links">
|
||
<a href="../index.html"><span class="lang-zh">首页</span><span class="lang-en">Home</span></a>
|
||
<a href="index.html"><span class="lang-zh">文档</span><span class="lang-en">Docs</span></a>
|
||
<a href="troubleshooting.html"><span class="lang-zh">排查</span><span class="lang-en">Troubleshooting</span></a>
|
||
<a href="https://www.npmjs.com/package/@memtensor/memos-local-plugin" target="_blank" rel="noopener">npm</a>
|
||
<a href="https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin" target="_blank" rel="noopener">GitHub</a>
|
||
<a href="https://github.com/MemTensor/MemOS/blob/main/LICENSE" target="_blank" rel="noopener">MIT</a>
|
||
</div>
|
||
<div class="copy">© 2026 MemTensor. MemOS Local Plugin.</div>
|
||
</div>
|
||
</footer>
|
||
<script>
|
||
(function(){
|
||
var key='memos-site-lang';
|
||
var saved=localStorage.getItem(key)||'zh';
|
||
function setLang(lang){
|
||
document.body.classList.toggle('en',lang==='en');
|
||
document.documentElement.lang=lang==='en'?'en':'zh-CN';
|
||
localStorage.setItem(key,lang);
|
||
document.querySelectorAll('[data-lang]').forEach(function(btn){btn.classList.toggle('active',btn.getAttribute('data-lang')===lang);});
|
||
}
|
||
document.querySelectorAll('[data-lang]').forEach(function(btn){btn.addEventListener('click',function(){setLang(btn.getAttribute('data-lang'));});});
|
||
setLang(saved);
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|