Merge branch 'main' into main

This commit is contained in:
Hao19911125
2026-04-10 19:06:23 +08:00
committed by GitHub
5 changed files with 50 additions and 47 deletions

View File

@@ -12888,6 +12888,7 @@ async function onRebuildSummaryState(options = {}) {
async function onClearSummaryState() {
return await onClearSummaryStateController({
confirm: (msg) => (typeof globalThis.confirm === "function" ? globalThis.confirm(msg) : false),
ensureGraphMutationReady,
getCurrentGraph: () => currentGraph,
refreshPanelLiveState,

View File

@@ -6,6 +6,6 @@
"js": "index.js",
"css": "style.css",
"author": "Youzini",
"version": "4.3.7",
"version": "4.3.9",
"homePage": "https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology"
}

View File

@@ -343,10 +343,6 @@
<i class="fa-solid fa-sitemap"></i>
<span>重建总结状态</span>
</button>
<button class="bme-action-btn" id="bme-act-summary-clear" type="button">
<i class="fa-solid fa-eraser"></i>
<span>清空总结状态</span>
</button>
<button class="bme-action-btn" id="bme-act-evolve" type="button">
<i class="fa-solid fa-dna"></i>
<span>强制进化</span>
@@ -364,14 +360,14 @@
<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-mode">提取模式</label>
<select id="bme-extract-mode" class="bme-config-select">
<option value="pending">提取未处理</option>
<option value="rerun">重新提取范围</option>
</select>
</div>
<div class="bme-config-row">
<label for="bme-extract-start-floor">起始楼层</label>
<input
@@ -399,31 +395,7 @@
重新提取范围:起始/终止都留空 = 当前重提;只填起始 = 从起始到最新。
</div>
<div class="bme-config-help" style="margin-top:12px">
重建总结状态:默认按当前总结相关范围重建;填写楼层后按范围重建。
</div>
<div class="bme-action-range-row">
<div class="bme-config-row">
<label for="bme-summary-rebuild-start-floor">总结起始楼层</label>
<input
id="bme-summary-rebuild-start-floor"
class="bme-config-input"
type="number"
min="0"
max="999999"
placeholder="留空 = 当前重建"
/>
</div>
<div class="bme-config-row">
<label for="bme-summary-rebuild-end-floor">总结终止楼层</label>
<input
id="bme-summary-rebuild-end-floor"
class="bme-config-input"
type="number"
min="0"
max="999999"
placeholder="留空 = 到最新"
/>
</div>
重建总结状态:和上面的起始/终止楼层共用同一组范围;留空时按当前总结相关范围重建。
</div>
</div>
</div>
@@ -2698,6 +2670,27 @@
</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">

View File

@@ -104,7 +104,6 @@ const GRAPH_WRITE_ACTION_IDS = [
"bme-act-synopsis",
"bme-act-summary-rollup",
"bme-act-summary-rebuild",
"bme-act-summary-clear",
"bme-act-evolve",
"bme-act-undo-maintenance",
"bme-act-import",
@@ -1814,7 +1813,6 @@ function _refreshSummaryWorkspace() {
<button class="bme-config-secondary-btn" id="bme-summary-generate" type="button">立即生成小总结</button>
<button class="bme-config-secondary-btn" id="bme-summary-rollup" type="button">立即执行折叠</button>
<button class="bme-config-secondary-btn" id="bme-summary-rebuild" type="button">重建总结状态</button>
<button class="bme-config-secondary-btn bme-task-btn-danger" id="bme-summary-clear" type="button">清空总结状态</button>
</div>
</div>
@@ -3743,7 +3741,6 @@ function _bindActions() {
"bme-act-sleep": "sleep",
"bme-act-synopsis": "synopsis",
"bme-act-summary-rollup": "summaryRollup",
"bme-act-summary-clear": "clearSummaryState",
"bme-act-export": "export",
"bme-act-import": "import",
"bme-act-rebuild": "rebuild",
@@ -3769,7 +3766,6 @@ function _bindActions() {
synopsis: "生成小总结",
summaryRollup: "执行总结折叠",
rebuildSummaryState: "重建总结状态",
clearSummaryState: "清空总结状态",
export: "导出图谱",
import: "导入图谱",
rebuild: "重建图谱",
@@ -3959,10 +3955,10 @@ function _bindActions() {
const btn = document.getElementById("bme-act-summary-rebuild");
if (btn?.disabled) return;
const startFloor = _parseOptionalInt(
document.getElementById("bme-summary-rebuild-start-floor")?.value,
document.getElementById("bme-extract-start-floor")?.value,
);
const endFloor = _parseOptionalInt(
document.getElementById("bme-summary-rebuild-end-floor")?.value,
document.getElementById("bme-extract-end-floor")?.value,
);
const desc = Number.isFinite(startFloor) || Number.isFinite(endFloor)
? `按范围 ${Number.isFinite(startFloor) ? startFloor : "当前"} ~ ${Number.isFinite(endFloor) ? endFloor : "最新"} 重建总结状态`
@@ -4149,12 +4145,10 @@ function _bindActions() {
const generateBtn = e.target.closest("#bme-summary-generate");
const rollupBtn = e.target.closest("#bme-summary-rollup");
const rebuildBtn = e.target.closest("#bme-summary-rebuild");
const clearBtn = e.target.closest("#bme-summary-clear");
const actionMap = new Map([
[generateBtn, "synopsis"],
[rollupBtn, "summaryRollup"],
[rebuildBtn, "rebuildSummaryState"],
[clearBtn, "clearSummaryState"],
]);
const matched = [...actionMap.entries()].find(([element]) => Boolean(element));
if (!matched) return;

View File

@@ -844,11 +844,26 @@ export async function onClearSummaryStateController(runtime) {
const graph = runtime.getCurrentGraph();
if (!graph) return;
if (!runtime.ensureGraphMutationReady("清空总结状态")) return;
if (
typeof runtime.confirm === "function" &&
!runtime.confirm(
"确定要清空当前聊天的总结状态?\n\n这会删除当前聊天的所有层级总结前沿与折叠历史但不会删除图谱节点或聊天原文。",
)
) {
return {
cancelled: true,
};
}
runtime.resetHierarchicalSummaryState?.(graph);
runtime.saveGraphToChat?.({ reason: "clear-summary-state" });
runtime.refreshPanelLiveState?.();
updateManualActionUiState(runtime, "总结状态已清空", "当前聊天的层级总结已重置", "success");
runtime.toastr.success("总结状态已清空");
updateManualActionUiState(
runtime,
"总结状态已清空",
"当前聊天的层级总结已重置",
"success",
);
runtime.toastr.success("当前聊天总结状态已清空");
return {
handledToast: true,
requestDispatched: false,