@memtensor/memos-local-openclaw-plugin 1.0.2-beta.3 → 1.0.2-beta.5
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/dist/capture/index.d.ts.map +1 -1
- package/dist/capture/index.js +41 -1
- package/dist/capture/index.js.map +1 -1
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +20 -7
- package/dist/embedding/index.js.map +1 -1
- package/dist/ingest/providers/anthropic.d.ts.map +1 -1
- package/dist/ingest/providers/anthropic.js +39 -25
- package/dist/ingest/providers/anthropic.js.map +1 -1
- package/dist/ingest/providers/bedrock.d.ts.map +1 -1
- package/dist/ingest/providers/bedrock.js +39 -25
- package/dist/ingest/providers/bedrock.js.map +1 -1
- package/dist/ingest/providers/gemini.d.ts.map +1 -1
- package/dist/ingest/providers/gemini.js +39 -25
- package/dist/ingest/providers/gemini.js.map +1 -1
- package/dist/ingest/providers/index.d.ts +19 -0
- package/dist/ingest/providers/index.d.ts.map +1 -1
- package/dist/ingest/providers/index.js +98 -10
- package/dist/ingest/providers/index.js.map +1 -1
- package/dist/ingest/providers/openai.d.ts.map +1 -1
- package/dist/ingest/providers/openai.js +39 -25
- package/dist/ingest/providers/openai.js.map +1 -1
- package/dist/ingest/worker.d.ts.map +1 -1
- package/dist/ingest/worker.js +8 -14
- package/dist/ingest/worker.js.map +1 -1
- package/dist/skill/bundled-memory-guide.d.ts +1 -1
- package/dist/skill/bundled-memory-guide.d.ts.map +1 -1
- package/dist/skill/bundled-memory-guide.js +9 -0
- package/dist/skill/bundled-memory-guide.js.map +1 -1
- package/dist/storage/sqlite.d.ts +14 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +42 -0
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/viewer/html.d.ts +1 -1
- package/dist/viewer/html.d.ts.map +1 -1
- package/dist/viewer/html.js +276 -51
- package/dist/viewer/html.js.map +1 -1
- package/dist/viewer/server.d.ts +4 -0
- package/dist/viewer/server.d.ts.map +1 -1
- package/dist/viewer/server.js +152 -27
- package/dist/viewer/server.js.map +1 -1
- package/index.ts +38 -85
- package/package.json +2 -1
- package/src/capture/index.ts +56 -1
- package/src/embedding/index.ts +13 -7
- package/src/ingest/providers/anthropic.ts +39 -25
- package/src/ingest/providers/bedrock.ts +39 -25
- package/src/ingest/providers/gemini.ts +39 -25
- package/src/ingest/providers/index.ts +112 -9
- package/src/ingest/providers/openai.ts +39 -25
- package/src/ingest/worker.ts +8 -15
- package/src/skill/bundled-memory-guide.ts +9 -0
- package/src/storage/sqlite.ts +49 -0
- package/src/viewer/html.ts +275 -50
- package/src/viewer/server.ts +143 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAk4IzD"}
|
package/dist/viewer/html.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.viewerHTML =
|
|
4
|
-
|
|
3
|
+
exports.viewerHTML = viewerHTML;
|
|
4
|
+
function viewerHTML(pluginVersion) {
|
|
5
|
+
const vBadge = pluginVersion ? `<span class="version-badge">v${pluginVersion}</span>` : '';
|
|
6
|
+
return `<!DOCTYPE html>
|
|
5
7
|
<html lang="zh-CN">
|
|
6
8
|
<head>
|
|
7
9
|
<meta charset="UTF-8">
|
|
@@ -113,13 +115,15 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
113
115
|
.topbar .brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px;color:var(--text);letter-spacing:-.02em;flex-shrink:0}
|
|
114
116
|
.topbar .brand .icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:22px;background:none;border-radius:0}
|
|
115
117
|
.topbar .brand .sub{font-weight:400;color:var(--text-muted);font-size:11px}
|
|
118
|
+
.version-badge{font-size:10px;font-weight:600;color:var(--text-muted);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);padding:1px 7px;border-radius:6px;margin-left:6px;letter-spacing:.02em;user-select:all}
|
|
119
|
+
[data-theme="light"] .version-badge{background:rgba(0,0,0,.05);border-color:rgba(0,0,0,.08);color:var(--text-sec)}
|
|
116
120
|
.topbar-center{flex:1;display:flex;justify-content:center}
|
|
117
121
|
.topbar .actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
|
|
118
122
|
|
|
119
123
|
.main-content{display:flex;flex:1;max-width:1400px;margin:0 auto;width:100%;padding:28px 32px;gap:28px}
|
|
120
124
|
|
|
121
125
|
/* ─── Sidebar ─── */
|
|
122
|
-
.sidebar{width:260px;flex-shrink:0}
|
|
126
|
+
.sidebar{width:260px;min-width:260px;flex-shrink:0}
|
|
123
127
|
.sidebar .stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:24px}
|
|
124
128
|
.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;transition:all .2s}
|
|
125
129
|
.stat-card:hover{border-color:var(--border-glow);background:var(--bg-card-hover)}
|
|
@@ -244,6 +248,16 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
244
248
|
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:28px}
|
|
245
249
|
|
|
246
250
|
/* ─── Toast ─── */
|
|
251
|
+
.emb-banner{display:flex;align-items:center;gap:10px;padding:12px 20px;font-size:13px;font-weight:500;border-radius:10px;margin:0 32px 0;animation:slideIn .3s ease}
|
|
252
|
+
.emb-banner.warning{background:rgba(245,158,11,.1);color:#d97706;border:1px solid rgba(245,158,11,.25)}
|
|
253
|
+
.emb-banner.error{background:rgba(239,68,68,.1);color:#ef4444;border:1px solid rgba(239,68,68,.25)}
|
|
254
|
+
[data-theme="light"] .emb-banner.warning{background:rgba(245,158,11,.08);color:#b45309}
|
|
255
|
+
[data-theme="light"] .emb-banner.error{background:rgba(239,68,68,.08);color:#dc2626}
|
|
256
|
+
.emb-banner span{flex:1}
|
|
257
|
+
.emb-banner-btn{background:none;border:1px solid currentColor;border-radius:6px;padding:4px 12px;font-size:12px;font-weight:600;color:inherit;cursor:pointer;white-space:nowrap;opacity:.85;transition:opacity .15s}
|
|
258
|
+
.emb-banner-btn:hover{opacity:1}
|
|
259
|
+
.emb-banner-close{background:none;border:none;font-size:18px;color:inherit;cursor:pointer;opacity:.5;padding:0 4px;line-height:1}
|
|
260
|
+
.emb-banner-close:hover{opacity:1}
|
|
247
261
|
.toast-container{position:fixed;top:80px;right:24px;z-index:1000;display:flex;flex-direction:column;gap:8px}
|
|
248
262
|
.toast{padding:14px 20px;border-radius:10px;font-size:13px;font-weight:500;box-shadow:var(--shadow-lg);animation:slideIn .3s ease;display:flex;align-items:center;gap:10px;max-width:360px;border:1px solid}
|
|
249
263
|
.toast.success{background:var(--green-bg);color:var(--green);border-color:rgba(16,185,129,.3)}
|
|
@@ -333,8 +347,12 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
333
347
|
.task-chunk-role.user{color:var(--pri)}
|
|
334
348
|
.task-chunk-role.assistant{color:var(--green)}
|
|
335
349
|
.task-chunk-role.tool{color:var(--amber)}
|
|
336
|
-
.task-chunk-bubble{padding:12px 16px;border-radius:16px;white-space:pre-wrap;word-break:break-word;max-height:
|
|
337
|
-
.task-chunk-bubble.
|
|
350
|
+
.task-chunk-bubble{padding:12px 16px;border-radius:16px;white-space:pre-wrap;word-break:break-word;max-height:none;overflow:hidden;position:relative;transition:all .2s}
|
|
351
|
+
.task-chunk-bubble.collapsed{max-height:200px}
|
|
352
|
+
.task-chunk-expand{display:none;align-items:center;justify-content:center;gap:4px;margin-top:4px;padding:4px 12px;font-size:12px;font-weight:600;color:var(--text-sec);cursor:pointer;user-select:none;border-radius:8px;transition:all .15s}
|
|
353
|
+
.task-chunk-expand:hover{color:var(--pri);background:rgba(99,102,241,.08)}
|
|
354
|
+
.task-chunk-expand .expand-arrow{display:inline-block;font-size:10px;transition:transform .2s}
|
|
355
|
+
.task-chunk-expand.is-expanded .expand-arrow{transform:rotate(180deg)}
|
|
338
356
|
.role-user .task-chunk-bubble{background:var(--pri);color:#000;border-bottom-right-radius:4px}
|
|
339
357
|
.role-assistant .task-chunk-bubble{background:var(--bg-card);border:1px solid var(--border);color:var(--text-sec);border-bottom-left-radius:4px}
|
|
340
358
|
.role-tool .task-chunk-bubble{background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.2);color:var(--text-sec);border-bottom-left-radius:4px;font-family:'SF Mono',Monaco,Consolas,monospace;font-size:12px}
|
|
@@ -424,6 +442,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
424
442
|
[data-theme="light"] .nav-tabs .tab.active{background:#fff;border-color:rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.08);color:var(--text)}
|
|
425
443
|
.analytics-view,.settings-view,.logs-view,.migrate-view{display:none;flex:1;min-width:0;flex-direction:column;gap:20px}
|
|
426
444
|
.analytics-view.show,.settings-view.show,.logs-view.show,.migrate-view.show{display:flex}
|
|
445
|
+
.feed-wrap,.tasks-view,.skills-view,.analytics-view,.settings-view,.logs-view,.migrate-view{max-width:960px}
|
|
427
446
|
|
|
428
447
|
/* ─── Logs ─── */
|
|
429
448
|
.logs-toolbar{display:flex;align-items:center;justify-content:space-between;padding:8px 0}
|
|
@@ -529,6 +548,28 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
529
548
|
[data-theme="light"] .settings-actions .btn-primary:hover{background:rgba(79,70,229,.1);border-color:#4f46e5}
|
|
530
549
|
.settings-saved{display:inline-flex;align-items:center;gap:6px;color:var(--green);font-size:12px;font-weight:600;opacity:0;transition:opacity .3s}
|
|
531
550
|
.settings-saved.show{opacity:1}
|
|
551
|
+
.model-health-bar{margin-bottom:20px;border-radius:var(--radius-lg);overflow:hidden}
|
|
552
|
+
.mh-table{width:100%;border-collapse:separate;border-spacing:0;font-size:12px}
|
|
553
|
+
.mh-table th{text-align:left;padding:6px 12px;font-size:10px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;background:var(--bg);border-bottom:1px solid var(--border)}
|
|
554
|
+
.mh-table td{padding:8px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
|
|
555
|
+
.mh-table tr:last-child td{border-bottom:none}
|
|
556
|
+
.mh-table tr:hover td{background:rgba(99,102,241,.025)}
|
|
557
|
+
.mh-table .mh-cell-name{display:flex;align-items:center;gap:8px;font-weight:500;color:var(--text)}
|
|
558
|
+
.mh-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block}
|
|
559
|
+
.mh-dot.ok{background:#22c55e;box-shadow:0 0 0 2px rgba(34,197,94,.15)}
|
|
560
|
+
.mh-dot.degraded{background:#f59e0b;box-shadow:0 0 0 2px rgba(245,158,11,.15)}
|
|
561
|
+
.mh-dot.error{background:#ef4444;box-shadow:0 0 0 2px rgba(239,68,68,.15);animation:healthPulse 2s ease infinite}
|
|
562
|
+
.mh-dot.unknown{background:#94a3b8;box-shadow:0 0 0 2px rgba(148,163,184,.15)}
|
|
563
|
+
.mh-badge{display:inline-block;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600;letter-spacing:.02em}
|
|
564
|
+
.mh-badge.ok{background:rgba(34,197,94,.1);color:#16a34a}
|
|
565
|
+
.mh-badge.degraded{background:rgba(245,158,11,.1);color:#d97706}
|
|
566
|
+
.mh-badge.error{background:rgba(239,68,68,.1);color:#dc2626}
|
|
567
|
+
.mh-badge.unknown{background:rgba(148,163,184,.1);color:#64748b}
|
|
568
|
+
.mh-model-name{color:var(--text-muted);font-size:11px;font-family:var(--font-mono,'SFMono-Regular',Consolas,monospace)}
|
|
569
|
+
.mh-err-text{font-size:11px;color:var(--rose);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:help}
|
|
570
|
+
.mh-time{font-size:10px;color:var(--text-muted);white-space:nowrap}
|
|
571
|
+
.mh-empty{padding:16px;font-size:12px;color:var(--text-muted);text-align:center}
|
|
572
|
+
@keyframes healthPulse{0%,100%{opacity:1}50%{opacity:.4}}
|
|
532
573
|
.migrate-log-item{display:flex;align-items:flex-start;gap:10px;padding:8px 14px;border-bottom:1px solid var(--border);animation:migrateFadeIn .3s ease}
|
|
533
574
|
.migrate-log-item:last-child{border-bottom:none}
|
|
534
575
|
.migrate-log-item .log-icon{flex-shrink:0;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;margin-top:2px}
|
|
@@ -549,18 +590,19 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
549
590
|
@keyframes migrateFadeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
|
|
550
591
|
.feed-wrap{flex:1;min-width:0;display:flex;flex-direction:column}
|
|
551
592
|
.feed-wrap.hide{display:none}
|
|
593
|
+
.analytics-view{flex-direction:column;gap:20px}
|
|
552
594
|
.analytics-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
|
|
553
|
-
.analytics-card{position:relative;overflow:hidden;border-radius:var(--radius-lg);padding:
|
|
595
|
+
.analytics-card{position:relative;overflow:hidden;border-radius:var(--radius-lg);padding:18px 16px;transition:all .2s ease;border:1px solid var(--border);background:var(--bg-card)}
|
|
554
596
|
.analytics-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--pri);opacity:.5}
|
|
555
597
|
.analytics-card::after{display:none}
|
|
556
598
|
.analytics-card:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--border-glow)}
|
|
557
599
|
.analytics-card.green::before{background:var(--green)}
|
|
558
600
|
.analytics-card.amber::before{background:var(--amber)}
|
|
559
|
-
.analytics-card .ac-value{font-size:
|
|
601
|
+
.analytics-card .ac-value{font-size:24px;font-weight:700;letter-spacing:-.03em;color:var(--text);line-height:1;-webkit-text-fill-color:unset;background:none}
|
|
560
602
|
.analytics-card.green .ac-value{color:var(--green);background:none}
|
|
561
603
|
.analytics-card.amber .ac-value{color:var(--amber);background:none}
|
|
562
604
|
.analytics-card .ac-label{font-size:11px;color:var(--text-muted);margin-top:6px;font-weight:500;text-transform:uppercase;letter-spacing:.06em}
|
|
563
|
-
.analytics-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:
|
|
605
|
+
.analytics-section{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px 20px;position:relative;overflow:hidden}
|
|
564
606
|
.analytics-section::before{display:none}
|
|
565
607
|
.analytics-section h3{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:16px;display:flex;align-items:center;gap:8px}
|
|
566
608
|
.analytics-section h3 .icon{font-size:14px;opacity:.6}
|
|
@@ -720,7 +762,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
720
762
|
<div class="topbar">
|
|
721
763
|
<div class="brand">
|
|
722
764
|
<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>
|
|
723
|
-
<span data-i18n="title">OpenClaw Memory</span
|
|
765
|
+
<span data-i18n="title">OpenClaw Memory</span>${vBadge}
|
|
724
766
|
</div>
|
|
725
767
|
<div class="topbar-center">
|
|
726
768
|
<nav class="nav-tabs">
|
|
@@ -749,10 +791,12 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
749
791
|
<div class="stat-card amber"><div class="stat-value" id="statEmbeddings">-</div><div class="stat-label" data-i18n="stat.embeddings">Embeddings</div></div>
|
|
750
792
|
<div class="stat-card rose"><div class="stat-value" id="statTimeSpan">-</div><div class="stat-label" data-i18n="stat.days">Days</div></div>
|
|
751
793
|
</div>
|
|
752
|
-
<div id="
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
794
|
+
<div id="sidebarSessionSection">
|
|
795
|
+
<div id="embeddingStatus"></div>
|
|
796
|
+
<div class="section-title" data-i18n="sidebar.sessions">Sessions</div>
|
|
797
|
+
<div class="session-list" id="sessionList"></div>
|
|
798
|
+
<button class="btn btn-sm btn-ghost" style="width:100%;margin-top:20px;justify-content:center;color:var(--text-muted);font-size:11px" onclick="clearAll()" data-i18n="sidebar.clear">\u{1F5D1} Clear All Data</button>
|
|
799
|
+
</div>
|
|
756
800
|
</div>
|
|
757
801
|
|
|
758
802
|
<div class="feed-wrap" id="feedWrap">
|
|
@@ -878,7 +922,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
878
922
|
</div>
|
|
879
923
|
</div>
|
|
880
924
|
<div class="analytics-view" id="analyticsView">
|
|
881
|
-
<div class="metrics-toolbar">
|
|
925
|
+
<div class="metrics-toolbar" style="margin-bottom:0">
|
|
882
926
|
<span style="font-size:12px;color:var(--text-sec);font-weight:600" data-i18n="range">Range</span>
|
|
883
927
|
<button class="range-btn" data-days="7" onclick="setMetricsDays(7)">7 <span data-i18n="range.days">days</span></button>
|
|
884
928
|
<button class="range-btn active" data-days="30" onclick="setMetricsDays(30)">30 <span data-i18n="range.days">days</span></button>
|
|
@@ -910,7 +954,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
910
954
|
<div id="toolAggTable" style="margin-top:20px"></div>
|
|
911
955
|
</div>
|
|
912
956
|
|
|
913
|
-
<div class="breakdown-grid" style="display:grid;grid-template-columns:1fr 1fr;gap:
|
|
957
|
+
<div class="breakdown-grid" style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
|
914
958
|
<div class="analytics-section">
|
|
915
959
|
<h3><span class="icon">\u{1F464}</span> <span data-i18n="breakdown.role">By Role</span></h3>
|
|
916
960
|
<div id="breakdownRole"></div>
|
|
@@ -943,6 +987,12 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
943
987
|
<div class="settings-view" id="settingsView">
|
|
944
988
|
<div class="settings-group" id="settingsModelConfig">
|
|
945
989
|
<h2 class="settings-group-title"><span data-i18n="settings.modelconfig">Model Configuration</span></h2>
|
|
990
|
+
<div class="settings-section">
|
|
991
|
+
<h3><span class="icon">\u{1F4CA}</span> <span data-i18n="settings.modelhealth">Model Health</span></h3>
|
|
992
|
+
<div class="model-health-bar" id="modelHealthBar">
|
|
993
|
+
<div style="font-size:12px;color:var(--text-muted);width:100%">Loading model status...</div>
|
|
994
|
+
</div>
|
|
995
|
+
</div>
|
|
946
996
|
<div class="settings-section">
|
|
947
997
|
<h3><span class="icon">\u{1F4E1}</span> <span data-i18n="settings.embedding">Embedding Model</span></h3>
|
|
948
998
|
<div class="settings-grid">
|
|
@@ -1311,6 +1361,7 @@ input,textarea,select{font-family:inherit;font-size:inherit}
|
|
|
1311
1361
|
|
|
1312
1362
|
<script>
|
|
1313
1363
|
let activeSession=null,activeRole='',editingId=null,searchTimer=null,memoryCache={},currentPage=1,totalPages=1,totalCount=0,PAGE_SIZE=40,metricsDays=30;
|
|
1364
|
+
let _embeddingWarningShown=false;
|
|
1314
1365
|
|
|
1315
1366
|
/* ─── i18n ─── */
|
|
1316
1367
|
const I18N={
|
|
@@ -1370,6 +1421,8 @@ const I18N={
|
|
|
1370
1421
|
'tasks.untitled':'Untitled Task',
|
|
1371
1422
|
'tasks.chunks':'Related Memories',
|
|
1372
1423
|
'tasks.nochunks':'No memories in this task yet.',
|
|
1424
|
+
'tasks.expand':'Show more',
|
|
1425
|
+
'tasks.collapse':'Show less',
|
|
1373
1426
|
'tasks.skipped.default':'This conversation was too brief to generate a summary. It will not appear in search results.',
|
|
1374
1427
|
'refresh':'\\u21BB Refresh',
|
|
1375
1428
|
'logout':'Logout',
|
|
@@ -1462,6 +1515,9 @@ const I18N={
|
|
|
1462
1515
|
'confirm.clearall2':'Are you absolutely sure?',
|
|
1463
1516
|
'embed.on':'Embedding: ',
|
|
1464
1517
|
'embed.off':'No embedding model',
|
|
1518
|
+
'embed.warn.local':'Using built-in mini model (384d). Search quality is limited — configure an embedding model in Settings for best results.',
|
|
1519
|
+
'embed.err.fail':'Embedding model error detected. Check Settings → Model Health.',
|
|
1520
|
+
'embed.banner.goto':'Go to Settings',
|
|
1465
1521
|
'lang.switch':'中',
|
|
1466
1522
|
'tab.logs':'\u{1F4DD} Logs',
|
|
1467
1523
|
'logs.allTools':'All Tools',
|
|
@@ -1474,6 +1530,7 @@ const I18N={
|
|
|
1474
1530
|
'tab.import':'\u{1F4E5} Import',
|
|
1475
1531
|
'tab.settings':'\u2699 Settings',
|
|
1476
1532
|
'settings.modelconfig':'Model Configuration',
|
|
1533
|
+
'settings.modelhealth':'Model Health',
|
|
1477
1534
|
'settings.embedding':'Embedding Model',
|
|
1478
1535
|
'settings.summarizer':'Summarizer Model',
|
|
1479
1536
|
'settings.skill':'Skill Evolution',
|
|
@@ -1679,6 +1736,8 @@ const I18N={
|
|
|
1679
1736
|
'tasks.untitled':'未命名任务',
|
|
1680
1737
|
'tasks.chunks':'关联记忆',
|
|
1681
1738
|
'tasks.nochunks':'此任务暂无关联记忆。',
|
|
1739
|
+
'tasks.expand':'展开全文',
|
|
1740
|
+
'tasks.collapse':'收起',
|
|
1682
1741
|
'tasks.skipped.default':'对话内容过少,未生成摘要。该任务不会出现在检索结果中。',
|
|
1683
1742
|
'refresh':'\\u21BB 刷新',
|
|
1684
1743
|
'logout':'退出',
|
|
@@ -1771,6 +1830,9 @@ const I18N={
|
|
|
1771
1830
|
'confirm.clearall2':'你真的确定吗?',
|
|
1772
1831
|
'embed.on':'嵌入模型:',
|
|
1773
1832
|
'embed.off':'无嵌入模型',
|
|
1833
|
+
'embed.warn.local':'当前使用内置迷你模型(384维),搜索效果有限。强烈建议在「设置」中配置专用 Embedding 模型以获得最佳效果。',
|
|
1834
|
+
'embed.err.fail':'Embedding 模型调用异常,请前往「设置 → 模型健康」检查。',
|
|
1835
|
+
'embed.banner.goto':'前往设置',
|
|
1774
1836
|
'lang.switch':'EN',
|
|
1775
1837
|
'tab.logs':'\u{1F4DD} 日志',
|
|
1776
1838
|
'logs.allTools':'全部工具',
|
|
@@ -1783,6 +1845,7 @@ const I18N={
|
|
|
1783
1845
|
'tab.import':'\u{1F4E5} 导入',
|
|
1784
1846
|
'tab.settings':'\u2699 设置',
|
|
1785
1847
|
'settings.modelconfig':'模型配置',
|
|
1848
|
+
'settings.modelhealth':'模型健康',
|
|
1786
1849
|
'settings.embedding':'嵌入模型',
|
|
1787
1850
|
'settings.summarizer':'摘要模型',
|
|
1788
1851
|
'settings.skill':'技能进化',
|
|
@@ -2046,6 +2109,7 @@ function switchView(view){
|
|
|
2046
2109
|
const logsView=document.getElementById('logsView');
|
|
2047
2110
|
const settingsView=document.getElementById('settingsView');
|
|
2048
2111
|
const migrateView=document.getElementById('migrateView');
|
|
2112
|
+
const sidebar=document.getElementById('sidebar');
|
|
2049
2113
|
feedWrap.classList.add('hide');
|
|
2050
2114
|
analyticsView.classList.remove('show');
|
|
2051
2115
|
tasksView.classList.remove('show');
|
|
@@ -2053,26 +2117,33 @@ function switchView(view){
|
|
|
2053
2117
|
logsView.classList.remove('show');
|
|
2054
2118
|
settingsView.classList.remove('show');
|
|
2055
2119
|
migrateView.classList.remove('show');
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
loadMetrics();
|
|
2059
|
-
} else if(view==='tasks'){
|
|
2060
|
-
tasksView.classList.add('show');
|
|
2061
|
-
loadTasks();
|
|
2062
|
-
} else if(view==='skills'){
|
|
2063
|
-
skillsView.classList.add('show');
|
|
2064
|
-
loadSkills();
|
|
2065
|
-
} else if(view==='logs'){
|
|
2066
|
-
logsView.classList.add('show');
|
|
2067
|
-
loadLogs();
|
|
2068
|
-
} else if(view==='settings'){
|
|
2069
|
-
settingsView.classList.add('show');
|
|
2070
|
-
loadConfig();
|
|
2071
|
-
} else if(view==='import'){
|
|
2072
|
-
migrateView.classList.add('show');
|
|
2073
|
-
if(!window._migrateRunning) migrateScan();
|
|
2074
|
-
} else {
|
|
2120
|
+
const sessionSection=document.getElementById('sidebarSessionSection');
|
|
2121
|
+
if(view==='memories'){
|
|
2075
2122
|
feedWrap.classList.remove('hide');
|
|
2123
|
+
sessionSection.style.visibility='';
|
|
2124
|
+
sessionSection.style.pointerEvents='';
|
|
2125
|
+
} else if(view==='tasks'||view==='skills'){
|
|
2126
|
+
sessionSection.style.visibility='hidden';
|
|
2127
|
+
sessionSection.style.pointerEvents='none';
|
|
2128
|
+
if(view==='tasks'){tasksView.classList.add('show');loadTasks();}
|
|
2129
|
+
else{skillsView.classList.add('show');loadSkills();}
|
|
2130
|
+
} else {
|
|
2131
|
+
sessionSection.style.visibility='hidden';
|
|
2132
|
+
sessionSection.style.pointerEvents='none';
|
|
2133
|
+
if(view==='analytics'){
|
|
2134
|
+
analyticsView.classList.add('show');
|
|
2135
|
+
loadMetrics();
|
|
2136
|
+
} else if(view==='logs'){
|
|
2137
|
+
logsView.classList.add('show');
|
|
2138
|
+
loadLogs();
|
|
2139
|
+
} else if(view==='settings'){
|
|
2140
|
+
settingsView.classList.add('show');
|
|
2141
|
+
loadConfig();
|
|
2142
|
+
loadModelHealth();
|
|
2143
|
+
} else if(view==='import'){
|
|
2144
|
+
migrateView.classList.add('show');
|
|
2145
|
+
if(!window._migrateRunning) migrateScan();
|
|
2146
|
+
}
|
|
2076
2147
|
}
|
|
2077
2148
|
}
|
|
2078
2149
|
|
|
@@ -2425,14 +2496,16 @@ async function openTaskDetail(taskId){
|
|
|
2425
2496
|
if(task.chunks.length===0){
|
|
2426
2497
|
document.getElementById('taskDetailChunks').innerHTML='<div style="color:var(--text-muted);padding:12px;font-size:13px">'+t('tasks.nochunks')+'</div>';
|
|
2427
2498
|
}else{
|
|
2428
|
-
document.getElementById('taskDetailChunks').innerHTML=task.chunks.map(c
|
|
2499
|
+
document.getElementById('taskDetailChunks').innerHTML=task.chunks.map(function(c,i){
|
|
2429
2500
|
var roleLabel=c.role==='user'?t('tasks.role.user'):c.role==='assistant'?t('tasks.role.assistant'):c.role.toUpperCase();
|
|
2430
2501
|
return '<div class="task-chunk-item role-'+c.role+'">'+
|
|
2431
2502
|
'<div class="task-chunk-role '+c.role+'">'+roleLabel+'</div>'+
|
|
2432
|
-
'<div class="task-chunk-bubble"
|
|
2503
|
+
'<div class="task-chunk-bubble collapsed" id="chunk_b_'+i+'">'+esc(c.content)+'</div>'+
|
|
2504
|
+
'<div class="task-chunk-expand" id="chunk_e_'+i+'" onclick="toggleChunkExpand('+i+')"><span class="expand-arrow">▼</span> <span class="expand-label">'+t('tasks.expand')+'</span></div>'+
|
|
2433
2505
|
'<div class="task-chunk-time">'+formatTime(c.createdAt)+'</div>'+
|
|
2434
2506
|
'</div>';
|
|
2435
2507
|
}).join('');
|
|
2508
|
+
setTimeout(function(){initChunkExpanders(task.chunks.length)},50);
|
|
2436
2509
|
}
|
|
2437
2510
|
}catch(e){
|
|
2438
2511
|
document.getElementById('taskDetailTitle').textContent=t('tasks.error');
|
|
@@ -2496,6 +2569,33 @@ function renderTaskSkillSection(task){
|
|
|
2496
2569
|
}
|
|
2497
2570
|
}
|
|
2498
2571
|
|
|
2572
|
+
function initChunkExpanders(count){
|
|
2573
|
+
for(var i=0;i<count;i++){
|
|
2574
|
+
var b=document.getElementById('chunk_b_'+i);
|
|
2575
|
+
var e=document.getElementById('chunk_e_'+i);
|
|
2576
|
+
if(b && b.scrollHeight > b.clientHeight + 4){
|
|
2577
|
+
e.style.display='flex';
|
|
2578
|
+
} else if(b) {
|
|
2579
|
+
b.classList.remove('collapsed');
|
|
2580
|
+
}
|
|
2581
|
+
}
|
|
2582
|
+
}
|
|
2583
|
+
function toggleChunkExpand(i){
|
|
2584
|
+
var b=document.getElementById('chunk_b_'+i);
|
|
2585
|
+
var e=document.getElementById('chunk_e_'+i);
|
|
2586
|
+
if(!b||!e)return;
|
|
2587
|
+
var expanding=b.classList.contains('collapsed');
|
|
2588
|
+
if(expanding){
|
|
2589
|
+
b.classList.remove('collapsed');
|
|
2590
|
+
e.classList.add('is-expanded');
|
|
2591
|
+
e.querySelector('.expand-label').textContent=t('tasks.collapse');
|
|
2592
|
+
}else{
|
|
2593
|
+
b.classList.add('collapsed');
|
|
2594
|
+
e.classList.remove('is-expanded');
|
|
2595
|
+
e.querySelector('.expand-label').textContent=t('tasks.expand');
|
|
2596
|
+
}
|
|
2597
|
+
}
|
|
2598
|
+
|
|
2499
2599
|
function closeTaskDetail(event){
|
|
2500
2600
|
if(event && event.target!==document.getElementById('taskDetailOverlay')) return;
|
|
2501
2601
|
document.getElementById('taskDetailOverlay').classList.remove('show');
|
|
@@ -2749,6 +2849,93 @@ async function toggleSkillPublic(id,setPublic){
|
|
|
2749
2849
|
}
|
|
2750
2850
|
}
|
|
2751
2851
|
|
|
2852
|
+
/* ─── Model Health Status ─── */
|
|
2853
|
+
|
|
2854
|
+
const HEALTH_ROLE_LABELS={
|
|
2855
|
+
'embedding':'Embedding',
|
|
2856
|
+
'summarize':'Summarizer',
|
|
2857
|
+
'filterRelevant':'Memory Filter',
|
|
2858
|
+
'judgeDedup':'Dedup Judge',
|
|
2859
|
+
'summarizeTask':'Task Summarizer',
|
|
2860
|
+
'judgeNewTopic':'Topic Judge'
|
|
2861
|
+
};
|
|
2862
|
+
|
|
2863
|
+
function classifyError(msg){
|
|
2864
|
+
if(!msg) return '';
|
|
2865
|
+
if(msg.indexOf('\u989D\u5EA6\u5DF2\u7528\u5C3D')>=0||msg.indexOf('quota')>=0||msg.indexOf('RemainQuota')>=0) return 'API quota exhausted';
|
|
2866
|
+
if(msg.indexOf('401')>=0||msg.indexOf('Unauthorized')>=0) return 'Auth failed (401)';
|
|
2867
|
+
if(msg.indexOf('timeout')>=0||msg.indexOf('Timeout')>=0) return 'Request timed out';
|
|
2868
|
+
if(msg.indexOf('429')>=0) return 'Rate limited (429)';
|
|
2869
|
+
if(msg.indexOf('ECONNREFUSED')>=0) return 'Connection refused';
|
|
2870
|
+
if(msg.indexOf('ENOTFOUND')>=0) return 'DNS resolution failed';
|
|
2871
|
+
if(msg.indexOf('403')>=0) return 'Forbidden (403)';
|
|
2872
|
+
return msg.length>50?msg.slice(0,47)+'...':msg;
|
|
2873
|
+
}
|
|
2874
|
+
|
|
2875
|
+
function shortenModel(s){return s?s.replace('openai_compatible/','').replace('openai/',''):'\u2014';}
|
|
2876
|
+
|
|
2877
|
+
async function loadModelHealth(){
|
|
2878
|
+
var bar=document.getElementById('modelHealthBar');
|
|
2879
|
+
if(!bar) return;
|
|
2880
|
+
try{
|
|
2881
|
+
var r=await fetch('/api/model-health');
|
|
2882
|
+
if(!r.ok){bar.innerHTML='<div class="mh-empty">Health data unavailable</div>';return;}
|
|
2883
|
+
var d=await r.json();
|
|
2884
|
+
var models=d.models||[];
|
|
2885
|
+
if(models.length===0){
|
|
2886
|
+
bar.innerHTML='<div class="mh-empty">No model calls recorded yet</div>';
|
|
2887
|
+
return;
|
|
2888
|
+
}
|
|
2889
|
+
var order=['embedding','summarize','filterRelevant','judgeDedup','summarizeTask','judgeNewTopic'];
|
|
2890
|
+
models.sort(function(a,b){var ai=order.indexOf(a.role),bi=order.indexOf(b.role);if(ai<0)ai=99;if(bi<0)bi=99;return ai-bi;});
|
|
2891
|
+
|
|
2892
|
+
var h='<table class="mh-table"><thead><tr>';
|
|
2893
|
+
h+='<th style="width:30px"></th><th>Role</th><th>Status</th><th>Model</th><th>Issue</th><th style="text-align:right">Updated</th>';
|
|
2894
|
+
h+='</tr></thead><tbody>';
|
|
2895
|
+
|
|
2896
|
+
for(var i=0;i<models.length;i++){
|
|
2897
|
+
var m=models[i];
|
|
2898
|
+
var st=m.status||'unknown';
|
|
2899
|
+
var label=HEALTH_ROLE_LABELS[m.role]||m.role;
|
|
2900
|
+
var badgeText=st==='ok'?'OK':st==='degraded'?'Degraded':st==='error'?'Error':'\u2014';
|
|
2901
|
+
var ago='';
|
|
2902
|
+
if(st==='ok'&&m.lastSuccess) ago=timeAgo(m.lastSuccess);
|
|
2903
|
+
else if(m.lastError) ago=timeAgo(m.lastError);
|
|
2904
|
+
|
|
2905
|
+
h+='<tr>';
|
|
2906
|
+
h+='<td><span class="mh-dot '+st+'"></span></td>';
|
|
2907
|
+
h+='<td><span style="font-weight:500">'+escapeHtml(label)+'</span></td>';
|
|
2908
|
+
h+='<td><span class="mh-badge '+st+'">'+badgeText+'</span></td>';
|
|
2909
|
+
h+='<td><span class="mh-model-name">'+escapeHtml(shortenModel(m.model))+'</span></td>';
|
|
2910
|
+
|
|
2911
|
+
var issue='';
|
|
2912
|
+
if((st==='error'||st==='degraded')&&m.lastErrorMessage){
|
|
2913
|
+
var shortErr=classifyError(m.lastErrorMessage);
|
|
2914
|
+
if(m.failedModel&&m.failedModel!==m.model) issue=shortenModel(m.failedModel)+': ';
|
|
2915
|
+
issue+=shortErr;
|
|
2916
|
+
if(m.consecutiveErrors>1) issue+=' ('+m.consecutiveErrors+'x)';
|
|
2917
|
+
}
|
|
2918
|
+
if(issue) h+='<td><span class="mh-err-text" title="'+escapeHtml(m.lastErrorMessage||'')+'">'+escapeHtml(issue)+'</span></td>';
|
|
2919
|
+
else h+='<td><span style="color:var(--text-muted);font-size:11px">\u2014</span></td>';
|
|
2920
|
+
|
|
2921
|
+
h+='<td style="text-align:right"><span class="mh-time">'+(ago||'\u2014')+'</span></td>';
|
|
2922
|
+
h+='</tr>';
|
|
2923
|
+
}
|
|
2924
|
+
h+='</tbody></table>';
|
|
2925
|
+
bar.innerHTML=h;
|
|
2926
|
+
}catch(e){
|
|
2927
|
+
bar.innerHTML='<div class="mh-empty">Failed to load model health</div>';
|
|
2928
|
+
}
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
function timeAgo(ts){
|
|
2932
|
+
var diff=Date.now()-ts;
|
|
2933
|
+
if(diff<60000) return 'just now';
|
|
2934
|
+
if(diff<3600000) return Math.floor(diff/60000)+'m ago';
|
|
2935
|
+
if(diff<86400000) return Math.floor(diff/3600000)+'h ago';
|
|
2936
|
+
return Math.floor(diff/86400000)+'d ago';
|
|
2937
|
+
}
|
|
2938
|
+
|
|
2752
2939
|
/* ─── Settings / Config ─── */
|
|
2753
2940
|
async function loadConfig(){
|
|
2754
2941
|
try{
|
|
@@ -2950,15 +3137,16 @@ async function testModel(type){
|
|
|
2950
3137
|
var d=await r.json();
|
|
2951
3138
|
if(d.ok){
|
|
2952
3139
|
resultEl.className='test-result ok';
|
|
2953
|
-
resultEl.innerHTML='\\u2705 '+t('settings.test.ok')+'<div style="margin-top:4px;font-size:11px;color:var(--text-muted)">'+esc(d.detail
|
|
3140
|
+
resultEl.innerHTML='\\u2705 '+t('settings.test.ok')+(d.detail?'<div style="margin-top:4px;font-size:11px;color:var(--text-muted)">'+esc(d.detail)+'</div>':'');
|
|
2954
3141
|
}else{
|
|
2955
|
-
var errMsg=d.error||'Unknown error';
|
|
3142
|
+
var errMsg=(d.error||'Unknown error').replace(/:\s*$/,'').trim();
|
|
2956
3143
|
resultEl.className='test-result fail';
|
|
2957
|
-
resultEl.innerHTML='\\u274C '+t('settings.test.fail')+'<div style="margin-top:6px;font-size:11px;padding:8px 10px;background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.15);border-radius:6px;white-space:pre-wrap;word-break:break-all;max-height:120px;overflow-y:auto;font-family:SF Mono,Monaco,Consolas,monospace">'+esc(errMsg)+'</div>';
|
|
3144
|
+
resultEl.innerHTML='\\u274C '+t('settings.test.fail')+(errMsg?'<div style="margin-top:6px;font-size:11px;padding:8px 10px;background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.15);border-radius:6px;white-space:pre-wrap;word-break:break-all;max-height:120px;overflow-y:auto;font-family:SF Mono,Monaco,Consolas,monospace">'+esc(errMsg)+'</div>':'');
|
|
2958
3145
|
}
|
|
2959
3146
|
}catch(e){
|
|
3147
|
+
var catchMsg=(e.message||'Network error').replace(/:\s*$/,'').trim();
|
|
2960
3148
|
resultEl.className='test-result fail';
|
|
2961
|
-
resultEl.innerHTML='\\u274C '+t('settings.test.fail')+'<div style="margin-top:6px;font-size:11px;padding:8px 10px;background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.15);border-radius:6px;white-space:pre-wrap;word-break:break-all">'+esc(
|
|
3149
|
+
resultEl.innerHTML='\\u274C '+t('settings.test.fail')+(catchMsg?'<div style="margin-top:6px;font-size:11px;padding:8px 10px;background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.15);border-radius:6px;white-space:pre-wrap;word-break:break-all">'+esc(catchMsg)+'</div>':'');
|
|
2962
3150
|
}finally{btn.disabled=false;}
|
|
2963
3151
|
}
|
|
2964
3152
|
|
|
@@ -3326,6 +3514,20 @@ async function loadStats(){
|
|
|
3326
3514
|
provEl.innerHTML='<div class="provider-badge offline"><span>\\u26A0</span> '+t('embed.off')+'</div>';
|
|
3327
3515
|
}
|
|
3328
3516
|
|
|
3517
|
+
if(!_embeddingWarningShown){
|
|
3518
|
+
_embeddingWarningShown=true;
|
|
3519
|
+
if(!d.embeddingProvider||d.embeddingProvider==='local'||d.embeddingProvider==='none'){
|
|
3520
|
+
showEmbeddingBanner(t('embed.warn.local'),'warning');
|
|
3521
|
+
}
|
|
3522
|
+
fetch('/api/model-health').then(r=>r.json()).then(mh=>{
|
|
3523
|
+
var models=mh.models||[];
|
|
3524
|
+
var embModel=models.find(m=>m.role==='embedding');
|
|
3525
|
+
if(embModel&&embModel.status==='error'){
|
|
3526
|
+
showEmbeddingBanner(t('embed.err.fail'),'error');
|
|
3527
|
+
}
|
|
3528
|
+
}).catch(()=>{});
|
|
3529
|
+
}
|
|
3530
|
+
|
|
3329
3531
|
const sl=document.getElementById('sessionList');
|
|
3330
3532
|
sl.innerHTML='<div class="session-item'+(activeSession===null?' active':'')+'" onclick="filterSession(null)"><span>'+t('sidebar.allsessions')+'</span><span class="count">'+tm+'</span></div>';
|
|
3331
3533
|
(d.sessions||[]).forEach(s=>{
|
|
@@ -3389,17 +3591,24 @@ async function doSearch(q){
|
|
|
3389
3591
|
if(!q.trim()){currentPage=1;loadMemories();return}
|
|
3390
3592
|
const list=document.getElementById('memoryList');
|
|
3391
3593
|
list.innerHTML='<div class="spinner"></div>';
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3594
|
+
try{
|
|
3595
|
+
const p=getFilterParams();
|
|
3596
|
+
p.set('q',q);
|
|
3597
|
+
const r=await fetch('/api/search?'+p.toString());
|
|
3598
|
+
const d=await r.json();
|
|
3599
|
+
const total=d.total||0;
|
|
3600
|
+
const meta=[];
|
|
3601
|
+
if(d.vectorCount>0) meta.push(d.vectorCount+t('search.meta.semantic'));
|
|
3602
|
+
if(d.ftsCount>0) meta.push(d.ftsCount+t('search.meta.text'));
|
|
3603
|
+
meta.push(total+t('search.meta.results'));
|
|
3604
|
+
document.getElementById('searchMeta').textContent=meta.join(' \\u00B7 ');
|
|
3605
|
+
renderMemories(d.results||[]);
|
|
3606
|
+
document.getElementById('pagination').innerHTML='';
|
|
3607
|
+
}catch(e){
|
|
3608
|
+
document.getElementById('searchMeta').textContent='0'+t('search.meta.results');
|
|
3609
|
+
renderMemories([]);
|
|
3610
|
+
document.getElementById('pagination').innerHTML='';
|
|
3611
|
+
}
|
|
3403
3612
|
}
|
|
3404
3613
|
|
|
3405
3614
|
function debounceSearch(){
|
|
@@ -4206,6 +4415,21 @@ function ppDone(wasStopped,wasFailed,skipReload){
|
|
|
4206
4415
|
if(!skipReload) loadAll();
|
|
4207
4416
|
}
|
|
4208
4417
|
|
|
4418
|
+
/* ─── Embedding Banner ─── */
|
|
4419
|
+
function showEmbeddingBanner(msg,type){
|
|
4420
|
+
if(document.getElementById('embBanner')) return;
|
|
4421
|
+
var cls=type==='error'?'emb-banner error':'emb-banner warning';
|
|
4422
|
+
var icon=type==='error'?'\\u274C':'\\u26A0\\uFE0F';
|
|
4423
|
+
var btn='<button class="emb-banner-btn" onclick="switchView(\\'settings\\');this.parentElement.remove()">'+t('embed.banner.goto')+'</button>';
|
|
4424
|
+
var close='<button class="emb-banner-close" onclick="this.parentElement.remove()">×</button>';
|
|
4425
|
+
var el=document.createElement('div');
|
|
4426
|
+
el.id='embBanner';
|
|
4427
|
+
el.className=cls;
|
|
4428
|
+
el.innerHTML=icon+' <span>'+esc(msg)+'</span>'+btn+close;
|
|
4429
|
+
var mc=document.querySelector('.main-content');
|
|
4430
|
+
if(mc) mc.parentElement.insertBefore(el,mc);
|
|
4431
|
+
}
|
|
4432
|
+
|
|
4209
4433
|
/* ─── Toast ─── */
|
|
4210
4434
|
function toast(msg,type='info'){
|
|
4211
4435
|
const c=document.getElementById('toasts');
|
|
@@ -4259,4 +4483,5 @@ checkAuth();
|
|
|
4259
4483
|
|
|
4260
4484
|
</body>
|
|
4261
4485
|
</html>`;
|
|
4486
|
+
}
|
|
4262
4487
|
//# sourceMappingURL=html.js.map
|
package/dist/viewer/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/viewer/html.ts"],"names":[],"mappings":";;AAAA,gCAk4IC;AAl4ID,SAAgB,UAAU,CAAC,aAAsB;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,gCAAgC,aAAa,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAuvB+C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAwoHpD,CAAC;AACT,CAAC"}
|
package/dist/viewer/server.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare class ViewerServer {
|
|
|
20
20
|
private readonly auth;
|
|
21
21
|
private readonly ctx?;
|
|
22
22
|
private static readonly SESSION_TTL;
|
|
23
|
+
private static readonly PLUGIN_VERSION;
|
|
23
24
|
private resetToken;
|
|
24
25
|
private migrationRunning;
|
|
25
26
|
private migrationAbort;
|
|
@@ -31,6 +32,7 @@ export declare class ViewerServer {
|
|
|
31
32
|
private ppSSEClients;
|
|
32
33
|
constructor(opts: ViewerServerOptions);
|
|
33
34
|
start(): Promise<string>;
|
|
35
|
+
private autoCleanupPolluted;
|
|
34
36
|
stop(): void;
|
|
35
37
|
getResetToken(): string;
|
|
36
38
|
private loadAuth;
|
|
@@ -73,6 +75,7 @@ export declare class ViewerServer {
|
|
|
73
75
|
private serveConfig;
|
|
74
76
|
private handleSaveConfig;
|
|
75
77
|
private handleTestModel;
|
|
78
|
+
private serveModelHealth;
|
|
76
79
|
private serveFallbackModel;
|
|
77
80
|
private findPluginPackageJson;
|
|
78
81
|
private handleUpdateCheck;
|
|
@@ -81,6 +84,7 @@ export declare class ViewerServer {
|
|
|
81
84
|
private serveLogs;
|
|
82
85
|
private serveLogTools;
|
|
83
86
|
private getOpenClawHome;
|
|
87
|
+
private handleCleanupPolluted;
|
|
84
88
|
private handleMigrateScan;
|
|
85
89
|
private broadcastSSE;
|
|
86
90
|
private handleMigrateStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ7C,OAAO,KAAK,EAAE,MAAM,EAAS,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/viewer/server.ts"],"names":[],"mappings":"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"}
|