From ebc28ed8a40d4fbeea2c6c9d51ea1bfcadbf772c Mon Sep 17 00:00:00 2001 From: Enrico Ros Date: Tue, 22 Jul 2025 07:10:57 -0700 Subject: [PATCH] Entangled: add DMessage metadata --- src/common/stores/chat/chat.message.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/common/stores/chat/chat.message.ts b/src/common/stores/chat/chat.message.ts index 3bc42545a..91fa3e5f9 100644 --- a/src/common/stores/chat/chat.message.ts +++ b/src/common/stores/chat/chat.message.ts @@ -47,6 +47,8 @@ export type DMessageRole = 'user' | 'assistant' | 'system'; export interface DMessageMetadata { inReferenceTo?: DMetaReferenceItem[]; // text this was in reply to + entangled?: DMessageEntangled; // entangled messages info + // NOTE: if adding fields, manually update `duplicateDMessageMetadata` } /** A textual reference to a text snipped, by a certain role. */ @@ -57,6 +59,13 @@ export interface DMetaReferenceItem { // messageId?: string; } +/** Entangled messages info for coordinated multi-chat operations. */ +export interface DMessageEntangled { + id: string; // entanglement group ID + color: string; // hex color for visual connection + count: number; // total number of chats this was sent to +} + // Message > User Flags @@ -169,8 +178,15 @@ export function duplicateDMessage(message: Readonly, skipVoid: boolean } export function duplicateDMessageMetadata(metadata: Readonly): DMessageMetadata { - // TODO: deep copy this? - return { ...metadata }; + // NOTE: update this function when adding metadata fields + return { + ...(metadata.inReferenceTo ? { + inReferenceTo: metadata.inReferenceTo.map(refItem => ({ ...refItem })), + } : {}), + ...(metadata.entangled ? { + entangled: { ...metadata.entangled }, + } : {}), + }; } export function duplicateDMessageGenerator(generator: Readonly): DMessageGenerator {