@rudderhq/server 0.6.4-canary.1 → 0.6.4

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 (109) hide show
  1. package/dist/bundled-plugins/plugin-linear/dist/worker.js +2 -1
  2. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
  3. package/dist/services/chat-assistant.helpers.d.ts +2 -2
  4. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  5. package/dist/services/chat-assistant.helpers.js +99 -46
  6. package/dist/services/chat-assistant.helpers.js.map +1 -1
  7. package/dist/services/chats.attention-order.d.ts +9 -0
  8. package/dist/services/chats.attention-order.d.ts.map +1 -0
  9. package/dist/services/chats.attention-order.js +83 -0
  10. package/dist/services/chats.attention-order.js.map +1 -0
  11. package/dist/services/chats.d.ts +3 -0
  12. package/dist/services/chats.d.ts.map +1 -1
  13. package/dist/services/chats.js +21 -24
  14. package/dist/services/chats.js.map +1 -1
  15. package/dist/services/chats.types.d.ts +1 -0
  16. package/dist/services/chats.types.d.ts.map +1 -1
  17. package/dist/services/messenger-thread-summary-order.d.ts +19 -0
  18. package/dist/services/messenger-thread-summary-order.d.ts.map +1 -0
  19. package/dist/services/messenger-thread-summary-order.js +77 -0
  20. package/dist/services/messenger-thread-summary-order.js.map +1 -0
  21. package/dist/services/messenger.d.ts.map +1 -1
  22. package/dist/services/messenger.js +32 -52
  23. package/dist/services/messenger.js.map +1 -1
  24. package/package.json +13 -13
  25. package/ui-dist/assets/{LibraryLiveSurface-35w3_fxQ.js → LibraryLiveSurface-BYGDPCAh.js} +1 -1
  26. package/ui-dist/assets/{abnfDiagram-VRR7QNED-Dhv0xxtU.js → abnfDiagram-VRR7QNED-BuPf41Ov.js} +1 -1
  27. package/ui-dist/assets/{arc-DFvIHWXV.js → arc-DH1titLL.js} +1 -1
  28. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-f6vpuLF3.js → architectureDiagram-ZJ3FMSHR-D3Ub5tz0.js} +1 -1
  29. package/ui-dist/assets/{blockDiagram-677ZJIJ3-v-51bTH8.js → blockDiagram-677ZJIJ3-B_4t_sHV.js} +1 -1
  30. package/ui-dist/assets/{c4Diagram-LMCZKHZV-CEUfIEhw.js → c4Diagram-LMCZKHZV-B-soFVrZ.js} +1 -1
  31. package/ui-dist/assets/channel-CZC9_c_3.js +1 -0
  32. package/ui-dist/assets/{chunk-2Q5K7J3B-Dv1J_fsv.js → chunk-2Q5K7J3B-BGfGs2NP.js} +1 -1
  33. package/ui-dist/assets/{chunk-32BRIVSS-BbJG1iXS.js → chunk-32BRIVSS-Cu0E6tPd.js} +1 -1
  34. package/ui-dist/assets/{chunk-5VM5RSS4-u9JGTpz8.js → chunk-5VM5RSS4-D5Y7JsX8.js} +1 -1
  35. package/ui-dist/assets/{chunk-EX3LRPZG-Hj2VBVzw.js → chunk-EX3LRPZG-BLXD3A6J.js} +1 -1
  36. package/ui-dist/assets/{chunk-JWPE2WC7-BAa23bsq.js → chunk-JWPE2WC7-C413O18H.js} +1 -1
  37. package/ui-dist/assets/{chunk-MOJQB5TN-CU9-2bhz.js → chunk-MOJQB5TN-CzRq4bbZ.js} +1 -1
  38. package/ui-dist/assets/{chunk-RYQCIY6F-CdGeU79r.js → chunk-RYQCIY6F-byDG4eCj.js} +1 -1
  39. package/ui-dist/assets/{chunk-V7JOEXUC-DyTxXRMd.js → chunk-V7JOEXUC-CDBUHk1v.js} +1 -1
  40. package/ui-dist/assets/{chunk-VR4S4FIN-Cs_r7RBs.js → chunk-VR4S4FIN-Bp_TRpmk.js} +1 -1
  41. package/ui-dist/assets/{chunk-XXDRQBXY-M4_VMuCU.js → chunk-XXDRQBXY-D-QWDkdZ.js} +1 -1
  42. package/ui-dist/assets/classDiagram-OUVF2IWQ-sxtEnlRf.js +1 -0
  43. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-sxtEnlRf.js +1 -0
  44. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DRNgpn4a.js → cose-bilkent-JH36ORCC-B1bR0N3m.js} +1 -1
  45. package/ui-dist/assets/{cynefin-VYW2F7L2-CaTf4KtD.js → cynefin-VYW2F7L2-BCepEAz0.js} +1 -1
  46. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-CllIo2pN.js → cynefinDiagram-TSTJHNR4-CaMhKyeg.js} +1 -1
  47. package/ui-dist/assets/{dagre-VKFMJZFB-C_G0ab-3.js → dagre-VKFMJZFB-DIZJ3GRL.js} +1 -1
  48. package/ui-dist/assets/{diagram-FQU43EPY-Cb0OGu_Y.js → diagram-FQU43EPY-DnKk9QsR.js} +1 -1
  49. package/ui-dist/assets/{diagram-G47NLZAW--Xkl09SK.js → diagram-G47NLZAW-e4Pt0qJn.js} +1 -1
  50. package/ui-dist/assets/{diagram-NH7WQ7WH-BRHnazbd.js → diagram-NH7WQ7WH-MaETHf6Z.js} +1 -1
  51. package/ui-dist/assets/{diagram-OA4YK3LP-BlQ5lXsr.js → diagram-OA4YK3LP-CrfbyBKn.js} +1 -1
  52. package/ui-dist/assets/{diagram-WEI45ONY-B_1e4P0g.js → diagram-WEI45ONY-D3l3n8Xh.js} +1 -1
  53. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-laqGLfXW.js → ebnfDiagram-CCIWWBDH-0e6GjJdn.js} +1 -1
  54. package/ui-dist/assets/{erDiagram-Q63AITRT-B_9drajj.js → erDiagram-Q63AITRT-Bv_UPQa5.js} +1 -1
  55. package/ui-dist/assets/{flowDiagram-23GEKE2U-BXR0zHIm.js → flowDiagram-23GEKE2U-BCPSCYJX.js} +1 -1
  56. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-QgWmPEew.js → ganttDiagram-NO4QXBWP-BvBJ-w8a.js} +1 -1
  57. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-DrHWsh6Q.js → gitGraphDiagram-IHSO6WYX-BvfnIqQ3.js} +1 -1
  58. package/ui-dist/assets/{graph-C_mw2fOC.js → graph-CKp3e73u.js} +1 -1
  59. package/ui-dist/assets/{index-P6253iQv.js → index-1WkRk1D_.js} +1 -1
  60. package/ui-dist/assets/{index-cFaYhYwz.js → index-BDtzqInY.js} +1 -1
  61. package/ui-dist/assets/{index-CxHK36lc.js → index-BKrew0qD.js} +1 -1
  62. package/ui-dist/assets/{index-BH-0qEn9.js → index-B_311RHm.js} +1 -1
  63. package/ui-dist/assets/{index-BY6Czltl.js → index-BcTmW8r5.js} +1 -1
  64. package/ui-dist/assets/{index-0SpIgZIH.js → index-Bvk3sJ4J.js} +1 -1
  65. package/ui-dist/assets/{index-DZmDtPI6.js → index-C3BGz_2D.js} +613 -612
  66. package/ui-dist/assets/{index-tVYvgkRA.js → index-CDk7NiAo.js} +1 -1
  67. package/ui-dist/assets/index-CKPcPvS3.css +1 -0
  68. package/ui-dist/assets/{index-CYX2FM5m.js → index-CLzeDqFn.js} +1 -1
  69. package/ui-dist/assets/{index-DOpY0vh9.js → index-CRfgrN4k.js} +1 -1
  70. package/ui-dist/assets/{index-B7bhzn1l.js → index-CSNNTLBR.js} +1 -1
  71. package/ui-dist/assets/{index-_h1sczrS.js → index-CULfFGup.js} +1 -1
  72. package/ui-dist/assets/{index-T-JfEm56.js → index-Cu_1NsQp.js} +1 -1
  73. package/ui-dist/assets/{index-0-Jm5L2B.js → index-DPeDMyOQ.js} +1 -1
  74. package/ui-dist/assets/{index-D8AFBYhU.js → index-DtthPonZ.js} +1 -1
  75. package/ui-dist/assets/{index-DKP-s7g7.js → index-MiArSwLx.js} +1 -1
  76. package/ui-dist/assets/{index-flEteioy.js → index-cJUKED3M.js} +1 -1
  77. package/ui-dist/assets/{index-BIkeRnBV.js → index-f_CZrwjl.js} +1 -1
  78. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Dd--3lSM.js → infoDiagram-FWYZ7A6U-ByrkjU9S.js} +1 -1
  79. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-doel5kmR.js → ishikawaDiagram-FXEZZL3T-8titDf8e.js} +1 -1
  80. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-DCdAmogk.js → journeyDiagram-5HDEW3XC-n8mkJo8M.js} +1 -1
  81. package/ui-dist/assets/{kanban-definition-HUTT4EX6-DEPWuAVa.js → kanban-definition-HUTT4EX6-JlB3JGBe.js} +1 -1
  82. package/ui-dist/assets/{layout-CyPpDJ6_.js → layout-DCNnWX7r.js} +1 -1
  83. package/ui-dist/assets/{linear-gUBAwqov.js → linear-CMOK2-kt.js} +1 -1
  84. package/ui-dist/assets/{map-C_s7GPzK.js → map-CSzyzxdL.js} +1 -1
  85. package/ui-dist/assets/{mermaid.core-dExdTvuF.js → mermaid.core-BuQnoLnI.js} +4 -4
  86. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-3fj_mF7H.js → mindmap-definition-LN4V7U3C-CYz_8aBN.js} +1 -1
  87. package/ui-dist/assets/{pegDiagram-2B236MQR-DB0yU8pH.js → pegDiagram-2B236MQR-Dlj3K_xa.js} +1 -1
  88. package/ui-dist/assets/{pieDiagram-ENE6RG2P-DCdJaexv.js → pieDiagram-ENE6RG2P-Cd4Hr2yQ.js} +1 -1
  89. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-DHoOUf-F.js → quadrantDiagram-ABIIQ3AL-VIWzo7W3.js} +1 -1
  90. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-Cn940FHA.js → railroadDiagram-RFXS5EU6-RWT8aPTm.js} +1 -1
  91. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-CR-MbEJs.js → requirementDiagram-TGXJPOKE-DzEBALwn.js} +1 -1
  92. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DMuBKI1F.js → sankeyDiagram-HTMAVEWB-1q1ZhqTw.js} +1 -1
  93. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-ptjkJNb5.js → sequenceDiagram-DBY2YBRQ-CvPUCZ_4.js} +1 -1
  94. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-BTPniWdc.js → sizeCapture-X5ZJPWSS-CjzghhU-.js} +1 -1
  95. package/ui-dist/assets/{stateDiagram-2N3HPSRC-DHJme_9A.js → stateDiagram-2N3HPSRC-CwZIPmK_.js} +1 -1
  96. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B7uBEfJf.js +1 -0
  97. package/ui-dist/assets/{swimlanes-5IMT3BWC-M3iBkiwC.js → swimlanes-5IMT3BWC-qeMRea7p.js} +2 -2
  98. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-tlZRXZ3y.js +8 -0
  99. package/ui-dist/assets/{timeline-definition-FHXFAJF6-CUt2dvL3.js → timeline-definition-FHXFAJF6-CqIBt6vj.js} +1 -1
  100. package/ui-dist/assets/{vennDiagram-L72KCM5P-B5F5ljLK.js → vennDiagram-L72KCM5P-Bogykgch.js} +1 -1
  101. package/ui-dist/assets/{wardleyDiagram-EHGQE667-C6wXJYop.js → wardleyDiagram-EHGQE667-CkOjBhXW.js} +1 -1
  102. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-C26OKbOf.js → xychartDiagram-FW5EYKEG-CRwvPfWB.js} +1 -1
  103. package/ui-dist/index.html +2 -2
  104. package/ui-dist/assets/channel-Ms_b63fe.js +0 -1
  105. package/ui-dist/assets/classDiagram-OUVF2IWQ-BxB3ibLJ.js +0 -1
  106. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BxB3ibLJ.js +0 -1
  107. package/ui-dist/assets/index-B9KXU22E.css +0 -1
  108. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DCXimvn3.js +0 -1
  109. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BM9-nPMw.js +0 -8
