From 70e488df534c8b5d1e9f8d196ccdc19f25b67e09 Mon Sep 17 00:00:00 2001
From: Hao19911125 <99091644+Hao19911125@users.noreply.github.com>
Date: Tue, 14 Apr 2026 12:14:34 +0800
Subject: [PATCH] Make task memory browser search manual
---
style.css | 4 ++
ui/panel.js | 132 +++++++++++++++++++++++++++++++++++++++++-----------
2 files changed, 110 insertions(+), 26 deletions(-)
diff --git a/style.css b/style.css
index e076a6b..8ae9e8f 100644
--- a/style.css
+++ b/style.css
@@ -1295,6 +1295,10 @@
flex: 0 0 auto;
}
+.bme-memory-list-filters .bme-task-memory-search-btn {
+ width: 100%;
+}
+
.bme-memory-list-filters .bme-floor-input {
max-width: 120px;
flex: 0 0 auto;
diff --git a/ui/panel.js b/ui/panel.js
index dac4947..92b0328 100644
--- a/ui/panel.js
+++ b/ui/panel.js
@@ -323,6 +323,8 @@ let currentTabId = "dashboard";
let currentConfigSectionId = "toggles";
let currentTaskSectionId = "pipeline";
let currentSelectedMemoryNodeId = "";
+let taskMemorySearchDraft = _createTaskMemorySearchState();
+let taskMemorySearchApplied = _createTaskMemorySearchState();
let currentTaskProfileTaskType = "extract";
let currentTaskProfileTabId = "generation";
let currentTaskProfileBlockId = "";
@@ -1733,6 +1735,88 @@ function _matchesFloorFilter(node, ranges) {
return false;
}
+function _createTaskMemorySearchState(overrides = {}) {
+ return {
+ query: String(overrides.query || ""),
+ floorQuery: String(overrides.floorQuery || ""),
+ filter: String(overrides.filter || "all") || "all",
+ };
+}
+
+function _readTaskMemoryDraftFromControls() {
+ taskMemorySearchDraft = _createTaskMemorySearchState({
+ query: document.getElementById("bme-task-memory-search")?.value,
+ floorQuery: document.getElementById("bme-task-memory-floor")?.value,
+ filter: document.getElementById("bme-task-memory-filter")?.value,
+ });
+ return _createTaskMemorySearchState(taskMemorySearchDraft);
+}
+
+function _applyTaskMemorySearchDraft() {
+ taskMemorySearchApplied = _readTaskMemoryDraftFromControls();
+ _refreshTaskMemoryBrowser();
+}
+
+function _ensureTaskMemoryBrowserShell(el) {
+ if (!el) return null;
+
+ let listEl = document.getElementById("bme-task-memory-list");
+ let detailEl = document.getElementById("bme-task-memory-detail");
+ if (!listEl || !detailEl) {
+ const draft = _createTaskMemorySearchState(taskMemorySearchDraft);
+ el.innerHTML = `
+
+ `;
+ listEl = document.getElementById("bme-task-memory-list");
+ detailEl = document.getElementById("bme-task-memory-detail");
+ }
+
+ const searchInput = document.getElementById("bme-task-memory-search");
+ const floorInput = document.getElementById("bme-task-memory-floor");
+ const filterSelect = document.getElementById("bme-task-memory-filter");
+ const applyButton = document.getElementById("bme-task-memory-apply");
+ if (searchInput && !searchInput._bmeBound) {
+ const syncDraft = () => {
+ _readTaskMemoryDraftFromControls();
+ };
+ searchInput.addEventListener("input", syncDraft);
+ floorInput?.addEventListener("input", syncDraft);
+ filterSelect?.addEventListener("change", syncDraft);
+ applyButton?.addEventListener("click", () => _applyTaskMemorySearchDraft());
+ searchInput._bmeBound = true;
+ }
+
+ return { listEl, detailEl };
+}
+
function _refreshTaskMemoryBrowser() {
const el = document.getElementById("bme-task-memory");
if (!el) return;
@@ -1744,11 +1828,14 @@ function _refreshTaskMemoryBrowser() {
return;
}
- const currentQuery = String(document.getElementById("bme-task-memory-search")?.value || "")
- .trim()
- .toLowerCase();
- const currentFilter = document.getElementById("bme-task-memory-filter")?.value || "all";
- const currentFloorQuery = String(document.getElementById("bme-task-memory-floor")?.value || "").trim();
+ const shell = _ensureTaskMemoryBrowserShell(el);
+ const listEl = shell?.listEl;
+ if (!listEl) return;
+
+ const currentQuery = String(taskMemorySearchApplied.query || "");
+ const normalizedQuery = currentQuery.trim().toLowerCase();
+ const currentFilter = taskMemorySearchApplied.filter || "all";
+ const currentFloorQuery = String(taskMemorySearchApplied.floorQuery || "").trim();
let nodes = Array.isArray(graph.nodes)
? graph.nodes.filter((node) => !node?.archived)
@@ -1758,15 +1845,15 @@ function _refreshTaskMemoryBrowser() {
nodes = nodes.filter((node) => _matchesMemoryFilter(node, currentFilter));
}
- if (currentQuery) {
+ if (normalizedQuery) {
nodes = nodes.filter((node) => {
const name = getNodeDisplayName(node).toLowerCase();
const snippet = _getNodeSnippet(node).toLowerCase();
const fieldsText = JSON.stringify(node?.fields || {}).toLowerCase();
return (
- name.includes(currentQuery) ||
- snippet.includes(currentQuery) ||
- fieldsText.includes(currentQuery)
+ name.includes(normalizedQuery) ||
+ snippet.includes(normalizedQuery) ||
+ fieldsText.includes(normalizedQuery)
);
});
}
@@ -1810,6 +1897,14 @@ function _refreshTaskMemoryBrowser() {
`;
}).join("");
+ listEl.innerHTML =
+ listItems ||
+ '鏃犺妭鐐?/div>';
+
+ _renderTaskMemoryDetailSelection(graph);
+ _bindTaskMemoryListClick();
+ return;
+
el.innerHTML = `
@@ -1838,27 +1933,11 @@ function _refreshTaskMemoryBrowser() {
_renderTaskMemoryDetailSelection(graph);
_bindTaskMemoryListClick();
-
- const searchInput = document.getElementById("bme-task-memory-search");
- const floorInput = document.getElementById("bme-task-memory-floor");
- const filterSelect = document.getElementById("bme-task-memory-filter");
- if (searchInput) {
- let timer = null;
- searchInput.addEventListener("input", () => {
- clearTimeout(timer);
- timer = setTimeout(() => _refreshTaskMemoryBrowser(), 180);
- });
- floorInput?.addEventListener("input", () => {
- clearTimeout(timer);
- timer = setTimeout(() => _refreshTaskMemoryBrowser(), 180);
- });
- }
- filterSelect?.addEventListener("change", () => _refreshTaskMemoryBrowser());
}
function _bindTaskMemoryListClick() {
const list = document.getElementById("bme-task-memory-list");
- if (!list) return;
+ if (!list || list._bmeBound) return;
list.addEventListener("click", (e) => {
const item = e.target.closest(".bme-memory-node-item");
if (!item) return;
@@ -1872,6 +1951,7 @@ function _bindTaskMemoryListClick() {
_renderTaskMemoryDetailSelection(graph);
}
});
+ list._bmeBound = true;
}
function _renderTaskMemoryDetailSelection(graph = _getGraph?.()) {