@memtensor/memos-local-openclaw-plugin 0.2.1 → 0.3.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.
@@ -78,7 +78,8 @@ input,textarea,select{font-family:inherit;font-size:inherit}
78
78
  /* ─── Auth (Linkify 配色: globals.css .dark + 蓝紫渐变) ─── */
79
79
  .auth-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px;background:linear-gradient(135deg,rgb(36,0,255) 0%,rgb(0,135,255) 35%,rgb(108,39,157) 70%,rgb(105,30,255) 100%);position:relative;overflow:hidden}
80
80
  .auth-card{background:hsl(0 0% 100%);border:none;border-radius:8px;padding:48px 40px;width:100%;max-width:420px;box-shadow:0 25px 50px -12px rgba(0,0,0,.25);text-align:center;position:relative;z-index:1}
81
- .auth-card .logo{width:56px;height:56px;margin:0 auto 20px;display:flex;align-items:center;justify-content:center;font-size:48px;background:none;border-radius:0}
81
+ .auth-card .logo{margin:0 auto 20px;text-align:center;line-height:0;background:none;border-radius:0}
82
+ .auth-card .logo svg{filter:drop-shadow(0 0 16px rgba(255,77,77,.35))}
82
83
  .auth-card h1{font-size:22px;font-weight:700;margin-bottom:4px;color:hsl(0 0% 3.9%);letter-spacing:-.02em}
83
84
  .auth-card p{color:hsl(0 0% 45.1%);margin-bottom:24px;font-size:14px}
