mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-20 01:00:24 +00:00
Search through all messages in session, not just first message
- SessionManager now collects text from all user and assistant messages - Added allMessagesText field containing concatenated message text - Search now matches against all messages in a session - More powerful session discovery (e.g., search "write file" finds any session discussing file writing)
This commit is contained in:
parent
101a6c4ef3
commit
9dac37d836
2 changed files with 19 additions and 5 deletions
|
|
@ -253,6 +253,7 @@ export class SessionManager {
|
||||||
modified: Date;
|
modified: Date;
|
||||||
messageCount: number;
|
messageCount: number;
|
||||||
firstMessage: string;
|
firstMessage: string;
|
||||||
|
allMessagesText: string;
|
||||||
}> {
|
}> {
|
||||||
const sessions: Array<{
|
const sessions: Array<{
|
||||||
path: string;
|
path: string;
|
||||||
|
|
@ -261,6 +262,7 @@ export class SessionManager {
|
||||||
modified: Date;
|
modified: Date;
|
||||||
messageCount: number;
|
messageCount: number;
|
||||||
firstMessage: string;
|
firstMessage: string;
|
||||||
|
allMessagesText: string;
|
||||||
}> = [];
|
}> = [];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -278,6 +280,7 @@ export class SessionManager {
|
||||||
let created = stats.birthtime;
|
let created = stats.birthtime;
|
||||||
let messageCount = 0;
|
let messageCount = 0;
|
||||||
let firstMessage = "";
|
let firstMessage = "";
|
||||||
|
const allMessages: string[] = [];
|
||||||
|
|
||||||
for (const line of lines) {
|
for (const line of lines) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -289,17 +292,25 @@ export class SessionManager {
|
||||||
created = new Date(entry.timestamp);
|
created = new Date(entry.timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count messages
|
// Count messages and collect all text
|
||||||
if (entry.type === "message") {
|
if (entry.type === "message") {
|
||||||
messageCount++;
|
messageCount++;
|
||||||
|
|
||||||
// Get first user message
|
// Extract text from user and assistant messages
|
||||||
if (!firstMessage && entry.message.role === "user") {
|
if (entry.message.role === "user" || entry.message.role === "assistant") {
|
||||||
const textContent = entry.message.content
|
const textContent = entry.message.content
|
||||||
.filter((c: any) => c.type === "text")
|
.filter((c: any) => c.type === "text")
|
||||||
.map((c: any) => c.text)
|
.map((c: any) => c.text)
|
||||||
.join(" ");
|
.join(" ");
|
||||||
firstMessage = textContent || "";
|
|
||||||
|
if (textContent) {
|
||||||
|
allMessages.push(textContent);
|
||||||
|
|
||||||
|
// Get first user message for display
|
||||||
|
if (!firstMessage && entry.message.role === "user") {
|
||||||
|
firstMessage = textContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|
@ -314,6 +325,7 @@ export class SessionManager {
|
||||||
modified: stats.mtime,
|
modified: stats.mtime,
|
||||||
messageCount,
|
messageCount,
|
||||||
firstMessage: firstMessage || "(no messages)",
|
firstMessage: firstMessage || "(no messages)",
|
||||||
|
allMessagesText: allMessages.join(" "),
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Skip files that can't be read
|
// Skip files that can't be read
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ interface SessionItem {
|
||||||
modified: Date;
|
modified: Date;
|
||||||
messageCount: number;
|
messageCount: number;
|
||||||
firstMessage: string;
|
firstMessage: string;
|
||||||
|
allMessagesText: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -57,7 +58,8 @@ class SessionList implements Component {
|
||||||
.split(/\s+/)
|
.split(/\s+/)
|
||||||
.filter((t) => t);
|
.filter((t) => t);
|
||||||
this.filteredSessions = this.allSessions.filter((session) => {
|
this.filteredSessions = this.allSessions.filter((session) => {
|
||||||
const searchText = session.firstMessage.toLowerCase();
|
// Search through all messages in the session
|
||||||
|
const searchText = session.allMessagesText.toLowerCase();
|
||||||
return searchTokens.every((token) => searchText.includes(token));
|
return searchTokens.every((token) => searchText.includes(token));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue