Files
ST-Bionic-Memory-Ecology/ui/panel.html
2026-04-14 19:55:30 +08:00

3067 lines
138 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div id="st-bme-panel-overlay">
<div id="st-bme-panel">
<div class="bme-panel-header">
<div class="bme-panel-title">
<i class="fa-solid fa-brain"></i>
<span>ST-BME 记忆图谱</span>
<span class="bme-panel-subtitle" id="bme-panel-status"
>SYSTEM_ACTIVE</span
>
</div>
<button
class="bme-fab-toggle-btn"
id="bme-fab-toggle-btn"
title="显示/隐藏悬浮球"
type="button"
>
<i class="fa-solid fa-circle-dot"></i>
</button>
<div class="bme-theme-picker">
<button
class="bme-theme-picker-btn"
id="bme-theme-picker-btn"
title="切换主题"
type="button"
>
<i class="fa-solid fa-palette"></i>
</button>
<div class="bme-theme-dropdown" id="bme-theme-dropdown">
<button class="bme-theme-option" data-theme="crimson" type="button">
<span class="bme-theme-swatch" style="background: #e94560"></span
>赤红合成
</button>
<button class="bme-theme-option" data-theme="cyan" type="button">
<span class="bme-theme-swatch" style="background: #00e5ff"></span
>霓虹青蓝
</button>
<button class="bme-theme-option" data-theme="amber" type="button">
<span class="bme-theme-swatch" style="background: #ffb300"></span
>琥珀终端
</button>
<button class="bme-theme-option" data-theme="violet" type="button">
<span class="bme-theme-swatch" style="background: #b388ff"></span
>紫雾迷离
</button>
<button class="bme-theme-option" data-theme="paperDawn" type="button">
<span class="bme-theme-swatch" style="background: #0d9488"></span
>晨光纸感
</button>
<button class="bme-theme-option" data-theme="glacierSky" type="button">
<span class="bme-theme-swatch" style="background: #2563eb"></span
>冰川晴空
</button>
</div>
</div>
<button
class="bme-panel-close"
id="bme-panel-close"
title="关闭"
type="button"
>
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="bme-panel-body">
<div class="bme-panel-sidebar">
<div class="bme-tab-list">
<button class="bme-tab-btn active" data-tab="dashboard" type="button">
<i class="fa-solid fa-chart-simple"></i>
<span>总览</span>
</button>
<button class="bme-tab-btn" data-tab="task" type="button">
<i class="fa-solid fa-list-check"></i>
<span>任务</span>
</button>
<button class="bme-tab-btn" data-tab="actions" type="button">
<i class="fa-solid fa-gear"></i>
<span>操作</span>
</button>
<button class="bme-tab-btn" data-tab="config" type="button">
<i class="fa-solid fa-sliders"></i>
<span>配置</span>
</button>
</div>
<div class="bme-config-sidebar" id="bme-config-sidebar">
<div class="bme-config-sidebar-header">
<div class="bme-config-sidebar-kicker">配置工作区</div>
<div class="bme-config-sidebar-title">ST-BME 设置</div>
<div class="bme-config-sidebar-help">
左侧切换配置页,右侧查看对应的完整设置表单。
</div>
</div>
<div class="bme-config-nav bme-config-nav-desktop">
<button
class="bme-config-nav-btn"
data-config-section="api"
type="button"
>
<i class="fa-solid fa-plug"></i>
<span>API 配置</span>
</button>
<button
class="bme-config-nav-btn active"
data-config-section="toggles"
type="button"
>
<i class="fa-solid fa-toggle-on"></i>
<span>功能开关</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="advanced"
type="button"
>
<i class="fa-solid fa-sliders"></i>
<span>详细参数</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="prompts"
type="button"
>
<i class="fa-solid fa-scroll"></i>
<span>任务预设</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="appearance"
type="button"
>
<i class="fa-solid fa-palette"></i>
<span>面板外观</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="cleanup"
type="button"
>
<i class="fa-solid fa-broom"></i>
<span>数据清理</span>
</button>
</div>
</div>
<div class="bme-task-sidebar" id="bme-task-sidebar">
<div class="bme-task-sidebar-header">
<div class="bme-task-sidebar-kicker">任务监控</div>
<div class="bme-task-sidebar-title">ST-BME 任务流</div>
<div class="bme-task-sidebar-help">
左侧切换监控视图,右侧查看实时任务状态。
</div>
</div>
<div class="bme-task-nav bme-task-nav-desktop">
<button
class="bme-task-nav-btn active"
data-task-section="pipeline"
type="button"
>
<i class="fa-solid fa-gauge-high"></i>
<span>管线总览</span>
</button>
<button
class="bme-task-nav-btn"
data-task-section="timeline"
type="button"
>
<i class="fa-solid fa-timeline"></i>
<span>任务流水</span>
</button>
<button
class="bme-task-nav-btn"
data-task-section="memory"
type="button"
>
<i class="fa-solid fa-brain"></i>
<span>记忆浏览</span>
</button>
<button
class="bme-task-nav-btn"
data-task-section="injection"
type="button"
>
<i class="fa-solid fa-syringe"></i>
<span>注入预览</span>
</button>
<button
class="bme-task-nav-btn"
data-task-section="trace"
type="button"
>
<i class="fa-solid fa-route"></i>
<span>消息追踪</span>
</button>
<button
class="bme-task-nav-btn"
data-task-section="persistence"
type="button"
>
<i class="fa-solid fa-database"></i>
<span>持久化</span>
</button>
</div>
</div>
<div class="bme-tab-content">
<div class="bme-tab-pane active" id="bme-pane-dashboard">
<div class="bme-stats-grid">
<div class="bme-stat-card">
<div class="bme-stat-label">活跃节点</div>
<div class="bme-stat-value" id="bme-stat-nodes">0</div>
</div>
<div class="bme-stat-card">
<div class="bme-stat-label">边连接</div>
<div class="bme-stat-value" id="bme-stat-edges">0</div>
</div>
<div class="bme-stat-card">
<div class="bme-stat-label">已归档</div>
<div class="bme-stat-value" id="bme-stat-archived">0</div>
</div>
<div class="bme-stat-card">
<div class="bme-stat-label">碎片率</div>
<div class="bme-stat-value warning" id="bme-stat-frag">0%</div>
</div>
</div>
<div class="bme-config-card">
<div class="bme-section-header">运行状态</div>
<div class="bme-config-row">
<label>当前聊天</label>
<div class="bme-recent-meta" id="bme-status-chat-id"></div>
</div>
<div class="bme-config-row">
<label>历史状态</label>
<div class="bme-recent-meta" id="bme-status-history"></div>
</div>
<div class="bme-config-row">
<label>向量状态</label>
<div class="bme-recent-meta" id="bme-status-vector"></div>
</div>
<div class="bme-config-row">
<label>最近恢复</label>
<div class="bme-recent-meta" id="bme-status-recovery"></div>
</div>
<div class="bme-config-row">
<label>最近提取</label>
<div class="bme-recent-meta" id="bme-status-last-extract">
</div>
</div>
<div class="bme-config-row">
<label>最近持久化</label>
<div class="bme-recent-meta" id="bme-status-last-persist"></div>
</div>
<div class="bme-config-row" id="bme-persist-repair-row" hidden>
<label>持久化修复</label>
<div class="bme-task-inline-actions">
<button class="bme-config-secondary-btn" id="bme-act-retry-persist" type="button">
<i class="fa-solid fa-arrows-rotate"></i>
<span>重试持久化</span>
</button>
<button class="bme-config-secondary-btn" id="bme-act-probe-graph-load" type="button">
<i class="fa-solid fa-satellite-dish"></i>
<span>重新探测图谱</span>
</button>
</div>
</div>
<div class="bme-config-help" id="bme-persist-repair-help" hidden></div>
<div class="bme-config-row">
<label>最近向量</label>
<div class="bme-recent-meta" id="bme-status-last-vector"></div>
</div>
<div class="bme-config-row">
<label>最近召回</label>
<div class="bme-recent-meta" id="bme-status-last-recall"></div>
</div>
</div>
<div class="bme-config-card">
<div class="bme-section-header">认知 / 空间</div>
<div class="bme-config-row">
<label><i class="fa-solid fa-user" style="margin-right:4px;opacity:0.5"></i>当前场景锚点</label>
<div class="bme-recent-meta" id="bme-cognition-active-owner"></div>
</div>
<div class="bme-config-row">
<label><i class="fa-solid fa-location-dot" style="margin-right:4px;opacity:0.5"></i>当前地区</label>
<div class="bme-recent-meta" id="bme-cognition-active-region"></div>
</div>
<div class="bme-config-row">
<label><i class="fa-solid fa-diagram-project" style="margin-right:4px;opacity:0.5"></i>邻接地区</label>
<div class="bme-recent-meta" id="bme-cognition-adjacent-regions"></div>
</div>
<div class="bme-config-row">
<label><i class="fa-solid fa-users" style="margin-right:4px;opacity:0.5"></i>认知角色数</label>
<div class="bme-recent-meta" id="bme-cognition-owner-count">0</div>
</div>
<button
class="bme-config-secondary-btn bme-cognition-jump-btn"
id="bme-cognition-jump-to-view"
type="button"
>
<i class="fa-solid fa-brain"></i>
<span>在认知视图中查看完整认知 →</span>
</button>
</div>
<div class="bme-config-card">
<div class="bme-section-header">任务监视器</div>
<div class="bme-config-help">
默认跟随调试总开关;开启后展示最近的记忆任务流水。
</div>
<ul class="bme-recent-list" id="bme-ai-monitor-list"></ul>
</div>
<div class="bme-section-header">最近提取</div>
<ul class="bme-recent-list" id="bme-recent-extract"></ul>
<div class="bme-section-header">最近召回</div>
<ul class="bme-recent-list" id="bme-recent-recall"></ul>
</div>
<div class="bme-tab-pane" id="bme-pane-actions">
<div class="bme-action-groups">
<div class="bme-action-guard-banner" id="bme-action-guard-banner" hidden></div>
<!-- 记忆操作 -->
<div class="bme-action-group">
<div class="bme-action-group-header">
<span class="bme-action-group-title">记忆操作</span>
<span class="bme-action-group-sub">调用 LLM 处理记忆节点</span>
</div>
<div class="bme-action-grid">
<button class="bme-action-btn" id="bme-act-extract" type="button">
<i class="fa-solid fa-rotate"></i>
<span>重新提取</span>
</button>
<button class="bme-action-btn" id="bme-act-compress" type="button">
<i class="fa-solid fa-compress"></i>
<span>手动压缩</span>
</button>
<button class="bme-action-btn" id="bme-act-synopsis" type="button">
<i class="fa-solid fa-scroll"></i>
<span>生成小总结</span>
</button>
<button class="bme-action-btn" id="bme-act-summary-rollup" type="button">
<i class="fa-solid fa-layer-group"></i>
<span>执行总结折叠</span>
</button>
<button class="bme-action-btn" id="bme-act-summary-rebuild" type="button">
<i class="fa-solid fa-sitemap"></i>
<span>重建总结状态</span>
</button>
<button class="bme-action-btn" id="bme-act-evolve" type="button">
<i class="fa-solid fa-dna"></i>
<span>强制进化</span>
</button>
<button class="bme-action-btn" id="bme-act-sleep" type="button">
<i class="fa-solid fa-moon"></i>
<span>执行遗忘</span>
</button>
<button class="bme-action-btn" id="bme-act-undo-maintenance" type="button">
<i class="fa-solid fa-rotate-left"></i>
<span>撤销最近维护</span>
</button>
</div>
<div class="bme-action-group-extra">
<div class="bme-config-help">
重新提取:按总楼层计数(用户+AI首条 greeting 为 0。真正 system 不计入,且不受隐藏助手影响。
</div>
<div class="bme-config-row" style="margin-top:8px">
<label for="bme-extract-mode">提取模式</label>
<select id="bme-extract-mode" class="bme-config-select">
<option value="pending">提取未处理</option>
<option value="rerun">重新提取范围</option>
</select>
</div>
<div class="bme-action-range-row">
<div class="bme-config-row">
<label for="bme-extract-start-floor">起始楼层</label>
<input
id="bme-extract-start-floor"
class="bme-config-input"
type="number"
min="0"
max="999999"
placeholder="留空 = 当前重提"
/>
</div>
<div class="bme-config-row">
<label for="bme-extract-end-floor">终止楼层</label>
<input
id="bme-extract-end-floor"
class="bme-config-input"
type="number"
min="0"
max="999999"
placeholder="留空 = 到最新"
/>
</div>
</div>
<div class="bme-config-help" style="margin-top:8px">
重新提取范围:起始/终止都留空 = 当前重提;只填起始 = 从起始到最新。
</div>
<div class="bme-config-help" style="margin-top:12px">
重建总结状态:和上面的起始/终止楼层共用同一组范围;留空时按当前总结相关范围重建。
</div>
</div>
</div>
<!-- 向量操作 -->
<div class="bme-action-group">
<div class="bme-action-group-header">
<span class="bme-action-group-title">向量操作</span>
<span class="bme-action-group-sub">调用 Embedding API 计算节点向量</span>
</div>
<div class="bme-action-grid">
<button class="bme-action-btn" id="bme-act-vector-rebuild" type="button">
<i class="fa-solid fa-database"></i>
<span>重建向量</span>
</button>
<button class="bme-action-btn" id="bme-act-vector-range" type="button">
<i class="fa-solid fa-layer-group"></i>
<span>范围重建</span>
</button>
<button class="bme-action-btn" id="bme-act-vector-reembed" type="button">
<i class="fa-solid fa-wand-magic-sparkles"></i>
<span>直连重嵌</span>
</button>
</div>
<div class="bme-action-group-extra">
<div class="bme-config-help">
范围重建:仅重建与指定楼层范围相交的节点向量。留空时默认按整段聊天处理。
</div>
<div class="bme-action-range-row">
<div class="bme-config-row">
<label for="bme-range-start">起始楼层</label>
<input
id="bme-range-start"
class="bme-config-input"
type="number"
min="0"
max="999999"
/>
</div>
<div class="bme-config-row">
<label for="bme-range-end">结束楼层</label>
<input
id="bme-range-end"
class="bme-config-input"
type="number"
min="0"
max="999999"
/>
</div>
</div>
</div>
</div>
<!-- 图谱管理 -->
<div class="bme-action-group">
<div class="bme-action-group-header">
<span class="bme-action-group-title">图谱管理</span>
<span class="bme-action-group-sub">导入导出与危险操作</span>
</div>
<div class="bme-action-grid">
<button class="bme-action-btn" id="bme-act-export" type="button">
<i class="fa-solid fa-file-export"></i>
<span>导出图谱</span>
</button>
<button class="bme-action-btn" id="bme-act-import" type="button">
<i class="fa-solid fa-file-import"></i>
<span>导入图谱</span>
</button>
<button class="bme-action-btn danger" id="bme-act-rebuild" type="button">
<i class="fa-solid fa-triangle-exclamation"></i>
<span>重建图谱</span>
</button>
</div>
</div>
</div>
</div>
<div class="bme-tab-pane" id="bme-pane-config">
<div class="bme-config-placeholder">
<div class="bme-config-placeholder-title">
配置已切换到右侧工作区
</div>
<div class="bme-config-placeholder-help">
左侧子导航负责切页,右侧显示完整的配置表单。
</div>
</div>
</div>
<div class="bme-tab-pane" id="bme-pane-graph">
<div class="bme-graph-subtabs">
<button class="bme-graph-subtab active" data-mobile-graph-view="graph" type="button">
<i class="fa-solid fa-diagram-project"></i>
<span>实时图谱</span>
</button>
<button class="bme-graph-subtab" data-mobile-graph-view="cognition" type="button">
<i class="fa-solid fa-brain"></i>
<span>认知视图</span>
</button>
<button class="bme-graph-subtab" data-mobile-graph-view="summary" type="button">
<i class="fa-solid fa-layer-group"></i>
<span>总结视图</span>
</button>
</div>
<div class="bme-graph-view-content">
<div class="bme-mobile-graph-pane active" id="bme-mobile-graph-pane" data-mobile-graph-view="graph">
<div class="bme-mobile-canvas-wrap">
<canvas id="bme-mobile-graph-canvas"></canvas>
<div class="bme-graph-overlay" id="bme-mobile-graph-overlay" hidden>
<div class="bme-graph-overlay__text" id="bme-mobile-graph-overlay-text">
正在加载当前聊天图谱
</div>
</div>
<div class="bme-mobile-graph-float-controls">
<button id="bme-mobile-render-toggle" title="暂停图谱渲染" type="button">
<i class="fa-solid fa-pause"></i>
</button>
<button id="bme-mobile-zoom-in" title="放大" type="button">
<i class="fa-solid fa-plus"></i>
</button>
<button id="bme-mobile-zoom-out" title="缩小" type="button">
<i class="fa-solid fa-minus"></i>
</button>
<button id="bme-mobile-zoom-reset" title="重置" type="button">
<i class="fa-solid fa-arrows-rotate"></i>
</button>
</div>
</div>
<div class="bme-graph-legend" id="bme-mobile-graph-legend"></div>
<div class="bme-graph-statusbar">
<span><span class="bme-status-dot"></span><span id="bme-mobile-status-text">READY</span></span>
<span id="bme-mobile-status-meta">NODES: 0 | EDGES: 0</span>
<span id="bme-mobile-graph-layout-meta" class="bme-graph-layout-meta">LAYOUT: --</span>
</div>
</div>
<div class="bme-mobile-graph-pane" id="bme-mobile-cognition-pane" data-mobile-graph-view="cognition">
<div class="bme-cognition-workspace" id="bme-mobile-cognition-full">
<div class="bme-cog-status-strip" id="bme-mobile-cog-status-strip"></div>
<div class="bme-cog-body">
<div class="bme-cog-column bme-cog-column--owners">
<div class="bme-cog-section-title">
<i class="fa-solid fa-users"></i> 角色认知清单
</div>
<div class="bme-cog-owner-scroll" id="bme-mobile-cog-owner-list"></div>
<div class="bme-cog-owner-detail" id="bme-mobile-cog-owner-detail"></div>
</div>
<div class="bme-cog-column bme-cog-column--space">
<div class="bme-cog-section-title">
<i class="fa-solid fa-map-location-dot"></i> 空间控制台
</div>
<div class="bme-cog-space-tools" id="bme-mobile-cog-space-tools"></div>
<div class="bme-cog-section-title" style="margin-top:16px">
<i class="fa-solid fa-wave-square"></i> 任务监视器
</div>
<div class="bme-cog-monitor-mini" id="bme-mobile-cog-monitor-mini"></div>
</div>
</div>
</div>
</div>
<div class="bme-mobile-graph-pane" id="bme-mobile-summary-pane-full" data-mobile-graph-view="summary">
<div class="bme-cognition-workspace" id="bme-mobile-summary-full"></div>
</div>
</div>
<div
class="bme-node-detail-scrim"
id="bme-mobile-node-detail-scrim"
hidden
></div>
<div class="bme-node-detail" id="bme-mobile-node-detail">
<div class="bme-node-detail-header">
<h3 id="bme-mobile-detail-title">节点详情</h3>
<div class="bme-node-detail-actions">
<button class="bme-detail-action-btn bme-detail-action-danger" id="bme-mobile-detail-delete" type="button" title="删除节点">
<i class="fa-solid fa-trash"></i>
</button>
<button class="bme-detail-action-btn" id="bme-mobile-detail-save" type="button" title="保存修改">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="bme-panel-close" id="bme-mobile-detail-close" type="button" title="关闭">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
</div>
<div id="bme-mobile-detail-body"></div>
</div>
</div>
</div>
</div>
<div class="bme-resize-handle" id="bme-resize-handle"></div>
<div class="bme-panel-main">
<div class="bme-graph-workspace" id="bme-graph-workspace">
<div class="bme-graph-toolbar">
<div class="bme-graph-view-tabs">
<button class="bme-graph-view-tab active" data-graph-view="graph" type="button">
<i class="fa-solid fa-diagram-project"></i>
<span>实时图谱</span>
</button>
<button class="bme-graph-view-tab" data-graph-view="cognition" type="button">
<i class="fa-solid fa-brain"></i>
<span>认知视图</span>
</button>
<button class="bme-graph-view-tab" data-graph-view="summary" type="button">
<i class="fa-solid fa-layer-group"></i>
<span>总结视图</span>
</button>
</div>
<div class="bme-graph-controls">
<button id="bme-graph-render-toggle" title="暂停图谱渲染" type="button">
<i class="fa-solid fa-pause"></i>
</button>
<button id="bme-graph-zoom-in" title="放大" type="button">
<i class="fa-solid fa-plus"></i>
</button>
<button id="bme-graph-zoom-out" title="缩小" type="button">
<i class="fa-solid fa-minus"></i>
</button>
<button id="bme-graph-reset" title="重置" type="button">
<i class="fa-solid fa-arrows-rotate"></i>
</button>
</div>
</div>
<canvas id="bme-graph-canvas"></canvas>
<div class="bme-graph-overlay" id="bme-graph-overlay" hidden>
<div class="bme-graph-overlay__text" id="bme-graph-overlay-text">
正在加载当前聊天图谱
</div>
</div>
<div class="bme-graph-legend" id="bme-graph-legend"></div>
<div class="bme-graph-statusbar">
<span
><span class="bme-status-dot"></span
><span id="bme-status-text">READY</span></span
>
<span id="bme-status-meta">NODES: 0 | EDGES: 0</span>
<span id="bme-graph-layout-meta" class="bme-graph-layout-meta">LAYOUT: --</span>
</div>
<div class="bme-cognition-workspace" id="bme-cognition-workspace" hidden>
<div class="bme-cog-status-strip" id="bme-cog-status-strip"></div>
<div class="bme-cog-body">
<div class="bme-cog-column bme-cog-column--owners">
<div class="bme-cog-section-title">
<i class="fa-solid fa-users"></i> 角色认知清单
</div>
<div class="bme-cog-owner-scroll" id="bme-cog-owner-list"></div>
<div class="bme-cog-owner-detail" id="bme-cog-owner-detail"></div>
</div>
<div class="bme-cog-column bme-cog-column--space">
<div class="bme-cog-section-title">
<i class="fa-solid fa-map-location-dot"></i> 空间控制台
</div>
<div class="bme-cog-space-tools" id="bme-cog-space-tools"></div>
<div class="bme-cog-section-title" style="margin-top:16px">
<i class="fa-solid fa-wave-square"></i> 任务监视器
</div>
<div class="bme-cog-monitor-mini" id="bme-cog-monitor-mini"></div>
</div>
</div>
</div>
<div class="bme-cognition-workspace" id="bme-summary-workspace" hidden></div>
<div class="bme-node-detail" id="bme-node-detail">
<div class="bme-node-detail-header">
<h3 id="bme-detail-title">节点详情</h3>
<div class="bme-node-detail-actions">
<button
class="bme-detail-action-btn bme-detail-action-danger"
id="bme-detail-delete"
type="button"
title="删除节点"
>
<i class="fa-solid fa-trash"></i>
</button>
<button
class="bme-detail-action-btn"
id="bme-detail-save"
type="button"
title="保存修改"
>
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button
class="bme-panel-close"
id="bme-detail-close"
type="button"
title="关闭"
>
<i class="fa-solid fa-xmark"></i>
</button>
</div>
</div>
<div id="bme-detail-body"></div>
</div>
</div>
<div class="bme-config-workspace" id="bme-config-workspace">
<div class="bme-config-workspace-header">
<div>
<div class="bme-config-workspace-kicker">配置</div>
<h2 class="bme-config-workspace-title">ST-BME 配置工作区</h2>
<p class="bme-config-workspace-desc">
在这里集中配置第二记忆模型、功能开关、细粒度参数、任务预设和面板主题。
</p>
</div>
<div class="bme-config-workspace-actions">
<button class="bme-config-launch-btn" id="bme-open-ena-planner" type="button">
<i class="fa-solid fa-wand-magic-sparkles"></i>
<span>Ena Planner 设置</span>
</button>
<div class="bme-config-launch-hint" id="bme-open-ena-planner-hint">
检测中...
</div>
</div>
</div>
<div class="bme-config-nav bme-config-nav-mobile">
<button
class="bme-config-nav-btn"
data-config-section="api"
type="button"
>
<i class="fa-solid fa-plug"></i>
<span>API 配置</span>
</button>
<button
class="bme-config-nav-btn active"
data-config-section="toggles"
type="button"
>
<i class="fa-solid fa-toggle-on"></i>
<span>功能开关</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="advanced"
type="button"
>
<i class="fa-solid fa-sliders"></i>
<span>详细参数</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="prompts"
type="button"
>
<i class="fa-solid fa-scroll"></i>
<span>任务预设</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="appearance"
type="button"
>
<i class="fa-solid fa-palette"></i>
<span>面板外观</span>
</button>
<button
class="bme-config-nav-btn"
data-config-section="cleanup"
type="button"
>
<i class="fa-solid fa-broom"></i>
<span>数据清理</span>
</button>
</div>
<div class="bme-config-sections">
<section
class="bme-config-section"
data-config-section="api"
>
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">API 配置</div>
<h3 class="bme-config-section-title">模型连接与向量接入</h3>
<p class="bme-config-section-desc">
统一管理独立记忆 LLM 和 Embedding
的连接方式,保留现有后端代理与直连兜底逻辑。
</p>
</div>
<div class="bme-config-grid bme-config-grid-2">
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">记忆 LLM</div>
<div class="bme-config-card-subtitle">
留空时复用当前聊天模型;填写后会自动识别常见渠道,未识别时按自定义 OpenAI 兼容接口处理。
</div>
</div>
</div>
<div class="bme-config-row bme-llm-preset-row">
<label for="bme-llm-preset-select">LLM 配置模板</label>
<div class="bme-llm-preset-controls">
<select
id="bme-llm-preset-select"
class="bme-config-input"
>
<option value="">-- 手动模式 --</option>
</select>
<div class="bme-llm-preset-actions">
<button
id="bme-llm-preset-save"
class="bme-config-secondary-btn"
title="覆盖保存当前模板"
type="button"
>
<i class="fa-solid fa-floppy-disk"></i>
<span>保存</span>
</button>
<button
id="bme-llm-preset-save-as"
class="bme-config-secondary-btn"
title="另存为新模板"
type="button"
>
<i class="fa-solid fa-file-circle-plus"></i>
<span>另存为</span>
</button>
<button
id="bme-llm-preset-delete"
class="bme-config-secondary-btn"
title="删除当前模板"
type="button"
>
<i class="fa-solid fa-trash-can"></i>
<span>删除</span>
</button>
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-llm-url">LLM API 地址</label>
<input
id="bme-setting-llm-url"
class="bme-config-input"
type="text"
placeholder="https://api.openai.com/v1"
/>
</div>
<div class="bme-config-help" id="bme-memory-llm-provider-help">
留空时复用当前聊天模型。支持自动识别 OpenAI 兼容渠道、Anthropic Claude、Google AI Studio / Gemini填写完整 endpoint 时会自动规整为可复用的 base URL。
</div>
<div class="bme-config-row">
<label for="bme-setting-llm-key">LLM API Key</label>
<input
id="bme-setting-llm-key"
class="bme-config-input"
type="password"
placeholder="sk-..."
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-llm-model">LLM 模型</label>
<input
id="bme-setting-llm-model"
class="bme-config-input"
type="text"
placeholder="gpt-4.1-mini / qwen-max / deepseek-chat"
/>
</div>
<div class="bme-model-fetch-block">
<button
class="bme-config-secondary-btn"
id="bme-fetch-llm-models"
type="button"
>
<i class="fa-solid fa-rotate"></i>
<span>拉取模型</span>
</button>
<select
id="bme-select-llm-model"
class="bme-config-input bme-model-select"
style="display: none"
>
<option value="">从拉取结果中选择模型</option>
</select>
</div>
<div class="bme-config-actions">
<button
class="bme-config-test-btn"
id="bme-test-llm"
type="button"
>
<i class="fa-solid fa-plug"></i>
<span>测试记忆 LLM</span>
</button>
</div>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">Embedding</div>
<div class="bme-config-card-subtitle">
后端模式优先复用酒馆向量源,直连模式保留独立
URL/Key/Model。
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-mode">向量模式</label>
<select
id="bme-setting-embed-mode"
class="bme-config-input"
>
<option value="backend">后端索引</option>
<option value="direct">直连兜底</option>
</select>
</div>
<div id="bme-embed-backend-fields">
<div class="bme-config-row">
<label for="bme-setting-embed-backend-source"
>后端向量源</label
>
<select
id="bme-setting-embed-backend-source"
class="bme-config-input"
>
<option value="openai">OpenAI</option>
<option value="openrouter">OpenRouter</option>
<option value="cohere">Cohere</option>
<option value="mistral">Mistral</option>
<option value="electronhub">Electron Hub</option>
<option value="chutes">Chutes</option>
<option value="nanogpt">NanoGPT</option>
<option value="ollama">Ollama</option>
<option value="llamacpp">llama.cpp</option>
<option value="vllm">vLLM</option>
</select>
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-backend-model"
>后端模型</label
>
<input
id="bme-setting-embed-backend-model"
class="bme-config-input"
type="text"
placeholder="text-embedding-3-small / nomic-embed-text / BAAI/bge-m3"
/>
</div>
<div class="bme-model-fetch-block">
<button
class="bme-config-secondary-btn"
id="bme-fetch-embed-backend-models"
type="button"
>
<i class="fa-solid fa-rotate"></i>
<span>拉取模型</span>
</button>
<select
id="bme-select-embed-backend-model"
class="bme-config-input bme-model-select"
style="display: none"
>
<option value="">从拉取结果中选择模型</option>
</select>
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-backend-url"
>后端 API 地址</label
>
<input
id="bme-setting-embed-backend-url"
class="bme-config-input"
type="text"
placeholder="仅 Ollama / llama.cpp / vLLM 需要填写"
/>
</div>
<div class="bme-config-row inline">
<label
class="checkbox_label"
for="bme-setting-embed-auto-suffix"
>
<input
id="bme-setting-embed-auto-suffix"
type="checkbox"
/>
<span>自动补全 /embeddings 后缀</span>
</label>
</div>
<div class="bme-config-help">
如果当前页面是 HTTPS 而你填的是
HTTP本地浏览器可能会拦截混合内容远程部署时请优先使用
HTTPS 或宿主可访问的同源入口。
</div>
</div>
<div id="bme-embed-direct-fields">
<div class="bme-config-help">
直连模式会使用下面这组独立配置。
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-url"
>Embedding API 地址</label
>
<input
id="bme-setting-embed-url"
class="bme-config-input"
type="text"
placeholder="https://api.openai.com/v1"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-key"
>Embedding API Key</label
>
<input
id="bme-setting-embed-key"
class="bme-config-input"
type="password"
placeholder="sk-..."
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-embed-model"
>Embedding 模型</label
>
<input
id="bme-setting-embed-model"
class="bme-config-input"
type="text"
placeholder="text-embedding-3-small"
/>
</div>
<div class="bme-model-fetch-block">
<button
class="bme-config-secondary-btn"
id="bme-fetch-embed-direct-models"
type="button"
>
<i class="fa-solid fa-rotate"></i>
<span>拉取模型</span>
</button>
<select
id="bme-select-embed-direct-model"
class="bme-config-input bme-model-select"
style="display: none"
>
<option value="">从拉取结果中选择模型</option>
</select>
</div>
</div>
<div class="bme-config-actions">
<button
class="bme-config-test-btn"
id="bme-test-embedding"
type="button"
>
<i class="fa-solid fa-plug"></i>
<span>测试 Embedding</span>
</button>
</div>
</div>
</div>
<details
class="bme-config-card bme-collapsible-card"
id="bme-advanced-network-settings"
>
<summary class="bme-config-card-head bme-collapsible-summary">
<div>
<div class="bme-config-card-title">高级网络设置</div>
<div class="bme-config-card-subtitle">
默认折叠;统一控制
LLM、Embedding、后端向量与本地向量请求超时。
</div>
</div>
<span class="bme-collapsible-indicator" aria-hidden="true">
<i class="fa-solid fa-chevron-down"></i>
</span>
</summary>
<div class="bme-config-row">
<label for="bme-setting-timeout-ms">统一超时(毫秒)</label>
<input
id="bme-setting-timeout-ms"
class="bme-config-input"
type="number"
min="1000"
step="1000"
placeholder="300000"
/>
</div>
<div class="bme-config-help">
默认值为 300000ms5
分钟)。留空或填写无效值时会回退到默认值。
</div>
</details>
</section>
<section class="bme-config-section active" data-config-section="toggles">
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">功能开关</div>
<h3 class="bme-config-section-title">主链路与增强能力</h3>
<p class="bme-config-section-desc">
先决定哪些能力参与记忆链路,再到详细参数里微调各模块行为。
</p>
</div>
<div class="bme-capability-grid">
<label class="bme-capability-card" for="bme-setting-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-brain"></i></span>
<input id="bme-setting-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">自动记忆</div>
<div class="bme-cap-desc">开启自动提取、图谱写入与维护。</div>
</label>
<label class="bme-capability-card" for="bme-setting-recall-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-magnifying-glass"></i></span>
<input id="bme-setting-recall-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">生成前召回</div>
<div class="bme-cap-desc">在生成前检索相关记忆并注入 prompt。</div>
</label>
<label class="bme-capability-card" for="bme-setting-consolidation-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-code-merge"></i></span>
<input id="bme-setting-consolidation-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">记忆整合</div>
<div class="bme-cap-desc">去重/冲突检测 + 反向修正既有记忆 + 建立关联边。</div>
</label>
<label class="bme-capability-card" for="bme-setting-synopsis-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-scroll"></i></span>
<input id="bme-setting-synopsis-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">层级总结</div>
<div class="bme-cap-desc">按提取节奏生成原文锚定小总结,并自动折叠成更高层总结。</div>
</label>
<label class="bme-capability-card" for="bme-setting-visibility-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-shield-halved"></i></span>
<input id="bme-setting-visibility-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">认知边界</div>
<div class="bme-cap-desc">限制角色只访问自己可感知的记忆。</div>
</label>
<label class="bme-capability-card" for="bme-setting-cross-recall-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-diagram-project"></i></span>
<input id="bme-setting-cross-recall-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">交叉检索</div>
<div class="bme-cap-desc">扩展到多跳邻域和跨线索召回。</div>
</label>
<label class="bme-capability-card" for="bme-setting-smart-trigger-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-bolt"></i></span>
<input id="bme-setting-smart-trigger-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">惊奇触发</div>
<div class="bme-cap-desc">在高信息量或指定模式时提升提取敏感度。</div>
</label>
<label class="bme-capability-card" for="bme-setting-sleep-cycle-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-moon"></i></span>
<input id="bme-setting-sleep-cycle-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">主动遗忘</div>
<div class="bme-cap-desc">周期性清理低价值节点(归档)。</div>
</label>
<label class="bme-capability-card" for="bme-setting-auto-compression-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-compress"></i></span>
<input id="bme-setting-auto-compression-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">自动压缩</div>
<div class="bme-cap-desc">按提取周期做层级压缩,减少同类记忆越积越散。</div>
</label>
<label class="bme-capability-card" for="bme-setting-prob-recall-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-dice"></i></span>
<input id="bme-setting-prob-recall-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">概率召回</div>
<div class="bme-cap-desc">允许少量弱相关记忆以概率方式入围。</div>
</label>
<label class="bme-capability-card" for="bme-setting-reflection-enabled">
<div class="bme-cap-header">
<span class="bme-cap-icon"><i class="fa-solid fa-lightbulb"></i></span>
<input id="bme-setting-reflection-enabled" type="checkbox" />
</div>
<div class="bme-cap-title">反思</div>
<div class="bme-cap-desc">按周期生成长期叙事反思与关注点。</div>
</label>
</div>
<div class="bme-config-card" style="margin-top: 20px;">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">云端存储模式</div>
<div class="bme-config-card-subtitle">
自动模式沿用当前镜像同步;手动模式停止自动云端写入,改为按当前聊天手动备份与恢复。
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-cloud-storage-mode">存储模式</label>
<select
id="bme-setting-cloud-storage-mode"
class="bme-config-input"
>
<option value="automatic">自动储存</option>
<option value="manual">手动储存</option>
</select>
</div>
<div class="bme-config-help" id="bme-cloud-storage-mode-help">
自动储存会继续按当前镜像逻辑同步;手动储存只保留本地写入,需要你主动备份和恢复。
</div>
<div
class="bme-config-help"
id="bme-cloud-storage-mode-status"
style="display: none; margin-top: 8px;"
></div>
<div
id="bme-cloud-backup-manual-actions"
class="bme-config-actions"
style="display: none; margin-top: 12px; flex-wrap: wrap;"
>
<button
class="bme-config-secondary-btn"
id="bme-act-backup-to-cloud"
type="button"
>
<i class="fa-solid fa-cloud-arrow-up"></i>
<span>备份到云端</span>
</button>
<button
class="bme-config-secondary-btn"
id="bme-act-restore-from-cloud"
type="button"
>
<i class="fa-solid fa-cloud-arrow-down"></i>
<span>从云端获取备份</span>
</button>
<button
class="bme-config-secondary-btn"
id="bme-act-manage-server-backups"
type="button"
>
<i class="fa-solid fa-box-archive"></i>
<span>管理服务器备份</span>
</button>
<button
class="bme-config-secondary-btn"
id="bme-act-rollback-last-restore"
type="button"
disabled
>
<i class="fa-solid fa-rotate-left"></i>
<span>回滚上次恢复</span>
</button>
</div>
</div>
<div class="bme-config-grid bme-config-grid-2" style="margin-top: 20px;">
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">世界书过滤</div>
<div class="bme-config-card-subtitle">
控制 ST-BME 读取世界书条目时的过滤策略。默认模式自动过滤 MVU 相关条目;自定义模式仅按条目名称关键词过滤。
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-wi-filter-mode">过滤模式</label>
<select
id="bme-setting-wi-filter-mode"
class="bme-config-input"
>
<option value="default">默认(自动过滤 MVU 条目)</option>
<option value="custom">自定义(按名称关键词过滤)</option>
</select>
</div>
<div id="bme-wi-filter-custom-section" style="display: none">
<div class="bme-config-row">
<label for="bme-setting-wi-filter-keywords"
>过滤关键词</label
>
<input
id="bme-setting-wi-filter-keywords"
class="bme-config-input"
type="text"
placeholder="用逗号分隔BME,mvu,测试"
/>
</div>
<div class="bme-config-help">
条目名称中包含任一关键词即跳过(不区分大小写)。留空则不过滤任何条目(仅跳过已禁用的条目)。
</div>
</div>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">隐藏旧楼层</div>
<div class="bme-config-card-subtitle">
不删除聊天内容,只是把较早楼层临时标成系统消息,让主回复和 ST-BME 自己读取聊天时一起跳过它们。
</div>
</div>
</div>
<label
class="bme-toggle-item"
for="bme-setting-hide-old-messages-enabled"
>
<span class="bme-toggle-copy">
<span class="bme-toggle-title">启用旧楼层隐藏</span>
<span class="bme-toggle-desc">
适合长聊天控 token。切聊天会自动重新应用不会删除原楼层。
</span>
</span>
<input
id="bme-setting-hide-old-messages-enabled"
type="checkbox"
/>
</label>
<div class="bme-config-row">
<label for="bme-setting-hide-old-messages-keep-last-n">
保留最近 N 条消息
</label>
<input
id="bme-setting-hide-old-messages-keep-last-n"
class="bme-config-input"
type="number"
min="0"
max="200"
placeholder="0 = 不隐藏"
/>
</div>
<div class="bme-config-help">
设置修改后会自动生效。`0` 表示不隐藏;“取消全部隐藏”会立即把当前聊天里由 ST-BME 隐藏的楼层恢复。
</div>
<div class="bme-config-actions">
<button
class="bme-config-secondary-btn"
id="bme-apply-hide-settings"
type="button"
>
<i class="fa-solid fa-eye-slash"></i>
<span>重新应用当前隐藏</span>
</button>
<button
class="bme-config-secondary-btn"
id="bme-clear-hide-settings"
type="button"
>
<i class="fa-solid fa-eye"></i>
<span>取消全部隐藏</span>
</button>
</div>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">提示信息</div>
<div class="bme-config-card-subtitle">
控制提取、召回等顶部通知的显示样式。
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-notice-display-mode">显示模式</label>
<select
id="bme-setting-notice-display-mode"
class="bme-config-input"
>
<option value="normal">正常</option>
<option value="compact">精简(仅显示标题)</option>
</select>
</div>
<div class="bme-config-help">
精简模式会将工作中的提示压缩为标题卡片;错误和警告仍显示完整内容,避免关键信息被隐藏。
</div>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">调试日志</div>
<div class="bme-config-card-subtitle">
默认关闭,需要排查问题时再临时打开浏览器控制台日志。
</div>
</div>
</div>
<label
class="bme-toggle-item"
for="bme-setting-debug-logging-enabled"
>
<span class="bme-toggle-copy">
<span class="bme-toggle-title">启用调试日志</span>
<span class="bme-toggle-desc">
只在开启后输出内部诊断日志与流程跟踪,可能包含脱敏后的 prompt 组装摘要。
</span>
</span>
<input
id="bme-setting-debug-logging-enabled"
type="checkbox"
/>
</label>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">任务监视器</div>
<div class="bme-config-card-subtitle">
记录最近的提取、召回、压缩等任务流水;默认关闭,建议配合调试开关一起使用。
</div>
</div>
</div>
<label class="bme-toggle-item" for="bme-setting-ai-monitor-enabled">
<span class="bme-toggle-copy">
<span class="bme-toggle-title">启用任务监视器</span>
<span class="bme-toggle-desc">
开启后面板会显示最近任务的模型路由、清洗摘要和最终消息预览。
</span>
</span>
<input
id="bme-setting-ai-monitor-enabled"
type="checkbox"
/>
</label>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">美化用户输入</div>
<div class="bme-config-card-subtitle">
控制 Recall Card 是否接管本轮用户输入的展示方式,不影响实际召回与注入。
</div>
</div>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-card-user-input-display-mode">
显示模式
</label>
<select
id="bme-setting-recall-card-user-input-display-mode"
class="bme-config-input"
>
<option value="off">关闭美化,仅显示原始输入</option>
<option value="beautify_only">
由 Recall Card 接管显示,并隐藏原始输入
</option>
<option value="mirror">Recall Card 与原始输入同时显示</option>
</select>
</div>
<div class="bme-config-help">
只调整聊天楼层里的显示方式,不改变记忆召回、注入 prompt 或消息实际发送内容。
</div>
</div>
</div>
</section>
<section class="bme-config-section" data-config-section="advanced">
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">详细参数</div>
<h3 class="bme-config-section-title">细粒度行为与评分策略</h3>
<p class="bme-config-section-desc">
这里承接旧设置页里的高级项。若对应功能关闭,参数会置灰并提示先到“功能开关”启用。
</p>
</div>
<div class="bme-stripe-section">
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">提取</div>
<div class="bme-stripe-label-desc">
控制自动提取的频率和按轮计的上下文窗口。默认 2
轮,通常约等于向前补 4 层普通消息。
</div>
</div>
<div class="bme-stripe-content">
<div class="bme-config-card">
<div class="bme-config-row">
<label for="bme-setting-extract-every"
>每 N 条回复提取</label
>
<input
id="bme-setting-extract-every"
class="bme-config-input"
type="number"
min="1"
max="50"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-extract-context-turns"
>提取上下文轮数</label
>
<input
id="bme-setting-extract-context-turns"
class="bme-config-input"
type="number"
min="0"
max="20"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-extract-auto-delay-latest-assistant"
>
<input
id="bme-setting-extract-auto-delay-latest-assistant"
type="checkbox"
/>
<span>自动提取晚一楼</span>
</label>
<div class="bme-config-help">
开启后,最新 AI 楼先不自动提取,要等下一条 AI 楼出现后,才提取前一批内容。提取未处理和范围重提不受影响。
</div>
<details
class="bme-config-subdetails bme-collapsible-card"
id="bme-extract-advanced-settings"
>
<summary class="bme-collapsible-summary bme-config-subdetails-summary">
<div>
<div class="bme-config-subgroup-title">提取高级项</div>
<div class="bme-config-subgroup-desc">
控制提取 prompt 的表达方式,以及结构化 recentMessages 的裁剪。通常保持默认即可。
</div>
</div>
<span class="bme-collapsible-indicator" aria-hidden="true">
<i class="fa-solid fa-chevron-down"></i>
</span>
</summary>
<div class="bme-config-subgroup">
<div class="bme-config-row">
<label for="bme-setting-extract-recent-message-cap"
>结构化消息上限0 = 不限)</label
>
<input
id="bme-setting-extract-recent-message-cap"
class="bme-config-input"
type="number"
min="0"
max="200"
/>
</div>
<div class="bme-config-help">
只限制提取 prompt 里的 structured recentMessages 条数,不影响实际提取切片范围。
</div>
<div class="bme-config-row">
<label for="bme-setting-extract-prompt-structured-mode"
>提取输入格式</label
>
<select
id="bme-setting-extract-prompt-structured-mode"
class="bme-config-input"
>
<option value="both">混合transcript + structured</option>
<option value="transcript">仅 transcript</option>
<option value="structured">仅 structured</option>
</select>
</div>
<div class="bme-config-help">
控制 LLM 在提取时看到的是纯 transcript、结构化 recentMessages还是两者同时提供。通常保持“混合”即可。
</div>
</div>
</details>
<div class="bme-config-row">
<label for="bme-setting-extract-worldbook-mode"
>提取时世界书</label
>
<select
id="bme-setting-extract-worldbook-mode"
class="bme-config-input"
>
<option value="active">启用(解析激活条目)</option>
<option value="none">禁用</option>
</select>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-extract-include-summaries"
>
<input
id="bme-setting-extract-include-summaries"
type="checkbox"
/>
<span>提取时包含活跃总结</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-extract-include-story-time"
>
<input
id="bme-setting-extract-include-story-time"
type="checkbox"
/>
<span>提取时包含故事时间线</span>
</label>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">召回与注入</div>
<div class="bme-stripe-label-desc">
控制最终注入层级。当前注入走
IN_CHAT@Depth数值越大越靠前。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="recallEnabled"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-inject-depth"
>注入深度(数值越大越靠前)</label
>
<input
id="bme-setting-inject-depth"
class="bme-config-input"
type="number"
min="0"
max="9999"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-use-authoritative-generation-input"
>
<input
id="bme-setting-recall-use-authoritative-generation-input"
type="checkbox"
/>
<span>使用权威 generation 输入(实验性)</span>
</label>
<div class="bme-config-help">
开启后,召回查询将优先使用更接近真实发送入口的文本(如 send-intent、宿主快照、planner handoff而非回退到 chat tail 或 textarea。
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">向量预筛</div>
<div class="bme-stripe-label-desc">
控制是否启用向量候选检索,以及向量阶段输出的 Top-K
宽度。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card bme-stage-card"
data-guard-settings="recallEnabled"
data-stage-toggle-id="bme-setting-recall-vector-prefilter-enabled"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-vector-prefilter-enabled"
>
<input
id="bme-setting-recall-vector-prefilter-enabled"
type="checkbox"
/>
<span>启用向量预筛</span>
</label>
<div class="bme-config-row bme-stage-param">
<label for="bme-setting-recall-top-k">向量预筛 Top-K</label>
<input
id="bme-setting-recall-top-k"
class="bme-config-input"
type="number"
min="1"
max="100"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">图扩散</div>
<div class="bme-stripe-label-desc">
控制是否沿图结构继续扩散候选,以及扩散阶段保留的候选上限。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card bme-stage-card"
data-guard-settings="recallEnabled"
data-stage-toggle-id="bme-setting-recall-graph-diffusion-enabled"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-graph-diffusion-enabled"
>
<input
id="bme-setting-recall-graph-diffusion-enabled"
type="checkbox"
/>
<span>启用图扩散</span>
</label>
<div class="bme-config-row bme-stage-param">
<label for="bme-setting-recall-diffusion-top-k"
>图扩散 Top-K</label
>
<input
id="bme-setting-recall-diffusion-top-k"
class="bme-config-input"
type="number"
min="1"
max="300"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">召回增强</div>
<div class="bme-stripe-label-desc">
先调多意图、扩散回拉和时间链;更后面的候选整理与弱信号补抓收进折叠里。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="recallEnabled"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-multi-intent-enabled"
>
<input
id="bme-setting-recall-multi-intent-enabled"
type="checkbox"
/>
<span>启用多意图拆分</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-multi-intent-max-segments"
>最多拆分段数</label
>
<input
id="bme-setting-recall-multi-intent-max-segments"
class="bme-config-input"
type="number"
min="1"
max="8"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-teleport-alpha"
>扩散回拉强度</label
>
<input
id="bme-setting-recall-teleport-alpha"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-temporal-links-enabled"
>
<input
id="bme-setting-recall-temporal-links-enabled"
type="checkbox"
/>
<span>启用时间链合成边</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-temporal-link-strength"
>时间链强度</label
>
<input
id="bme-setting-recall-temporal-link-strength"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
<details
class="bme-config-subdetails bme-collapsible-card"
id="bme-recall-advanced-settings"
>
<summary class="bme-collapsible-summary bme-config-subdetails-summary">
<div>
<div class="bme-config-subgroup-title">更多高级项</div>
<div class="bme-config-subgroup-desc">
收纳上下文混合查询、文字补分,以及 DPP、共现补强和弱信号残差召回。
</div>
</div>
<span class="bme-collapsible-indicator" aria-hidden="true">
<i class="fa-solid fa-chevron-down"></i>
</span>
</summary>
<div class="bme-config-subgroup">
<div class="bme-config-subgroup-title">作用域记忆</div>
<div class="bme-config-subgroup-desc">
让召回优先理解“谁怎么记得这件事”和“当前地区的客观事实”,避免所有记忆都用上帝视角混在一起。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-scoped-memory-enabled"
>
<input
id="bme-setting-scoped-memory-enabled"
type="checkbox"
/>
<span>启用作用域记忆召回</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-pov-memory-enabled"
>
<input
id="bme-setting-pov-memory-enabled"
type="checkbox"
/>
<span>启用角色 / 用户 POV 记忆</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-region-scoped-objective-enabled"
>
<input
id="bme-setting-region-scoped-objective-enabled"
type="checkbox"
/>
<span>启用地区客观层加权</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-cognitive-memory-enabled"
>
<input
id="bme-setting-cognitive-memory-enabled"
type="checkbox"
/>
<span>启用多角色认知层</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-spatial-adjacency-enabled"
>
<input
id="bme-setting-spatial-adjacency-enabled"
type="checkbox"
/>
<span>启用地区邻接图</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-enable-story-timeline"
>
<input
id="bme-setting-enable-story-timeline"
type="checkbox"
/>
<span>启用剧情时间层</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-story-time-soft-directing"
>
<input
id="bme-setting-story-time-soft-directing"
type="checkbox"
/>
<span>启用剧情时间软导演</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-inject-story-time-label"
>
<input
id="bme-setting-inject-story-time-label"
type="checkbox"
/>
<span>注入时间标签</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-character-pov-weight"
>角色 POV 权重</label
>
<input
id="bme-setting-recall-character-pov-weight"
class="bme-config-input"
type="number"
min="0"
max="3"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-user-pov-weight"
>用户 POV 权重</label
>
<input
id="bme-setting-recall-user-pov-weight"
class="bme-config-input"
type="number"
min="0"
max="3"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-objective-current-region-weight"
>当前地区客观权重</label
>
<input
id="bme-setting-recall-objective-current-region-weight"
class="bme-config-input"
type="number"
min="0"
max="3"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-objective-adjacent-region-weight"
>邻近地区客观权重</label
>
<input
id="bme-setting-recall-objective-adjacent-region-weight"
class="bme-config-input"
type="number"
min="0"
max="3"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-objective-global-weight"
>全局客观权重</label
>
<input
id="bme-setting-recall-objective-global-weight"
class="bme-config-input"
type="number"
min="0"
max="3"
step="0.05"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-inject-user-pov-memory"
>
<input
id="bme-setting-inject-user-pov-memory"
type="checkbox"
/>
<span>注入用户 POV 记忆</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-inject-objective-global-memory"
>
<input
id="bme-setting-inject-objective-global-memory"
type="checkbox"
/>
<span>注入少量全局客观记忆</span>
</label>
<label
class="bme-inline-checkbox"
for="bme-setting-inject-low-confidence-objective-memory"
>
<input
id="bme-setting-inject-low-confidence-objective-memory"
type="checkbox"
/>
<span>允许低置信客观记忆直接注入</span>
</label>
</div>
<div class="bme-config-subgroup">
<div class="bme-config-subgroup-title">查询纠偏</div>
<div class="bme-config-subgroup-desc">
让召回在“那后来呢”“他为什么这么做”这类追问里,也能借最近上下文稳一点。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-context-query-blend-enabled"
>
<input
id="bme-setting-recall-context-query-blend-enabled"
type="checkbox"
/>
<span>启用上下文混合查询</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-context-assistant-weight"
>最近 assistant 权重</label
>
<input
id="bme-setting-recall-context-assistant-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-context-previous-user-weight"
>上一条 user 权重</label
>
<input
id="bme-setting-recall-context-previous-user-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-lexical-boost-enabled"
>
<input
id="bme-setting-recall-lexical-boost-enabled"
type="checkbox"
/>
<span>启用文字命中补分</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-lexical-weight"
>文字补分权重</label
>
<input
id="bme-setting-recall-lexical-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
</div>
<div class="bme-config-subgroup">
<div class="bme-config-subgroup-title">DPP 与共现补强</div>
<div class="bme-config-subgroup-desc">
用来减少重复候选,并在需要时轻推经常一起出现的相关节点。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-diversity-enabled"
>
<input
id="bme-setting-recall-diversity-enabled"
type="checkbox"
/>
<span>启用 DPP 多样性去重</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-dpp-candidate-multiplier"
>DPP 候选倍率</label
>
<input
id="bme-setting-recall-dpp-candidate-multiplier"
class="bme-config-input"
type="number"
min="1"
max="10"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-dpp-quality-weight"
>DPP 质量权重</label
>
<input
id="bme-setting-recall-dpp-quality-weight"
class="bme-config-input"
type="number"
min="0"
max="10"
step="0.1"
/>
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-cooccurrence-enabled"
>
<input
id="bme-setting-recall-cooccurrence-enabled"
type="checkbox"
/>
<span>启用共现补强</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-cooccurrence-scale"
>共现补强系数</label
>
<input
id="bme-setting-recall-cooccurrence-scale"
class="bme-config-input"
type="number"
min="0"
max="10"
step="0.01"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-cooccurrence-max-neighbors"
>每个锚点最多补强邻居</label
>
<input
id="bme-setting-recall-cooccurrence-max-neighbors"
class="bme-config-input"
type="number"
min="1"
max="50"
/>
</div>
</div>
<div class="bme-config-subgroup">
<div class="bme-config-subgroup-title">弱信号召回</div>
<div class="bme-config-subgroup-desc">
仅在直连 embedding 且本地有足够向量时使用,用于补抓被主主题压住的弱线索。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-residual-enabled"
>
<input
id="bme-setting-recall-residual-enabled"
type="checkbox"
/>
<span>启用弱信号残差召回</span>
</label>
<div class="bme-config-row">
<label for="bme-setting-recall-residual-basis-max-nodes"
>语义基底节点上限</label
>
<input
id="bme-setting-recall-residual-basis-max-nodes"
class="bme-config-input"
type="number"
min="2"
max="64"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-nmf-topics"
>NMF 主题数</label
>
<input
id="bme-setting-recall-nmf-topics"
class="bme-config-input"
type="number"
min="2"
max="64"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-nmf-novelty-threshold"
>新颖度阈值</label
>
<input
id="bme-setting-recall-nmf-novelty-threshold"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.01"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-residual-threshold"
>残差阈值</label
>
<input
id="bme-setting-recall-residual-threshold"
class="bme-config-input"
type="number"
min="0"
max="10"
step="0.01"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-recall-residual-top-k"
>残差二次检索 Top-K</label
>
<input
id="bme-setting-recall-residual-top-k"
class="bme-config-input"
type="number"
min="1"
max="20"
/>
</div>
</div>
</details>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">混合评分</div>
<div class="bme-stripe-label-desc">
评分层始终运行;下面 3
个权重共同决定图扩散、向量相似和重要度在召回中的占比。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="recallEnabled"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-graph-weight">图扩散权重</label>
<input
id="bme-setting-graph-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-vector-weight">向量权重</label>
<input
id="bme-setting-vector-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-importance-weight"
>重要度权重</label
>
<input
id="bme-setting-importance-weight"
class="bme-config-input"
type="number"
min="0"
max="1"
step="0.05"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">LLM 精确召回</div>
<div class="bme-stripe-label-desc">
控制是否启用 LLM 精排,以及传给 LLM
的上下文消息数、候选池大小与最终保留上限。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card bme-stage-card"
data-guard-settings="recallEnabled"
data-stage-toggle-id="bme-setting-recall-llm"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<label
class="bme-inline-checkbox"
for="bme-setting-recall-llm"
>
<input id="bme-setting-recall-llm" type="checkbox" />
<span>启用 LLM 精排</span>
</label>
<div class="bme-config-row bme-stage-param">
<label for="bme-setting-recall-llm-context-messages"
>LLM 精排上下文消息数</label
>
<input
id="bme-setting-recall-llm-context-messages"
class="bme-config-input"
type="number"
min="0"
max="20"
/>
</div>
<div class="bme-config-row bme-stage-param">
<label for="bme-setting-recall-llm-candidate-pool"
>LLM 精排候选池</label
>
<input
id="bme-setting-recall-llm-candidate-pool"
class="bme-config-input"
type="number"
min="1"
max="100"
/>
</div>
<div class="bme-config-row bme-stage-param">
<label for="bme-setting-recall-max-nodes"
>LLM 最终选择上限</label
>
<input
id="bme-setting-recall-max-nodes"
class="bme-config-input"
type="number"
min="1"
max="50"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">记忆整合</div>
<div class="bme-stripe-label-desc">
控制近邻搜索规模和冲突判定阈值。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableConsolidation"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-consolidation-neighbor-count"
>近邻数量</label
>
<input
id="bme-setting-consolidation-neighbor-count"
class="bme-config-input"
type="number"
min="1"
max="20"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-consolidation-threshold"
>冲突判定阈值</label
>
<input
id="bme-setting-consolidation-threshold"
class="bme-config-input"
type="number"
min="0.5"
max="0.99"
step="0.01"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">层级总结</div>
<div class="bme-stripe-label-desc">
控制小总结触发周期;大总结会按 3 条同层小总结自动折叠。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableHierarchicalSummary"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-synopsis-every"
>每 N 次提取生成小总结</label
>
<input
id="bme-setting-synopsis-every"
class="bme-config-input"
type="number"
min="1"
max="100"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">惊奇触发</div>
<div class="bme-stripe-label-desc">
高信息量触发规则和阈值。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableSmartTrigger"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-trigger-patterns"
>自定义触发模式</label
>
<input
id="bme-setting-trigger-patterns"
class="bme-config-input"
type="text"
placeholder="突然,真相,秘密,背叛 或正则"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-smart-trigger-threshold"
>触发阈值</label
>
<input
id="bme-setting-smart-trigger-threshold"
class="bme-config-input"
type="number"
min="1"
max="10"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">睡眠遗忘</div>
<div class="bme-stripe-label-desc">
配置遗忘阈值和执行周期。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableSleepCycle"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-forget-threshold">遗忘阈值</label>
<input
id="bme-setting-forget-threshold"
class="bme-config-input"
type="number"
min="0.1"
max="1"
step="0.05"
/>
</div>
<div class="bme-config-row">
<label for="bme-setting-sleep-every">每 N 次提取执行</label>
<input
id="bme-setting-sleep-every"
class="bme-config-input"
type="number"
min="1"
max="200"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">自动整合触发</div>
<div class="bme-stripe-label-desc">
本批新增节点不足时,仍会检查是否与旧记忆高度重复;命中后照样自动整合。
</div>
</div>
<div class="bme-stripe-content">
<div class="bme-config-card">
<div class="bme-config-row">
<label for="bme-setting-consolidation-auto-min-new-nodes"
>最少新增节点数</label
>
<input
id="bme-setting-consolidation-auto-min-new-nodes"
class="bme-config-input"
type="number"
min="1"
max="50"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">自动压缩周期</div>
<div class="bme-stripe-label-desc">
按提取次数计数;只有到周期点时才会尝试自动压缩。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableAutoCompression"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-compression-every"
>每 N 次提取尝试一次</label
>
<input
id="bme-setting-compression-every"
class="bme-config-input"
type="number"
min="1"
max="500"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">概率召回</div>
<div class="bme-stripe-label-desc">
调整弱相关记忆被纳入召回的概率。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableProbRecall"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-prob-recall-chance">触发概率</label>
<input
id="bme-setting-prob-recall-chance"
class="bme-config-input"
type="number"
min="0.01"
max="0.5"
step="0.01"
/>
</div>
</div>
</div>
</div>
<div class="bme-stripe-row">
<div class="bme-stripe-label">
<div class="bme-stripe-label-title">反思</div>
<div class="bme-stripe-label-desc">
控制叙事反思节点的生成间隔。
</div>
</div>
<div class="bme-stripe-content">
<div
class="bme-config-card bme-guarded-card"
data-guard-settings="enableReflection"
>
<div class="bme-config-guard-note">
在“功能开关”中启用后生效。
</div>
<div class="bme-config-row">
<label for="bme-setting-reflect-every"
>每 N 次提取生成</label
>
<input
id="bme-setting-reflect-every"
class="bme-config-input"
type="number"
min="1"
max="200"
/>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="bme-config-section" data-config-section="prompts">
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">任务预设</div>
<h3 class="bme-config-section-title">任务预设工作区</h3>
<p class="bme-config-section-desc">
在这里为每个任务维护独立预设,统一配置 prompt 编排、生成参数和正则规则。
</p>
</div>
<div id="bme-task-profile-workspace" class="bme-task-profile-workspace"></div>
<input
id="bme-task-profile-import"
type="file"
accept=".json,application/json"
hidden
/>
<input
id="bme-task-profile-import-all"
type="file"
accept=".json,application/json"
hidden
/>
</section>
<section
class="bme-config-section"
data-config-section="appearance"
>
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">面板外观</div>
<h3 class="bme-config-section-title">主题与视觉同步</h3>
<p class="bme-config-section-desc">
这里的主题选择会和顶部调色盘快捷入口保持同步,并立即刷新图谱配色。
</p>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">面板主题</div>
<div class="bme-config-card-subtitle">
选择最适合当前故事氛围和阅读习惯的面板风格。
</div>
</div>
</div>
<div class="bme-theme-card-grid">
<button
class="bme-theme-card"
data-theme="crimson"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #e94560"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">赤红合成</span>
<span class="bme-theme-card-desc"
>高对比、强调变化和警示感。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
<button
class="bme-theme-card"
data-theme="cyan"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #00e5ff"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">霓虹青蓝</span>
<span class="bme-theme-card-desc"
>更冷静的检视感,适合长时间排查。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
<button
class="bme-theme-card"
data-theme="amber"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #ffb300"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">琥珀终端</span>
<span class="bme-theme-card-desc"
>更像复古终端,阅读层次稳定。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
<button
class="bme-theme-card"
data-theme="violet"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #b388ff"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">紫雾迷离</span>
<span class="bme-theme-card-desc"
>更柔和的夜间质感,适合沉浸式浏览。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
<button
class="bme-theme-card"
data-theme="paperDawn"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #0d9488"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">晨光纸感</span>
<span class="bme-theme-card-desc"
>亮色暖纸面,青绿主色与琥珀强调,白天阅读友好。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
<button
class="bme-theme-card"
data-theme="glacierSky"
type="button"
>
<span
class="bme-theme-card-swatch"
style="background: #2563eb"
></span>
<span class="bme-theme-card-copy">
<span class="bme-theme-card-title">冰川晴空</span>
<span class="bme-theme-card-desc"
>亮色冷灰底与饱和蓝,适合与系统浅色界面同屏。</span
>
</span>
<span class="bme-theme-card-check"
><i class="fa-solid fa-check"></i
></span>
</button>
</div>
</div>
</section>
<section
class="bme-config-section"
data-config-section="cleanup"
>
<div class="bme-config-section-head">
<div class="bme-config-section-kicker">数据清理</div>
<h3 class="bme-config-section-title">图谱、缓存与存储清理</h3>
<p class="bme-config-section-desc">
在这里执行高危清理操作。所有操作均需二次确认,部分操作不可撤销。
</p>
</div>
<!-- 图谱清理 -->
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">图谱清理</div>
<div class="bme-config-card-subtitle">
清空整个图谱或删除指定楼层范围内的记忆节点。操作不可撤销。
</div>
</div>
</div>
<div class="bme-action-grid">
<button
class="bme-action-btn danger"
id="bme-act-clear-graph"
type="button"
>
<i class="fa-solid fa-trash-can"></i>
<span>清空当前图谱</span>
</button>
<button
class="bme-action-btn danger"
id="bme-act-clear-graph-range"
type="button"
>
<i class="fa-solid fa-scissors"></i>
<span>按楼层范围清理</span>
</button>
</div>
<div class="bme-action-group-extra">
<div class="bme-config-help">
按楼层范围清理:删除指定楼层范围内的所有节点和相关边。留空则不执行。
</div>
<div class="bme-action-range-row">
<div class="bme-config-row">
<label for="bme-cleanup-range-start">起始楼层</label>
<input
id="bme-cleanup-range-start"
class="bme-config-input"
type="number"
min="0"
max="999999"
/>
</div>
<div class="bme-config-row">
<label for="bme-cleanup-range-end">结束楼层</label>
<input
id="bme-cleanup-range-end"
class="bme-config-input"
type="number"
min="0"
max="999999"
/>
</div>
</div>
</div>
</div>
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">总结状态清理</div>
<div class="bme-config-card-subtitle">
清空当前聊天的层级总结状态,不影响图谱节点与聊天原文。
</div>
</div>
</div>
<div class="bme-action-grid">
<button
class="bme-action-btn danger"
id="bme-act-summary-clear"
type="button"
>
<i class="fa-solid fa-eraser"></i>
<span>清空当前聊天总结状态</span>
</button>
</div>
</div>
<!-- 缓存清理 -->
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">缓存清理</div>
<div class="bme-config-card-subtitle">
清空运行时向量缓存或提取历史。不影响已持久化的图谱节点。
</div>
</div>
</div>
<div class="bme-action-grid">
<button
class="bme-action-btn"
id="bme-act-clear-vector-cache"
type="button"
>
<i class="fa-solid fa-database"></i>
<span>清空向量缓存</span>
</button>
<button
class="bme-action-btn"
id="bme-act-clear-batch-journal"
type="button"
>
<i class="fa-solid fa-clock-rotate-left"></i>
<span>清空提取历史</span>
</button>
</div>
</div>
<!-- 数据存储清理 -->
<div class="bme-config-card">
<div class="bme-config-card-head">
<div>
<div class="bme-config-card-title">数据存储清理</div>
<div class="bme-config-card-subtitle">
删除本地 OPFS / IndexedDB 图谱存储,或清理服务端同步数据。
</div>
</div>
</div>
<div class="bme-action-grid">
<button
class="bme-action-btn danger"
id="bme-act-delete-current-idb"
type="button"
>
<i class="fa-solid fa-hard-drive"></i>
<span>清空当前聊天本地存储</span>
</button>
<button
class="bme-action-btn danger"
id="bme-act-delete-all-idb"
type="button"
>
<i class="fa-solid fa-explosion"></i>
<span>清空全部 BME 本地存储</span>
</button>
<button
class="bme-action-btn danger"
id="bme-act-delete-server-sync"
type="button"
>
<i class="fa-solid fa-cloud-arrow-down"></i>
<span>清空服务端同步数据</span>
</button>
</div>
<div class="bme-config-help bme-cleanup-warning-text">
<i class="fa-solid fa-triangle-exclamation"></i>
「清空全部 BME 本地存储」和「清空服务端同步数据」需要输入 DELETE 确认。
</div>
</div>
</section>
</div>
</div>
<div class="bme-task-workspace" id="bme-task-workspace">
<div class="bme-task-workspace-header">
<div>
<div class="bme-task-workspace-kicker" id="bme-task-ws-kicker">任务监控</div>
<h2 class="bme-task-workspace-title" id="bme-task-ws-title">ST-BME 任务流工作区</h2>
<p class="bme-task-workspace-desc" id="bme-task-ws-desc">
实时查看所有任务管线的运行状态与当前批次进度。
</p>
</div>
</div>
<div class="bme-task-nav-mobile" id="bme-task-nav-mobile">
<button class="bme-task-nav-pill active" data-task-section="pipeline" type="button">管线</button>
<button class="bme-task-nav-pill" data-task-section="timeline" type="button">流水</button>
<button class="bme-task-nav-pill" data-task-section="memory" type="button">记忆</button>
<button class="bme-task-nav-pill" data-task-section="injection" type="button">注入</button>
<button class="bme-task-nav-pill" data-task-section="trace" type="button">追踪</button>
<button class="bme-task-nav-pill" data-task-section="persistence" type="button">持久化</button>
</div>
<div class="bme-task-workspace-body">
<div class="bme-task-section active" data-task-section="pipeline" id="bme-task-pipeline"></div>
<div class="bme-task-section" data-task-section="timeline" id="bme-task-timeline"></div>
<div class="bme-task-section" data-task-section="memory" id="bme-task-memory"></div>
<div class="bme-task-section" data-task-section="injection" id="bme-task-injection"></div>
<div class="bme-task-section" data-task-section="trace" id="bme-task-trace"></div>
<div class="bme-task-section" data-task-section="persistence" id="bme-task-persistence"></div>
</div>
<div class="bme-memory-popup-scrim" id="bme-memory-popup-scrim" hidden></div>
<div class="bme-memory-popup" id="bme-memory-popup">
<div class="bme-memory-popup__header">
<h3 class="bme-memory-popup__title" id="bme-memory-popup-title">节点详情</h3>
<div class="bme-memory-popup__actions">
<button class="bme-detail-action-btn" id="bme-memory-popup-save" type="button" title="保存修改">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="bme-detail-action-btn bme-detail-action-danger" id="bme-memory-popup-delete" type="button" title="删除节点">
<i class="fa-solid fa-trash"></i>
</button>
<button class="bme-panel-close" id="bme-memory-popup-close" type="button" title="关闭">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
</div>
<div class="bme-memory-popup__badges" id="bme-memory-popup-badges"></div>
<div class="bme-memory-popup__body" id="bme-memory-popup-body"></div>
</div>
</div>
</div>
<div
class="bme-mobile-content"
id="bme-mobile-content"
style="display: none"
></div>
</div>
<div class="bme-panel-tabbar">
<button class="bme-tab-btn" data-tab="graph" type="button">
<i class="fa-solid fa-diagram-project"></i>
<span>图谱</span>
</button>
<button class="bme-tab-btn active" data-tab="dashboard" type="button">
<i class="fa-solid fa-chart-simple"></i>
<span>总览</span>
</button>
<button class="bme-tab-btn" data-tab="task" type="button">
<i class="fa-solid fa-list-check"></i>
<span>任务</span>
</button>
<button class="bme-tab-btn" data-tab="actions" type="button">
<i class="fa-solid fa-gear"></i>
<span>操作</span>
</button>
<button class="bme-tab-btn" data-tab="config" type="button">
<i class="fa-solid fa-sliders"></i>
<span>配置</span>
</button>
</div>
</div>
<div class="bme-fullscreen-graph-overlay" id="bme-fullscreen-graph" hidden>
<div class="bme-fullscreen-graph-toolbar">
<div class="bme-graph-toolbar-title">
<i class="fa-solid fa-diagram-project"></i>
<span>实时图谱(全屏)</span>
</div>
<div class="bme-fullscreen-graph-controls">
<button id="bme-fs-zoom-in" title="放大" type="button">
<i class="fa-solid fa-plus"></i>
</button>
<button id="bme-fs-zoom-out" title="缩小" type="button">
<i class="fa-solid fa-minus"></i>
</button>
<button id="bme-fs-close" title="关闭" type="button">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
</div>
<canvas id="bme-fullscreen-graph-canvas"></canvas>
</div>
</div>