84
85
  .auth-card input{width:100%;padding:12px 16px;border:1px solid hsl(0 0% 89.8%);border-radius:8px;font-size:14px;transition:all .2s;margin-bottom:10px;outline:none;background:#fff;color:hsl(0 0% 3.9%)}
@@ -622,7 +623,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
622
623
  <button class="auth-theme-toggle" onclick="toggleLang()" aria-label="Switch language"><span data-i18n="lang.switch">EN</span></button>
623
624
  </div>
624
625
  <div class="auth-card">
625
- <div class="logo">\u{1F99E}</div>
626
+ <div class="logo"><svg width="60" height="60" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="aLG" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#ff4d4d"/><stop offset="100%" stop-color="#991b1b"/></linearGradient></defs><path d="M60 10C30 10 15 35 15 55C15 75 30 95 45 100L45 110L55 110L55 100C55 100 60 102 65 100L65 110L75 110L75 100C90 95 105 75 105 55C105 35 90 10 60 10Z" fill="url(#aLG)"/><path d="M20 45C5 40 0 50 5 60C10 70 20 65 25 55C28 48 25 45 20 45Z" fill="url(#aLG)"/><path d="M100 45C115 40 120 50 115 60C110 70 100 65 95 55C92 48 95 45 100 45Z" fill="url(#aLG)"/><path d="M45 15Q35 5 30 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><path d="M75 15Q85 5 90 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><circle cx="45" cy="35" r="6" fill="#050810"/><circle cx="75" cy="35" r="6" fill="#050810"/><circle cx="46" cy="34" r="2" fill="#00e5cc"/><circle cx="76" cy="34" r="2" fill="#00e5cc"/></svg></div>
626
627
  <h1 data-i18n="title">OpenClaw Memory</h1>
627
628
  <p style="font-size:12px;color:var(--text-sec);margin-bottom:6px" data-i18n="subtitle">Powered by MemOS</p>
628
629
  <p data-i18n="setup.desc">Set a password to protect your memories</p>
@@ -640,7 +641,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
640
641
  <button class="auth-theme-toggle" onclick="toggleLang()" aria-label="Switch language"><span data-i18n="lang.switch">EN</span></button>
641
642
  </div>
642
643
  <div class="auth-card">
643
- <div class="logo">\u{1F99E}</div>
644
+ <div class="logo"><svg width="60" height="60" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="bLG" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#ff4d4d"/><stop offset="100%" stop-color="#991b1b"/></linearGradient></defs><path d="M60 10C30 10 15 35 15 55C15 75 30 95 45 100L45 110L55 110L55 100C55 100 60 102 65 100L65 110L75 110L75 100C90 95 105 75 105 55C105 35 90 10 60 10Z" fill="url(#bLG)"/><path d="M20 45C5 40 0 50 5 60C10 70 20 65 25 55C28 48 25 45 20 45Z" fill="url(#bLG)"/><path d="M100 45C115 40 120 50 115 60C110 70 100 65 95 55C92 48 95 45 100 45Z" fill="url(#bLG)"/><path d="M45 15Q35 5 30 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><path d="M75 15Q85 5 90 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><circle cx="45" cy="35" r="6" fill="#050810"/><circle cx="75" cy="35" r="6" fill="#050810"/><circle cx="46" cy="34" r="2" fill="#00e5cc"/><circle cx="76" cy="34" r="2" fill="#00e5cc"/></svg></div>
644
645
  <h1 data-i18n="title">OpenClaw Memory</h1>
645
646
  <p style="font-size:12px;color:var(--text-sec);margin-bottom:6px" data-i18n="subtitle">Powered by MemOS</p>
646
647
  <p data-i18n="login.desc">Enter your password to access memories</p>
@@ -692,7 +693,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
692
693
  <div class="app" id="app">
693
694
  <div class="topbar">
694
695
  <div class="brand">
695
- <div class="icon">\u{1F99E}</div>
696
+ <div class="icon"><svg width="24" height="24" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg" style="filter:drop-shadow(0 0 8px rgba(255,77,77,.3))"><defs><linearGradient id="tLG" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#ff4d4d"/><stop offset="100%" stop-color="#991b1b"/></linearGradient></defs><path d="M60 10C30 10 15 35 15 55C15 75 30 95 45 100L45 110L55 110L55 100C55 100 60 102 65 100L65 110L75 110L75 100C90 95 105 75 105 55C105 35 90 10 60 10Z" fill="url(#tLG)"/><path d="M20 45C5 40 0 50 5 60C10 70 20 65 25 55C28 48 25 45 20 45Z" fill="url(#tLG)"/><path d="M100 45C115 40 120 50 115 60C110 70 100 65 95 55C92 48 95 45 100 45Z" fill="url(#tLG)"/><path d="M45 15Q35 5 30 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><path d="M75 15Q85 5 90 8" stroke="#ff4d4d" stroke-width="2" stroke-linecap="round"/><circle cx="45" cy="35" r="6" fill="#050810"/><circle cx="75" cy="35" r="6" fill="#050810"/><circle cx="46" cy="34" r="2" fill="#00e5cc"/><circle cx="76" cy="34" r="2" fill="#00e5cc"/></svg></div>
696
697
  <span data-i18n="title">OpenClaw Memory</span>
697
698
  </div>
698
699
  <div class="topbar-center">
@@ -890,7 +891,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
890
891
  <button class="btn btn-sm btn-ghost" onclick="loadLogs()" style="font-size:12px">\u21BB <span data-i18n="logs.refresh">Refresh</span></button>
891
892
  </div>
892
893
  <div class="logs-toolbar-right">
893
- <input type="checkbox" id="logAutoRefresh" checked style="display:none">
894
+ <input type="checkbox" id="logAutoRefresh" style="display:none">
894
895
  </div>
895
896
  </div>
896
897
  <div class="logs-list" id="logsList"></div>
@@ -1162,13 +1163,6 @@ input,textarea,select{font-family:inherit;font-size:inherit}
1162
1163
  </div>
1163
1164
  </div>
1164
1165
 
1165
- <!-- Done Summary -->
1166
- <div id="migrateDone" style="display:none">
1167
- <div class="settings-section" style="background:rgba(34,197,94,.04);border:1px solid rgba(34,197,94,.2)">
1168
- <div style="font-size:14px;font-weight:700;color:#22c55e;margin-bottom:8px">\u2705 <span data-i18n="migrate.done">Import Complete</span></div>
1169
- <div id="migrateDoneSummary" style="font-size:12px;color:var(--text-sec);line-height:1.6"></div>
1170
- </div>
1171
- </div>
1172
1166
  </div>
1173
1167
 
1174
1168
  </div>
@@ -1390,8 +1384,6 @@ const I18N={
1390
1384
  'migrate.stat.skipped':'Skipped',
1391
1385
  'migrate.stat.merged':'Merged',
1392
1386
  'migrate.stat.errors':'Errors',
1393
- 'migrate.done':'Import Complete',
1394
- 'migrate.done.summary':'Processed {total} items: {stored} stored, {skipped} skipped, {merged} merged, {errors} errors.',
1395
1387
  'migrate.phase.sqlite':'Importing memory index...',
1396
1388
  'migrate.phase.sessions':'Importing conversation history...',
1397
1389
  'migrate.chunks':'chunks',
@@ -1401,10 +1393,7 @@ const I18N={
1401
1393
  'migrate.error.running':'A migration is already in progress.',
1402
1394
  'migrate.stop':'\\u25A0 Stop',
1403
1395
  'migrate.stopping':'Stopping...',
1404
- 'migrate.stopped':'Import Stopped',
1405
- 'migrate.stopped.hint':'Import was stopped. You can resume anytime — already imported items will be skipped automatically.',
1406
1396
  'migrate.resume':'Continue Import',
1407
- 'migrate.already.hint':'All data has been imported previously. No new items to process.',
1408
1397
  'pp.title':'\\u{1F9E0} Optional: Generate Tasks & Skills',
1409
1398
  'pp.desc':'This step is completely optional. The import above has already stored raw memory data. Here you can further analyze imported conversations to generate structured task summaries and evolve reusable skills. Processing is serial (one session at a time) and may take a while. You can stop at any time and resume later — it will only process sessions not yet handled.',
1410
1399
  'pp.tasks.label':'Generate task summaries',
@@ -1654,8 +1643,6 @@ const I18N={
1654
1643
  'migrate.stat.skipped':'已跳过',
1655
1644
  'migrate.stat.merged':'已合并',
1656
1645
  'migrate.stat.errors':'错误',
1657
- 'migrate.done':'导入完成',
1658
- 'migrate.done.summary':'共处理 {total} 条:{stored} 条存储,{skipped} 条跳过,{merged} 条合并,{errors} 条错误。',
1659
1646
  'migrate.phase.sqlite':'正在导入记忆索引...',
1660
1647
  'migrate.phase.sessions':'正在导入对话历史...',
1661
1648
  'migrate.chunks':'条记忆',
@@ -1665,10 +1652,7 @@ const I18N={
1665
1652
  'migrate.error.running':'已有迁移任务正在进行。',
1666
1653
  'migrate.stop':'\\u25A0 停止',
1667
1654
  'migrate.stopping':'正在停止...',
1668
- 'migrate.stopped':'导入已停止',
1669
- 'migrate.stopped.hint':'导入已停止。你可以随时继续——已导入的内容会自动跳过。',
1670
1655
  'migrate.resume':'继续导入',
1671
- 'migrate.already.hint':'所有数据已在之前导入过,没有新内容需要处理。',
1672
1656
  'pp.title':'\\u{1F9E0} 可选:生成任务与技能',
1673
1657
  'pp.desc':'此步骤完全可选。上面的导入已经存储了原始记忆数据。在这里可以进一步分析已导入的对话,生成结构化的任务摘要或进化可复用的技能。处理过程是串行的(逐个会话),可能需要较长时间。你可以随时停止,下次继续时只会处理尚未完成的会话。',
1674
1658
  'pp.tasks.label':'生成任务摘要',
@@ -3210,7 +3194,6 @@ async function migrateScan(){
3210
3194
  document.getElementById('migrateScanResult').style.display='none';
3211
3195
  document.getElementById('migrateConfigWarn').style.display='none';
3212
3196
  document.getElementById('migrateProgress').style.display='none';
3213
- document.getElementById('migrateDone').style.display='none';
3214
3197
 
3215
3198
  try{
3216
3199
  const r=await fetch('/api/migrate/scan');
@@ -3261,13 +3244,14 @@ function migrateStart(){
3261
3244
  document.getElementById('migrateStartBtn').style.display='none';
3262
3245
  document.getElementById('migrateScanBtn').disabled=true;
3263
3246
  document.getElementById('migrateProgress').style.display='block';
3264
- document.getElementById('migrateDone').style.display='none';
3265
3247
  document.getElementById('migrateLiveLog').innerHTML='';
3266
3248
  migrateStats={stored:0,skipped:0,merged:0,errors:0};
3267
3249
  updateMigrateStats();
3268
3250
 
3269
3251
  document.getElementById('migrateStopBtn').disabled=false;
3252
+ document.getElementById('migrateBar').style.width='0%';
3270
3253
  document.getElementById('migrateBar').style.background='linear-gradient(90deg,#6366f1,#8b5cf6)';
3254
+ document.getElementById('migrateCounter').textContent='';
3271
3255
  const body=JSON.stringify({sources:['sqlite','sessions']});
3272
3256
  connectMigrateSSE('/api/migrate/start','POST',body);
3273
3257
  }
@@ -3304,7 +3288,7 @@ function readSSEStream(r){
3304
3288
  const NL=String.fromCharCode(10);
3305
3289
  function pump(){
3306
3290
  reader.read().then(({done,value})=>{
3307
- if(done){if(!migrateDoneCalled)onMigrateDone(false);return;}
3291
+ if(done){if(!migrateDoneCalled&&!window._migrateRunning)onMigrateDone(false);return;}
3308
3292
  buf+=decoder.decode(value,{stream:true});
3309
3293
  const lines=buf.split(NL);
3310
3294
  buf=lines.pop()||'';
@@ -3338,7 +3322,9 @@ async function checkMigrateStatus(){
3338
3322
  switchView('import');
3339
3323
  migrateStats={stored:s.stored,skipped:s.skipped,merged:s.merged,errors:s.errors};
3340
3324
  updateMigrateStats();
3341
- document.getElementById('migrateProgress').style.display='block';
3325
+ const progEl=document.getElementById('migrateProgress');
3326
+ if(!progEl)return;
3327
+ progEl.style.display='block';
3342
3328
  document.getElementById('migrateStartBtn').style.display='none';
3343
3329
  document.getElementById('migrateScanBtn').disabled=true;
3344
3330
  document.getElementById('migrateStopBtn').disabled=false;
@@ -3351,7 +3337,9 @@ async function checkMigrateStatus(){
3351
3337
  }else if(s.done&&(s.stored>0||s.skipped>0||s.stopped)){
3352
3338
  migrateStats={stored:s.stored,skipped:s.skipped,merged:s.merged,errors:s.errors};
3353
3339
  updateMigrateStats();
3354
- document.getElementById('migrateProgress').style.display='block';
3340
+ const progEl=document.getElementById('migrateProgress');
3341
+ if(!progEl)return;
3342
+ progEl.style.display='block';
3355
3343
  const pct=s.total>0?Math.round((s.processed/s.total)*100):0;
3356
3344
  document.getElementById('migrateBar').style.width=pct+'%';
3357
3345
  document.getElementById('migrateCounter').textContent=s.processed+' / '+s.total+' ('+pct+'%)';
@@ -3441,43 +3429,13 @@ function onMigrateDone(wasStopped,skipReload){
3441
3429
  document.getElementById('migrateScanBtn').disabled=false;
3442
3430
  document.getElementById('migrateStopBtn').disabled=true;
3443
3431
  document.getElementById('migrateStopBtn').textContent=t('migrate.stop');
3444
- const doneEl=document.getElementById('migrateDone');
3445
- doneEl.style.display='block';
3446
- const total=migrateStats.stored+migrateStats.skipped+migrateStats.merged+migrateStats.errors;
3447
- const allSkipped=migrateStats.stored===0&&migrateStats.merged===0&&migrateStats.skipped>0&&migrateStats.errors===0;
3448
- const tmpl=t('migrate.done.summary');
3449
- let summaryText=tmpl
3450
- .replace('{total}',total)
3451
- .replace('{stored}',migrateStats.stored)
3452
- .replace('{skipped}',migrateStats.skipped)
3453
- .replace('{merged}',migrateStats.merged)
3454
- .replace('{errors}',migrateStats.errors);
3455
3432
  if(wasStopped){
3456
- summaryText+=' '+t('migrate.stopped.hint');
3457
- doneEl.querySelector('.settings-section').style.background='rgba(245,158,11,.04)';
3458
- doneEl.querySelector('.settings-section').style.borderColor='rgba(245,158,11,.2)';
3459
- doneEl.querySelector('div div:first-child').innerHTML='\u23F8 <span>'+t('migrate.stopped')+'</span>';
3460
- doneEl.querySelector('div div:first-child').style.color='#f59e0b';
3433
+ document.getElementById('migrateBar').style.background='linear-gradient(90deg,#f59e0b,#fbbf24)';
3461
3434
  document.getElementById('migrateStartBtn').style.display='inline-flex';
3462
3435
  document.getElementById('migrateStartBtn').textContent=t('migrate.resume');
3463
- }else if(allSkipped){
3464
- summaryText+=' '+t('migrate.already.hint');
3465
- doneEl.querySelector('.settings-section').style.background='rgba(59,130,246,.04)';
3466
- doneEl.querySelector('.settings-section').style.borderColor='rgba(59,130,246,.2)';
3467
- doneEl.querySelector('div div:first-child').innerHTML='\u{1F4AD} <span>'+t('migrate.done')+'</span>';
3468
- doneEl.querySelector('div div:first-child').style.color='#3b82f6';
3469
3436
  }else{
3470
- doneEl.querySelector('.settings-section').style.background='rgba(34,197,94,.04)';
3471
- doneEl.querySelector('.settings-section').style.borderColor='rgba(34,197,94,.2)';
3472
- doneEl.querySelector('div div:first-child').innerHTML='\u2705 <span>'+t('migrate.done')+'</span>';
3473
- doneEl.querySelector('div div:first-child').style.color='#22c55e';
3474
- }
3475
- document.getElementById('migrateDoneSummary').textContent=summaryText;
3476
- if(!wasStopped){
3477
3437
  document.getElementById('migrateBar').style.width='100%';
3478
- document.getElementById('migrateBar').style.background=allSkipped?'linear-gradient(90deg,#3b82f6,#60a5fa)':'linear-gradient(90deg,#22c55e,#16a34a)';
3479
- }else{
3480
- document.getElementById('migrateBar').style.background='linear-gradient(90deg,#f59e0b,#fbbf24)';
3438
+ document.getElementById('migrateBar').style.background='linear-gradient(90deg,#22c55e,#16a34a)';
3481
3439
  }
3482
3440
  fetch('/api/migrate/scan').then(r=>r.json()).then(d=>{
3483
3441
  if(d.hasImportedData) document.getElementById('postprocessSection').style.display='block';
@@ -129,7 +129,7 @@ export class ViewerServer {
129
129
  }
130
130
 
131
131
  private hashPassword(pw: string): string {
132
- return crypto.createHash("sha256").update(pw + "memos-local-salt-2026").digest("hex");
132
+ return crypto.createHash("sha256").update(pw + "memos-lite-salt-2026").digest("hex");
133
133
  }
134
134
 
135
135
  private createSession(): string {
@@ -770,11 +770,18 @@ export class ViewerServer {
770
770
  return;
771
771
  }
772
772
  const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
773
- const pluginEntry = raw?.plugins?.entries?.["memos-local"]?.config ?? {};
773
+ const entries = raw?.plugins?.entries ?? {};
774
+ const pluginEntry = entries["memos-local-openclaw-plugin"]?.config
775
+ ?? entries["memos-lite-openclaw-plugin"]?.config
776
+ ?? entries["memos-lite"]?.config
777
+ ?? {};
774
778
  const result: Record<string, unknown> = { ...pluginEntry };
775
- if (raw?.plugins?.entries?.["memos-local"]?.config?.viewerPort == null) {
776
- const topLevel = raw?.plugins?.entries?.["memos-local"] ?? {};
777
- if (topLevel.viewerPort) result.viewerPort = topLevel.viewerPort;
779
+ const topEntry = entries["memos-local-openclaw-plugin"]
780
+ ?? entries["memos-lite-openclaw-plugin"]
781
+ ?? entries["memos-lite"]
782
+ ?? {};
783
+ if (pluginEntry.viewerPort == null && topEntry.viewerPort) {
784
+ result.viewerPort = topEntry.viewerPort;
778
785
  }
779
786
  this.jsonResponse(res, result);
780
787
  } catch (e) {
@@ -797,8 +804,12 @@ export class ViewerServer {
797
804
  const plugins = raw.plugins as Record<string, unknown>;
798
805
  if (!plugins.entries) plugins.entries = {};
799
806
  const entries = plugins.entries as Record<string, unknown>;
800
- if (!entries["memos-local"]) entries["memos-local"] = { enabled: true };
801
- const entry = entries["memos-local"] as Record<string, unknown>;
807
+ const entryKey = entries["memos-local-openclaw-plugin"] ? "memos-local-openclaw-plugin"
808
+ : entries["memos-lite-openclaw-plugin"] ? "memos-lite-openclaw-plugin"
809
+ : entries["memos-lite"] ? "memos-lite"
810
+ : "memos-local-openclaw-plugin";
811
+ if (!entries[entryKey]) entries[entryKey] = { enabled: true };
812
+ const entry = entries[entryKey] as Record<string, unknown>;
802
813
  if (!entry.config) entry.config = {};
803
814
  const config = entry.config as Record<string, unknown>;
804
815
 
@@ -891,8 +902,9 @@ export class ViewerServer {
891
902
  if (fs.existsSync(cfgPath)) {
892
903
  try {
893
904
  const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
894
- const pluginCfg = raw?.plugins?.entries?.["memos-local"]?.config ??
895
- raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ?? {};
905
+ const pluginCfg = raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ??
906
+ raw?.plugins?.entries?.["memos-lite"]?.config ??
907
+ raw?.plugins?.entries?.["memos-lite-openclaw-plugin"]?.config ?? {};
896
908
  const emb = pluginCfg.embedding;
897
909
  hasEmbedding = !!(emb && emb.provider);
898
910
  const sum = pluginCfg.summarizer;
@@ -955,17 +967,18 @@ export class ViewerServer {
955
967
 
956
968
  if (this.migrationRunning) {
957
969
  res.write(`event: state\ndata: ${JSON.stringify(this.migrationState)}\n\n`);
970
+ this.migrationSSEClients.push(res);
971
+ res.on("close", () => {
972
+ this.migrationSSEClients = this.migrationSSEClients.filter(c => c !== res);
973
+ });
958
974
  } else if (this.migrationState.done) {
975
+ const evtName = this.migrationState.stopped ? "stopped" : "done";
959
976
  res.write(`event: state\ndata: ${JSON.stringify(this.migrationState)}\n\n`);
960
- res.write(`event: done\ndata: ${JSON.stringify({ ok: true })}\n\n`);
977
+ res.write(`event: ${evtName}\ndata: ${JSON.stringify({ ok: true })}\n\n`);
978
+ res.end();
979
+ } else {
961
980
  res.end();
962
- return;
963
981
  }
964
-
965
- this.migrationSSEClients.push(res);
966
- res.on("close", () => {
967
- this.migrationSSEClients = this.migrationSSEClients.filter(c => c !== res);
968
- });
969
982
  }
970
983
 
971
984
  private handleMigrateStart(req: http.IncomingMessage, res: http.ServerResponse): void {
@@ -1057,8 +1070,9 @@ export class ViewerServer {
1057
1070
  let summarizerCfg: any;
1058
1071
  try {
1059
1072
  const raw = JSON.parse(fs.readFileSync(cfgPath, "utf-8"));
1060
- const pluginCfg = raw?.plugins?.entries?.["memos-local"]?.config ??
1061
- raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ?? {};
1073
+ const pluginCfg = raw?.plugins?.entries?.["memos-local-openclaw-plugin"]?.config ??
1074
+ raw?.plugins?.entries?.["memos-lite"]?.config ??
1075
+ raw?.plugins?.entries?.["memos-lite-openclaw-plugin"]?.config ?? {};
1062
1076
  summarizerCfg = pluginCfg.summarizer;
1063
1077
  } catch { /* no config */ }
1064
1078