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 committed 2026-09-01 18:56:14 +07:00
1 parent c704fbf7a5
commit 26a690943d
8 files changed
+84 -8

No files matched your search

@@ -37,6 +37,14 @@ export interface QdrantVerdictPayload {
/** Bare content hash (16 hex chars) — enables content-based invalidation
* regardless of the (context-scoped) point id. */
content_hash?: string;
// Archive metadata (archiveEmbedder writes these; moderation cache doesn't).
// Optional so the same payload shape serves both the moderation cache
// collection and the public message archive collection.
username?: string;
channel_id?: string;
guild_id?: string;
thread_id?: string | null;
created_at?: number;
}
function baseUrl(): string {