@flamingo-stack/openframe-frontend-core 0.0.447 → 0.0.448
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-2PNWAAU4.cjs → chunk-3RM5Z2SH.cjs} +59 -59
- package/dist/{chunk-2PNWAAU4.cjs.map → chunk-3RM5Z2SH.cjs.map} +1 -1
- package/dist/{chunk-ITJMUH4Q.cjs → chunk-5Z3YOBRE.cjs} +31 -31
- package/dist/{chunk-ITJMUH4Q.cjs.map → chunk-5Z3YOBRE.cjs.map} +1 -1
- package/dist/{chunk-PF6CKZIH.cjs → chunk-7YSVW2JG.cjs} +5 -5
- package/dist/{chunk-PF6CKZIH.cjs.map → chunk-7YSVW2JG.cjs.map} +1 -1
- package/dist/{chunk-SHC5NFOH.js → chunk-AEPR6AXO.js} +2 -2
- package/dist/{chunk-4ONE3HQP.js → chunk-AMS55EES.js} +2 -2
- package/dist/{chunk-3GBLPPSW.js → chunk-ANJ56NCM.js} +4 -4
- package/dist/{chunk-ZQVEB6KT.js → chunk-CAEQ5BQO.js} +4 -4
- package/dist/{chunk-KYLOPUIH.cjs → chunk-CCSCZSXS.cjs} +26 -26
- package/dist/{chunk-KYLOPUIH.cjs.map → chunk-CCSCZSXS.cjs.map} +1 -1
- package/dist/{chunk-FR6NVZVM.cjs → chunk-HKMQ3LHY.cjs} +11 -11
- package/dist/{chunk-FR6NVZVM.cjs.map → chunk-HKMQ3LHY.cjs.map} +1 -1
- package/dist/{chunk-XUS75SQW.cjs → chunk-JM5VSYQB.cjs} +15 -15
- package/dist/{chunk-XUS75SQW.cjs.map → chunk-JM5VSYQB.cjs.map} +1 -1
- package/dist/{chunk-TMZYFYSS.js → chunk-KP2E22VP.js} +4 -4
- package/dist/{chunk-RNXMP7GB.cjs → chunk-M2U5KN4Q.cjs} +73 -13
- package/dist/chunk-M2U5KN4Q.cjs.map +1 -0
- package/dist/{chunk-S7VMUDUB.cjs → chunk-NQTASSKI.cjs} +9 -9
- package/dist/{chunk-S7VMUDUB.cjs.map → chunk-NQTASSKI.cjs.map} +1 -1
- package/dist/{chunk-E6HKLQ3Q.cjs → chunk-P62PIQSY.cjs} +7 -7
- package/dist/{chunk-E6HKLQ3Q.cjs.map → chunk-P62PIQSY.cjs.map} +1 -1
- package/dist/{chunk-G7QSLGMI.js → chunk-PFRUS5M4.js} +2 -2
- package/dist/{chunk-ZYB3BYBA.js → chunk-PHH7M3CF.js} +2 -2
- package/dist/{chunk-6TAIXSF5.js → chunk-PJ27XJRQ.js} +2 -2
- package/dist/{chunk-YCSNDUDE.js → chunk-QJN4XSP4.js} +73 -13
- package/dist/{chunk-YCSNDUDE.js.map → chunk-QJN4XSP4.js.map} +1 -1
- package/dist/{chunk-5BJJRPDH.js → chunk-T245XRIS.js} +2 -2
- package/dist/{chunk-X4XHW3OV.cjs → chunk-TGEAT3G4.cjs} +37 -37
- package/dist/{chunk-X4XHW3OV.cjs.map → chunk-TGEAT3G4.cjs.map} +1 -1
- package/dist/{chunk-WMOF3WQT.js → chunk-UAOR2SRY.js} +4 -4
- package/dist/{chunk-WLU37UZO.cjs → chunk-X62WEO5Z.cjs} +62 -62
- package/dist/{chunk-WLU37UZO.cjs.map → chunk-X62WEO5Z.cjs.map} +1 -1
- package/dist/{chunk-EZMM2OMP.cjs → chunk-ZGERD4OP.cjs} +26 -26
- package/dist/{chunk-EZMM2OMP.cjs.map → chunk-ZGERD4OP.cjs.map} +1 -1
- package/dist/{chunk-D2NLNBLH.js → chunk-ZRYCV52Q.js} +2 -2
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/types/message.types.d.ts +13 -0
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/utils/history-merge.d.ts +14 -4
- package/dist/components/chat/utils/history-merge.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +129 -129
- package/dist/components/index.js +9 -9
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chat/types/message.types.ts +13 -0
- package/src/components/chat/utils/__tests__/history-merge.test.ts +301 -0
- package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +35 -0
- package/src/components/chat/utils/history-merge.ts +157 -14
- package/src/components/chat/utils/process-historical-messages.ts +45 -6
- package/dist/chunk-RNXMP7GB.cjs.map +0 -1
- /package/dist/{chunk-SHC5NFOH.js.map → chunk-AEPR6AXO.js.map} +0 -0
- /package/dist/{chunk-4ONE3HQP.js.map → chunk-AMS55EES.js.map} +0 -0
- /package/dist/{chunk-3GBLPPSW.js.map → chunk-ANJ56NCM.js.map} +0 -0
- /package/dist/{chunk-ZQVEB6KT.js.map → chunk-CAEQ5BQO.js.map} +0 -0
- /package/dist/{chunk-TMZYFYSS.js.map → chunk-KP2E22VP.js.map} +0 -0
- /package/dist/{chunk-G7QSLGMI.js.map → chunk-PFRUS5M4.js.map} +0 -0
- /package/dist/{chunk-ZYB3BYBA.js.map → chunk-PHH7M3CF.js.map} +0 -0
- /package/dist/{chunk-6TAIXSF5.js.map → chunk-PJ27XJRQ.js.map} +0 -0
- /package/dist/{chunk-5BJJRPDH.js.map → chunk-T245XRIS.js.map} +0 -0
- /package/dist/{chunk-WMOF3WQT.js.map → chunk-UAOR2SRY.js.map} +0 -0
- /package/dist/{chunk-D2NLNBLH.js.map → chunk-ZRYCV52Q.js.map} +0 -0
|
@@ -47,6 +47,7 @@ function pushStandaloneMessages(
|
|
|
47
47
|
name: data.text,
|
|
48
48
|
authorType: 'system',
|
|
49
49
|
timestamp: new Date(msg.createdAt),
|
|
50
|
+
...(typeof msg.lastChunkStreamSeq === 'number' ? { streamSeq: msg.lastChunkStreamSeq } : {}),
|
|
50
51
|
})
|
|
51
52
|
}
|
|
52
53
|
})
|
|
@@ -99,6 +100,9 @@ export function processHistoricalMessages(
|
|
|
99
100
|
let currentAssistantId: string | null = null
|
|
100
101
|
let currentAssistantTimestamp: Date | null = null
|
|
101
102
|
let lastAssistantId: string | null = null
|
|
103
|
+
// MAX persisted seq across the rows grouped into the current assistant turn
|
|
104
|
+
// — carried onto the flushed message's streamSeq for per-role merge coverage.
|
|
105
|
+
let currentAssistantStreamSeq: number | undefined
|
|
102
106
|
|
|
103
107
|
/**
|
|
104
108
|
* Flush the current assistant message to processedMessages.
|
|
@@ -116,12 +120,21 @@ export function processHistoricalMessages(
|
|
|
116
120
|
authorType: assistantType as AuthorType,
|
|
117
121
|
timestamp: currentAssistantTimestamp || new Date(),
|
|
118
122
|
avatar: assistantAvatar,
|
|
123
|
+
...(currentAssistantStreamSeq !== undefined ? { streamSeq: currentAssistantStreamSeq } : {}),
|
|
119
124
|
})
|
|
120
125
|
accumulator.resetSegments()
|
|
121
|
-
currentAssistantId = null
|
|
122
|
-
currentAssistantTimestamp = null
|
|
123
|
-
lastAssistantId = null
|
|
124
126
|
}
|
|
127
|
+
// Reset grouping identity + seq UNCONDITIONALLY — even on an EMPTY flush (an
|
|
128
|
+
// assistant turn whose only data was a filtered/escalated approval renders
|
|
129
|
+
// nothing, so `hasContent()` is false and nothing is pushed). Left inside
|
|
130
|
+
// the push-block, a stale id/timestamp and (worse) a stale
|
|
131
|
+
// `currentAssistantStreamSeq` bleed into the NEXT assistant turn: `!currentAssistantId`
|
|
132
|
+
// stays false so it keeps the old id/timestamp, and `Math.max` inflates its
|
|
133
|
+
// streamSeq — which then over-covers synthetics in the history merge.
|
|
134
|
+
currentAssistantId = null
|
|
135
|
+
currentAssistantTimestamp = null
|
|
136
|
+
lastAssistantId = null
|
|
137
|
+
currentAssistantStreamSeq = undefined
|
|
125
138
|
}
|
|
126
139
|
|
|
127
140
|
messages.forEach((msg, index) => {
|
|
@@ -171,6 +184,7 @@ export function processHistoricalMessages(
|
|
|
171
184
|
authorType: userAuthorType,
|
|
172
185
|
timestamp: new Date(msg.createdAt),
|
|
173
186
|
...(contextItems && contextItems.length > 0 ? { contextItems } : {}),
|
|
187
|
+
...(typeof msg.lastChunkStreamSeq === 'number' ? { streamSeq: msg.lastChunkStreamSeq } : {}),
|
|
174
188
|
})
|
|
175
189
|
}
|
|
176
190
|
})
|
|
@@ -180,6 +194,12 @@ export function processHistoricalMessages(
|
|
|
180
194
|
currentAssistantTimestamp = new Date(msg.createdAt)
|
|
181
195
|
}
|
|
182
196
|
lastAssistantId = msg.id
|
|
197
|
+
if (typeof msg.lastChunkStreamSeq === 'number') {
|
|
198
|
+
currentAssistantStreamSeq =
|
|
199
|
+
currentAssistantStreamSeq === undefined
|
|
200
|
+
? msg.lastChunkStreamSeq
|
|
201
|
+
: Math.max(currentAssistantStreamSeq, msg.lastChunkStreamSeq)
|
|
202
|
+
}
|
|
183
203
|
|
|
184
204
|
messageDataArray.forEach((data) => {
|
|
185
205
|
processMessageData(
|
|
@@ -501,6 +521,9 @@ export function processHistoricalMessagesWithErrors(
|
|
|
501
521
|
let currentAssistantId: string | null = null
|
|
502
522
|
let currentAssistantTimestamp: Date | null = null
|
|
503
523
|
let lastAssistantId: string | null = null
|
|
524
|
+
// MAX persisted seq across the rows grouped into the current assistant turn
|
|
525
|
+
// — carried onto the flushed message's streamSeq for per-role merge coverage.
|
|
526
|
+
let currentAssistantStreamSeq: number | undefined
|
|
504
527
|
|
|
505
528
|
const flushAssistantMessage = () => {
|
|
506
529
|
const idToUse = lastAssistantId || currentAssistantId
|
|
@@ -514,12 +537,21 @@ export function processHistoricalMessagesWithErrors(
|
|
|
514
537
|
authorType: assistantType as AuthorType,
|
|
515
538
|
timestamp: currentAssistantTimestamp || new Date(),
|
|
516
539
|
avatar: assistantAvatar,
|
|
540
|
+
...(currentAssistantStreamSeq !== undefined ? { streamSeq: currentAssistantStreamSeq } : {}),
|
|
517
541
|
})
|
|
518
542
|
accumulator.resetSegments()
|
|
519
|
-
currentAssistantId = null
|
|
520
|
-
currentAssistantTimestamp = null
|
|
521
|
-
lastAssistantId = null
|
|
522
543
|
}
|
|
544
|
+
// Reset grouping identity + seq UNCONDITIONALLY — even on an EMPTY flush (an
|
|
545
|
+
// assistant turn whose only data was a filtered/escalated approval renders
|
|
546
|
+
// nothing, so `hasContent()` is false and nothing is pushed). Left inside
|
|
547
|
+
// the push-block, a stale id/timestamp and (worse) a stale
|
|
548
|
+
// `currentAssistantStreamSeq` bleed into the NEXT assistant turn: `!currentAssistantId`
|
|
549
|
+
// stays false so it keeps the old id/timestamp, and `Math.max` inflates its
|
|
550
|
+
// streamSeq — which then over-covers synthetics in the history merge.
|
|
551
|
+
currentAssistantId = null
|
|
552
|
+
currentAssistantTimestamp = null
|
|
553
|
+
lastAssistantId = null
|
|
554
|
+
currentAssistantStreamSeq = undefined
|
|
523
555
|
}
|
|
524
556
|
|
|
525
557
|
messages.forEach((msg, index) => {
|
|
@@ -568,6 +600,7 @@ export function processHistoricalMessagesWithErrors(
|
|
|
568
600
|
authorType: userAuthorType,
|
|
569
601
|
timestamp: new Date(msg.createdAt),
|
|
570
602
|
...(contextItems && contextItems.length > 0 ? { contextItems } : {}),
|
|
603
|
+
...(typeof msg.lastChunkStreamSeq === 'number' ? { streamSeq: msg.lastChunkStreamSeq } : {}),
|
|
571
604
|
})
|
|
572
605
|
}
|
|
573
606
|
})
|
|
@@ -577,6 +610,12 @@ export function processHistoricalMessagesWithErrors(
|
|
|
577
610
|
currentAssistantTimestamp = new Date(msg.createdAt)
|
|
578
611
|
}
|
|
579
612
|
lastAssistantId = msg.id
|
|
613
|
+
if (typeof msg.lastChunkStreamSeq === 'number') {
|
|
614
|
+
currentAssistantStreamSeq =
|
|
615
|
+
currentAssistantStreamSeq === undefined
|
|
616
|
+
? msg.lastChunkStreamSeq
|
|
617
|
+
: Math.max(currentAssistantStreamSeq, msg.lastChunkStreamSeq)
|
|
618
|
+
}
|
|
580
619
|
|
|
581
620
|
messageDataArray.forEach((data) => {
|
|
582
621
|
processMessageData(
|