feat(archive): rich metadata in semantic search — username/channel/guild context + guild filter

Archive payload now stores username, channel_id, guild_id, thread_id and the
real message created_at (not embed time). Backend searchArray accepts an
optional guildId and applies a Qdrant payload filter so results can be scoped
to the guild being viewed. API/frontend expose the new fields and the
semantic results card shows who said it, in which channel, and when —
turning bare text blobs into contextual results. Old points fall back to
analyzed_at and omit the new fields gracefully.
This commit is contained in:
asepharyana
2026-09-01 18:56:14 +07:00
parent c704fbf7a5
commit 26a690943d
8 changed files with 84 additions and 8 deletions
@@ -129,6 +129,7 @@ export function MessagesView({
const semantic = useSemanticSearch(
query,
query.trim().length >= 2 && semanticMode,
guildId,
);
const activity = useMessageActivity(30);
const edits = useRecentEdits(50, undefined, initialEdits);
@@ -360,6 +361,16 @@ export function MessagesView({
<span className="font-mono text-[10px] font-semibold text-signal">
{(r.score * 100).toFixed(0)}% RELEVANCE
</span>
{r.username && (
<span className="font-mono text-[10px] font-medium text-ink">
{r.username}
</span>
)}
{r.channel_id && (
<span className="font-mono text-[10px] text-ink-muted">
#{r.channel_id}
</span>
)}
<span
className="ml-auto font-mono text-[10px] text-ink-muted"
suppressHydrationWarning