重新提取:按总楼层计数(用户+AI,首条 greeting 为 0)。真正 system 不计入,且不受隐藏助手影响。
+
diff --git a/ui/panel.js b/ui/panel.js
index 3ea8a48..18e34ac 100644
--- a/ui/panel.js
+++ b/ui/panel.js
@@ -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() {
-
@@ -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;
diff --git a/ui/ui-actions-controller.js b/ui/ui-actions-controller.js
index 0418eca..c1e29e7 100644
--- a/ui/ui-actions-controller.js
+++ b/ui/ui-actions-controller.js
@@ -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,