mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-26 04:15:48 -06:00
fix(sessions): search visible categories across clients (#118912)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
@@ -366,7 +366,7 @@ fun filterSessionEntries(
|
||||
val query = search.trim().lowercase()
|
||||
if (query.isEmpty()) return sessions
|
||||
return sessions.filter { session ->
|
||||
listOfNotNull(session.displayName, session.label, session.key)
|
||||
listOfNotNull(session.displayName, session.label, session.category, session.key)
|
||||
.any { it.lowercase().contains(query) }
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -49,17 +49,18 @@ class ChatControllerSessionSearchTest {
|
||||
?.content
|
||||
|
||||
@Test
|
||||
fun filterSessionEntriesMatchesDisplayNameLabelAndKey() {
|
||||
fun filterSessionEntriesMatchesDisplayNameLabelCategoryAndKey() {
|
||||
val sessions =
|
||||
listOf(
|
||||
ChatSessionEntry(key = "agent:main:topic-a", updatedAtMs = 2, displayName = "Trip planning"),
|
||||
ChatSessionEntry(key = "agent:main:topic-b", updatedAtMs = 1, displayName = "Groceries"),
|
||||
ChatSessionEntry(key = "agent:main:topic-b", updatedAtMs = 1, displayName = "Groceries", category = "Team Planning"),
|
||||
ChatSessionEntry(key = "agent:main:trip-notes", updatedAtMs = 3, displayName = "Notes"),
|
||||
)
|
||||
assertEquals(
|
||||
listOf("agent:main:topic-a", "agent:main:trip-notes"),
|
||||
filterSessionEntries(sessions, "TRIP").map { it.key },
|
||||
)
|
||||
assertEquals(listOf("agent:main:topic-b"), filterSessionEntries(sessions, "TEAM PLANNING").map { it.key })
|
||||
assertEquals(sessions, filterSessionEntries(sessions, " "))
|
||||
}
|
||||
|
||||
|
||||
@@ -587,12 +587,8 @@ public enum OpenClawChatSessionListOrganizer {
|
||||
let query = search.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
|
||||
guard !query.isEmpty else { return sessions }
|
||||
return sessions.filter { session in
|
||||
for field in [session.displayName, session.label, session.subject, session.sessionId, session.key] {
|
||||
if let field, field.lowercased().contains(query) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
[session.displayName, session.label, session.subject, session.sessionId, session.category, session.key]
|
||||
.contains { $0?.lowercased().contains(query) == true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ struct ChatSessionSidebarModelTests {
|
||||
#expect(sections.flatMap(\.nodes).map(\.session.key) == ["agent:main:research"])
|
||||
}
|
||||
|
||||
@Test(arguments: ["holiday", "KYOTO", "session-123", " HoLiDaY "])
|
||||
@Test(arguments: ["holiday", "KYOTO", "session-123", "team planning", " HoLiDaY "])
|
||||
func `sidebar search matches every canonical gateway session field`(_ query: String) {
|
||||
let matching = self.entry(
|
||||
key: "agent:main:roadmap",
|
||||
@@ -315,7 +315,8 @@ struct ChatSessionSidebarModelTests {
|
||||
label: "Summer holiday",
|
||||
subject: "Kyoto itinerary",
|
||||
sessionId: "session-123",
|
||||
updatedAt: 200)
|
||||
updatedAt: 200,
|
||||
category: "Team Planning")
|
||||
let other = self.entry(
|
||||
key: "agent:main:other",
|
||||
displayName: "Unrelated",
|
||||
|
||||
@@ -280,6 +280,7 @@ function filterSessionEntries(params: {
|
||||
entry.label,
|
||||
entry.subject,
|
||||
entry.sessionId,
|
||||
entry.category,
|
||||
key,
|
||||
];
|
||||
appendStoredSessionModelSearchFields(cheapFields, entry);
|
||||
|
||||
@@ -629,6 +629,33 @@ describe("gateway session utils", () => {
|
||||
expect(listed.hasMore).toBe(true);
|
||||
});
|
||||
|
||||
test("session list search includes the session group name", () => {
|
||||
const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
|
||||
const store: Record<string, SessionEntry> = {
|
||||
"agent:main:roadmap": {
|
||||
sessionId: "roadmap",
|
||||
displayName: "Quarterly roadmap",
|
||||
category: "Team Planning",
|
||||
updatedAt: 2,
|
||||
},
|
||||
"agent:main:other": {
|
||||
sessionId: "other",
|
||||
displayName: "Unrelated",
|
||||
category: "Personal",
|
||||
updatedAt: 1,
|
||||
},
|
||||
};
|
||||
|
||||
const listed = listSessionsFromStore({
|
||||
cfg,
|
||||
storePath: "",
|
||||
store,
|
||||
opts: { search: "team planning" },
|
||||
});
|
||||
|
||||
expect(listed.sessions.map((session) => session.key)).toEqual(["agent:main:roadmap"]);
|
||||
});
|
||||
|
||||
test("session list search includes direct-session origin display labels", () => {
|
||||
const cfg = { agents: { list: [{ id: "main", default: true }] } } as OpenClawConfig;
|
||||
const store: Record<string, SessionEntry> = {
|
||||
|
||||
Reference in New Issue
Block a user