@@ -16,6 +16,7 @@ export type MessageHydrationRow = MessageRow & {
16
16
  } | null;
17
17
  };
18
18
  export type ConversationSummaryCursor = {
19
+ attentionRank: number;
19
20
  activityAt: Date;
20
21
  title: string;
21
22
  threadKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"chats.types.d.ts","sourceRoot":"","sources":["../../src/services/chats.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,KAAK,UAAU,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAC7C,iBAAiB,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"chats.types.d.ts","sourceRoot":"","sources":["../../src/services/chats.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,KAAK,UAAU,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG;IAC7C,iBAAiB,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { MessengerThreadSummary } from "@rudderhq/shared";
2
+ export type ThreadSummaryCursor = {
3
+ attentionRank: number;
4
+ activityAt: string;
5
+ title: string;
6
+ threadKey: string;
7
+ isPinned: boolean;
8
+ };
9
+ export declare function threadSummaryAttentionRank(summary: Pick<MessengerThreadSummary, "unreadCount" | "needsAttention" | "metadata">): 0 | 1 | 2;
10
+ type OrderableThreadSummary = Pick<MessengerThreadSummary, "latestActivityAt" | "title" | "unreadCount" | "needsAttention" | "metadata"> & {
11
+ threadKey?: string;
12
+ isPinned?: boolean;
13
+ };
14
+ export declare function comparePinnedThenLatest(a: OrderableThreadSummary, b: OrderableThreadSummary): number;
15
+ export declare function encodeThreadSummaryCursor(summary: MessengerThreadSummary): string;
16
+ export declare function decodeThreadSummaryCursor(cursor: string | null | undefined): ThreadSummaryCursor | null;
17
+ export declare function threadSummaryIsAfterCursor(summary: MessengerThreadSummary, cursor: ThreadSummaryCursor | null): boolean;
18
+ export {};
19
+ //# sourceMappingURL=messenger-thread-summary-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messenger-thread-summary-order.d.ts","sourceRoot":"","sources":["../../src/services/messenger-thread-summary-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,GAAG,gBAAgB,GAAG,UAAU,CAAC,aAUrF;AAED,KAAK,sBAAsB,GAAG,IAAI,CAChC,sBAAsB,EACtB,kBAAkB,GAAG,OAAO,GAAG,aAAa,GAAG,gBAAgB,GAAG,UAAU,CAC7E,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/C,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,sBAAsB,EACzB,CAAC,EAAE,sBAAsB,UAW1B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,sBAAsB,UAYxE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,mBAAmB,GAAG,IAAI,CA0B5B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,mBAAmB,GAAG,IAAI,WAYnC"}
@@ -0,0 +1,77 @@
1
+ export function threadSummaryAttentionRank(summary) {
2
+ if (summary.unreadCount > 0 || summary.needsAttention)
3
+ return 0;
4
+ if ((typeof summary.metadata?.activeExecutionRunId === "string"
5
+ && summary.metadata.activeExecutionRunId.length > 0)
6
+ || (typeof summary.metadata?.activeGenerationId === "string"
7
+ && summary.metadata.activeGenerationId.length > 0))
8
+ return 1;
9
+ return 2;
10
+ }
11
+ export function comparePinnedThenLatest(a, b) {
12
+ const pinnedDiff = Number(Boolean(b.isPinned)) - Number(Boolean(a.isPinned));
13
+ if (pinnedDiff !== 0)
14
+ return pinnedDiff;
15
+ const attentionDiff = threadSummaryAttentionRank(a) - threadSummaryAttentionRank(b);
16
+ if (attentionDiff !== 0)
17
+ return attentionDiff;
18
+ const aTime = a.latestActivityAt?.getTime() ?? Number.NEGATIVE_INFINITY;
19
+ const bTime = b.latestActivityAt?.getTime() ?? Number.NEGATIVE_INFINITY;
20
+ if (aTime !== bTime)
21
+ return bTime - aTime;
22
+ const titleDiff = a.title.localeCompare(b.title);
23
+ return titleDiff || (a.threadKey ?? "").localeCompare(b.threadKey ?? "");
24
+ }
25
+ export function encodeThreadSummaryCursor(summary) {
26
+ const activityAt = summary.latestActivityAt
27
+ ? new Date(summary.latestActivityAt)
28
+ : new Date(0);
29
+ const payload = {
30
+ attentionRank: threadSummaryAttentionRank(summary),
31
+ activityAt: (Number.isNaN(activityAt.getTime()) ? new Date(0) : activityAt).toISOString(),
32
+ title: summary.title,
33
+ threadKey: summary.threadKey,
34
+ isPinned: summary.isPinned,
35
+ };
36
+ return Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
37
+ }
38
+ export function decodeThreadSummaryCursor(cursor) {
39
+ if (!cursor)
40
+ return null;
41
+ try {
42
+ const decoded = JSON.parse(Buffer.from(cursor, "base64url").toString("utf8"));
43
+ if (typeof decoded.activityAt !== "string"
44
+ || Number.isNaN(new Date(decoded.activityAt).getTime())
45
+ || typeof decoded.title !== "string"
46
+ || typeof decoded.threadKey !== "string"
47
+ || decoded.threadKey.length === 0)
48
+ return null;
49
+ return {
50
+ attentionRank: typeof decoded.attentionRank === "number"
51
+ && Number.isFinite(decoded.attentionRank)
52
+ ? decoded.attentionRank
53
+ : 2,
54
+ activityAt: decoded.activityAt,
55
+ title: decoded.title,
56
+ threadKey: decoded.threadKey,
57
+ isPinned: decoded.isPinned === true,
58
+ };
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ export function threadSummaryIsAfterCursor(summary, cursor) {
65
+ if (!cursor)
66
+ return true;
67
+ return comparePinnedThenLatest(summary, {
68
+ latestActivityAt: new Date(cursor.activityAt),
69
+ title: cursor.title,
70
+ threadKey: cursor.threadKey,
71
+ isPinned: cursor.isPinned,
72
+ unreadCount: cursor.attentionRank === 0 ? 1 : 0,
73
+ needsAttention: cursor.attentionRank === 0,
74
+ metadata: cursor.attentionRank === 1 ? { activeGenerationId: "cursor" } : undefined,
75
+ }) > 0;
76
+ }
77
+ //# sourceMappingURL=messenger-thread-summary-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messenger-thread-summary-order.js","sourceRoot":"","sources":["../../src/services/messenger-thread-summary-order.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../src/services/messenger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../src/services/messenger.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { issueLowSignalContentOnlyActivitySql } from "./issue-activity-filters.j
10
10
  import { hydrateMessengerFailedRunOrigins, messengerFailedRunSourceAction, } from "./messenger-run-origin.js";
11
11
  import { failedRunUserSummary } from "./messenger-run-summary.js";
12
12
  import { lockMessengerCustomGroupPlacement, lockMessengerSavedViewPlacement, } from "./messenger-saved-views.js";
13
+ import { comparePinnedThenLatest, decodeThreadSummaryCursor, encodeThreadSummaryCursor, threadSummaryIsAfterCursor, } from "./messenger-thread-summary-order.js";
13
14
  const ISSUE_ACTIVITY_ACTIONS = [
14
15
  "issue.updated",
15
16
  "issue.followed",
@@ -56,13 +57,6 @@ function compareLatestActivity(a, b) {
56
57
  return titleDiff;
57
58
  return (a.threadKey ?? "").localeCompare(b.threadKey ?? "");
58
59
  }
59
- function comparePinnedThenLatest(a, b) {
60
- const aPinned = Boolean(a.isPinned);
61
- const bPinned = Boolean(b.isPinned);
62
- if (aPinned !== bPinned)
63
- return aPinned ? -1 : 1;
64
- return compareLatestActivity(a, b);
65
- }
66
60
  function compareChronologicalActivity(a, b) {
67
61
  const aTime = a.latestActivityAt?.getTime() ?? Number.NEGATIVE_INFINITY;
68
62
  const bTime = b.latestActivityAt?.getTime() ?? Number.NEGATIVE_INFINITY;
@@ -80,47 +74,6 @@ function normalizeThreadSummaryLimit(limit) {
80
74
  return DEFAULT_THREAD_SUMMARY_LIMIT;
81
75
  return Math.min(MAX_THREAD_SUMMARY_LIMIT, Math.max(1, Math.floor(limit)));
82
76
  }
83
- function encodeThreadSummaryCursor(summary) {
84
- const payload = {
85
- activityAt: (normalizeDate(summary.latestActivityAt) ?? new Date(0)).toISOString(),
86
- title: summary.title,
87
- threadKey: summary.threadKey,
88
- isPinned: summary.isPinned,
89
- };
90
- return Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
91
- }
92
- function decodeThreadSummaryCursor(cursor) {
93
- if (!cursor)
94
- return null;
95
- try {
96
- const decoded = JSON.parse(Buffer.from(cursor, "base64url").toString("utf8"));
97
- if (typeof decoded.activityAt !== "string" || Number.isNaN(new Date(decoded.activityAt).getTime()))
98
- return null;
99
- if (typeof decoded.title !== "string")
100
- return null;
101
- if (typeof decoded.threadKey !== "string" || decoded.threadKey.length === 0)
102
- return null;
103
- return {
104
- activityAt: decoded.activityAt,
105
- title: decoded.title,
106
- threadKey: decoded.threadKey,
107
- isPinned: decoded.isPinned === true,
108
- };
109
- }
110
- catch {
111
- return null;
112
- }
113
- }
114
- function threadSummaryIsAfterCursor(summary, cursor) {
115
- if (!cursor)
116
- return true;
117
- return comparePinnedThenLatest(summary, {
118
- latestActivityAt: new Date(cursor.activityAt),
119
- title: cursor.title,
120
- threadKey: cursor.threadKey,
121
- isPinned: cursor.isPinned,
122
- }) > 0;
123
- }
124
77
  function threadSummaryPageInfo(limit, items, hasMore) {
125
78
  return {
126
79
  limit,
@@ -396,6 +349,7 @@ function chatSummary(conversation) {
396
349
  routedAgentId: conversation.routedAgentId,
397
350
  runtimeAgentId: conversation.chatRuntime?.runtimeAgentId ?? null,
398
351
  latestUserMessagePreview: conversation.latestUserMessagePreview,
352
+ activeGenerationId: conversation.activeGenerationId ?? null,
399
353
  ...(conversation.sourceMetadata ?? {}),
400
354
  },
401
355
  };
@@ -530,7 +484,7 @@ function issueCard(issue, currentUserId, followed, latestPreview, latestActivity
530
484
  sourceCommentBody: sourceComment?.body ?? null,
531
485
  };
532
486
  }
533
- function approvalCard(approval, latestComment, currentUserId, latestActivityAt) {
487
+ function approvalCard(approval, requesterAgent, latestComment, currentUserId, latestActivityAt) {
534
488
  const payloadPreview = summarizeApprovalPayload(approval);
535
489
  const body = latestComment ? truncate(latestComment.body) : approval.decisionNote ?? payloadPreview;
536
490
  const title = approval.type === "chat_issue_creation"
@@ -557,6 +511,7 @@ function approvalCard(approval, latestComment, currentUserId, latestActivityAt)
557
511
  requester: approvalRequesterLabel(approval, currentUserId),
558
512
  },
559
513
  approval: approval,
514
+ requesterAgent,
560
515
  };
561
516
  }
562
517
  function failedRunCard(run, agentName, origin) {
@@ -1758,10 +1713,34 @@ export function messengerService(db) {
1758
1713
  }
1759
1714
  }
1760
1715
  const typedApprovalRows = approvalRows;
1716
+ const requesterAgentIds = typedApprovalRows
1717
+ .map((approval) => approval.requestedByAgentId)
1718
+ .filter((agentId) => Boolean(agentId));
1719
+ const requesterAgents = requesterAgentIds.length > 0
1720
+ ? await db
1721
+ .select({
1722
+ id: agents.id,
1723
+ name: agents.name,
1724
+ icon: agents.icon,
1725
+ role: agents.role,
1726
+ })
1727
+ .from(agents)
1728
+ .where(and(eq(agents.orgId, orgId), inArray(agents.id, requesterAgentIds)))
1729
+ : [];
1730
+ const requesterAgentById = new Map(requesterAgents.map((agent) => [
1731
+ agent.id,
1732
+ {
1733
+ ...agent,
1734
+ role: agent.role,
1735
+ },
1736
+ ]));
1761
1737
  const unsortedItems = typedApprovalRows.map((approval) => {
1762
1738
  const latestComment = latestCommentByApproval.get(approval.id) ?? null;
1763
1739
  const latestActivityAt = maxDate(approval.updatedAt, latestComment?.createdAt) ?? approval.updatedAt;
1764
- return approvalCard(approval, latestComment, userId, latestActivityAt);
1740
+ const requesterAgent = approval.requestedByAgentId
1741
+ ? requesterAgentById.get(approval.requestedByAgentId) ?? null
1742
+ : null;
1743
+ return approvalCard(approval, requesterAgent, latestComment, userId, latestActivityAt);
1765
1744
  });
1766
1745
  const latestFirstItems = [...unsortedItems].sort(compareLatestActivity);
1767
1746
  const chronologicalItems = [...unsortedItems].sort(compareChronologicalActivity);
@@ -1865,13 +1844,13 @@ export function messengerService(db) {
1865
1844
  if (latestApproval) {
1866
1845
  const latestComment = (latestApprovalCommentRows[0] ?? null);
1867
1846
  const latestActivityAt = maxDate(latestApproval.updatedAt, latestComment?.createdAt) ?? latestApproval.updatedAt;
1868
- candidateItems.push(approvalCard(latestApproval, latestComment, userId, latestActivityAt));
1847
+ candidateItems.push(approvalCard(latestApproval, null, latestComment, userId, latestActivityAt));
1869
1848
  }
1870
1849
  if (latestCommentRow) {
1871
1850
  const approval = (latestCommentApprovalRows[0] ?? null);
1872
1851
  if (approval) {
1873
1852
  const latestActivityAt = maxDate(approval.updatedAt, latestCommentRow.createdAt) ?? approval.updatedAt;
1874
- candidateItems.push(approvalCard(approval, latestCommentRow, userId, latestActivityAt));
1853
+ candidateItems.push(approvalCard(approval, null, latestCommentRow, userId, latestActivityAt));
1875
1854
  }
1876
1855
  }
1877
1856
  const latestItem = candidateItems.sort(compareLatestActivity)[0] ?? null;
@@ -2147,6 +2126,7 @@ export function messengerService(db) {
2147
2126
  const syntheticAfterCursor = syntheticSummaries.filter((summary) => threadSummaryIsAfterCursor(summary, cursor));
2148
2127
  const chatAfter = cursor && !cursor.isPinned
2149
2128
  ? {
2129
+ attentionRank: cursor.attentionRank,
2150
2130
  activityAt: new Date(cursor.activityAt),
2151
2131
  title: cursor.title,
2152
2132
  threadKey: cursor.threadKey,