@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.
Files changed (92) hide show
  1. package/dist/{chunk-2PNWAAU4.cjs → chunk-3RM5Z2SH.cjs} +59 -59
  2. package/dist/{chunk-2PNWAAU4.cjs.map → chunk-3RM5Z2SH.cjs.map} +1 -1
  3. package/dist/{chunk-ITJMUH4Q.cjs → chunk-5Z3YOBRE.cjs} +31 -31
  4. package/dist/{chunk-ITJMUH4Q.cjs.map → chunk-5Z3YOBRE.cjs.map} +1 -1
  5. package/dist/{chunk-PF6CKZIH.cjs → chunk-7YSVW2JG.cjs} +5 -5
  6. package/dist/{chunk-PF6CKZIH.cjs.map → chunk-7YSVW2JG.cjs.map} +1 -1
  7. package/dist/{chunk-SHC5NFOH.js → chunk-AEPR6AXO.js} +2 -2
  8. package/dist/{chunk-4ONE3HQP.js → chunk-AMS55EES.js} +2 -2
  9. package/dist/{chunk-3GBLPPSW.js → chunk-ANJ56NCM.js} +4 -4
  10. package/dist/{chunk-ZQVEB6KT.js → chunk-CAEQ5BQO.js} +4 -4
  11. package/dist/{chunk-KYLOPUIH.cjs → chunk-CCSCZSXS.cjs} +26 -26
  12. package/dist/{chunk-KYLOPUIH.cjs.map → chunk-CCSCZSXS.cjs.map} +1 -1
  13. package/dist/{chunk-FR6NVZVM.cjs → chunk-HKMQ3LHY.cjs} +11 -11
  14. package/dist/{chunk-FR6NVZVM.cjs.map → chunk-HKMQ3LHY.cjs.map} +1 -1
  15. package/dist/{chunk-XUS75SQW.cjs → chunk-JM5VSYQB.cjs} +15 -15
  16. package/dist/{chunk-XUS75SQW.cjs.map → chunk-JM5VSYQB.cjs.map} +1 -1
  17. package/dist/{chunk-TMZYFYSS.js → chunk-KP2E22VP.js} +4 -4
  18. package/dist/{chunk-RNXMP7GB.cjs → chunk-M2U5KN4Q.cjs} +73 -13
  19. package/dist/chunk-M2U5KN4Q.cjs.map +1 -0
  20. package/dist/{chunk-S7VMUDUB.cjs → chunk-NQTASSKI.cjs} +9 -9
  21. package/dist/{chunk-S7VMUDUB.cjs.map → chunk-NQTASSKI.cjs.map} +1 -1
  22. package/dist/{chunk-E6HKLQ3Q.cjs → chunk-P62PIQSY.cjs} +7 -7
  23. package/dist/{chunk-E6HKLQ3Q.cjs.map → chunk-P62PIQSY.cjs.map} +1 -1
  24. package/dist/{chunk-G7QSLGMI.js → chunk-PFRUS5M4.js} +2 -2
  25. package/dist/{chunk-ZYB3BYBA.js → chunk-PHH7M3CF.js} +2 -2
  26. package/dist/{chunk-6TAIXSF5.js → chunk-PJ27XJRQ.js} +2 -2
  27. package/dist/{chunk-YCSNDUDE.js → chunk-QJN4XSP4.js} +73 -13
  28. package/dist/{chunk-YCSNDUDE.js.map → chunk-QJN4XSP4.js.map} +1 -1
  29. package/dist/{chunk-5BJJRPDH.js → chunk-T245XRIS.js} +2 -2
  30. package/dist/{chunk-X4XHW3OV.cjs → chunk-TGEAT3G4.cjs} +37 -37
  31. package/dist/{chunk-X4XHW3OV.cjs.map → chunk-TGEAT3G4.cjs.map} +1 -1
  32. package/dist/{chunk-WMOF3WQT.js → chunk-UAOR2SRY.js} +4 -4
  33. package/dist/{chunk-WLU37UZO.cjs → chunk-X62WEO5Z.cjs} +62 -62
  34. package/dist/{chunk-WLU37UZO.cjs.map → chunk-X62WEO5Z.cjs.map} +1 -1
  35. package/dist/{chunk-EZMM2OMP.cjs → chunk-ZGERD4OP.cjs} +26 -26
  36. package/dist/{chunk-EZMM2OMP.cjs.map → chunk-ZGERD4OP.cjs.map} +1 -1
  37. package/dist/{chunk-D2NLNBLH.js → chunk-ZRYCV52Q.js} +2 -2
  38. package/dist/components/case-studies/index.cjs +8 -8
  39. package/dist/components/case-studies/index.js +2 -2
  40. package/dist/components/chat/index.cjs +2 -2
  41. package/dist/components/chat/index.js +1 -1
  42. package/dist/components/chat/types/message.types.d.ts +13 -0
  43. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  44. package/dist/components/chat/utils/history-merge.d.ts +14 -4
  45. package/dist/components/chat/utils/history-merge.d.ts.map +1 -1
  46. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  47. package/dist/components/contact/index.cjs +3 -3
  48. package/dist/components/contact/index.js +2 -2
  49. package/dist/components/docs/index.cjs +5 -5
  50. package/dist/components/docs/index.js +4 -4
  51. package/dist/components/embeds/index.cjs +3 -3
  52. package/dist/components/embeds/index.js +2 -2
  53. package/dist/components/faq/index.cjs +3 -3
  54. package/dist/components/faq/index.js +2 -2
  55. package/dist/components/features/index.cjs +2 -2
  56. package/dist/components/features/index.js +1 -1
  57. package/dist/components/help-center-pages/index.cjs +20 -20
  58. package/dist/components/help-center-pages/index.js +11 -11
  59. package/dist/components/index.cjs +129 -129
  60. package/dist/components/index.js +9 -9
  61. package/dist/components/navigation/index.cjs +2 -2
  62. package/dist/components/navigation/index.js +1 -1
  63. package/dist/components/onboarding-guides/index.cjs +5 -5
  64. package/dist/components/onboarding-guides/index.js +4 -4
  65. package/dist/components/related-content/index.cjs +3 -3
  66. package/dist/components/related-content/index.js +2 -2
  67. package/dist/components/tickets/index.cjs +5 -5
  68. package/dist/components/tickets/index.js +4 -4
  69. package/dist/components/ui/index.cjs +2 -2
  70. package/dist/components/ui/index.js +1 -1
  71. package/dist/index.cjs +2 -2
  72. package/dist/index.js +1 -1
  73. package/dist/utils/index.cjs.map +1 -1
  74. package/dist/utils/index.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/components/chat/types/message.types.ts +13 -0
  77. package/src/components/chat/utils/__tests__/history-merge.test.ts +301 -0
  78. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +35 -0
  79. package/src/components/chat/utils/history-merge.ts +157 -14
  80. package/src/components/chat/utils/process-historical-messages.ts +45 -6
  81. package/dist/chunk-RNXMP7GB.cjs.map +0 -1
  82. /package/dist/{chunk-SHC5NFOH.js.map → chunk-AEPR6AXO.js.map} +0 -0
  83. /package/dist/{chunk-4ONE3HQP.js.map → chunk-AMS55EES.js.map} +0 -0
  84. /package/dist/{chunk-3GBLPPSW.js.map → chunk-ANJ56NCM.js.map} +0 -0
  85. /package/dist/{chunk-ZQVEB6KT.js.map → chunk-CAEQ5BQO.js.map} +0 -0
  86. /package/dist/{chunk-TMZYFYSS.js.map → chunk-KP2E22VP.js.map} +0 -0
  87. /package/dist/{chunk-G7QSLGMI.js.map → chunk-PFRUS5M4.js.map} +0 -0
  88. /package/dist/{chunk-ZYB3BYBA.js.map → chunk-PHH7M3CF.js.map} +0 -0
  89. /package/dist/{chunk-6TAIXSF5.js.map → chunk-PJ27XJRQ.js.map} +0 -0
  90. /package/dist/{chunk-5BJJRPDH.js.map → chunk-T245XRIS.js.map} +0 -0
  91. /package/dist/{chunk-WMOF3WQT.js.map → chunk-UAOR2SRY.js.map} +0 -0
  92. /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(