@sentry/junior 0.153.0 → 0.155.0

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 (83) hide show
  1. package/dist/{agent-hooks-7BWOB7SN.js → agent-hooks-AWVTLAV2.js} +11 -12
  2. package/dist/api/conversations/list.d.ts +5 -3
  3. package/dist/api/conversations/membership.d.ts +16 -0
  4. package/dist/api/locations/detail.d.ts +1 -0
  5. package/dist/api/schema/conversation.d.ts +3 -0
  6. package/dist/api/schema/location.d.ts +1 -0
  7. package/dist/api/schema/person.d.ts +1 -0
  8. package/dist/api/schema.js +1 -1
  9. package/dist/api.js +318 -187
  10. package/dist/app.js +39 -39
  11. package/dist/catalog-runtime-V6YD6KH5.js +16 -0
  12. package/dist/chat/conversations/sql/event-actor.d.ts +14 -0
  13. package/dist/chat/conversations/sql/event-lock.d.ts +1 -1
  14. package/dist/chat/conversations/sql/participants.d.ts +17 -0
  15. package/dist/chat/plugins/unfinished-work.d.ts +2 -0
  16. package/dist/chat/runtime/agent-runner.d.ts +2 -0
  17. package/dist/chat/runtime/slack-resume.d.ts +1 -1
  18. package/dist/chat/state/conversation.d.ts +1 -0
  19. package/dist/{chunk-O2YXWWPM.js → chunk-2AHVM3HK.js} +92 -9
  20. package/dist/{chunk-VXWTGOLW.js → chunk-2WLJDM23.js} +1 -1
  21. package/dist/{chunk-4TWLKHOM.js → chunk-37G5HJ2X.js} +4 -4
  22. package/dist/{chunk-ISEROVYZ.js → chunk-4K5N6HTX.js} +5 -5
  23. package/dist/{chunk-ET54Q4TD.js → chunk-773XC7P4.js} +116 -82
  24. package/dist/{chunk-HUO3UTAQ.js → chunk-7MA4HV4W.js} +1 -1
  25. package/dist/{chunk-HMU2QP5M.js → chunk-7NYEB2TM.js} +1 -1
  26. package/dist/{chunk-URFV5RWN.js → chunk-AENPRXCG.js} +23 -56
  27. package/dist/{chunk-TIV3PX5H.js → chunk-APHDJYN7.js} +2 -2
  28. package/dist/{chunk-RUIXF3YQ.js → chunk-BDUENQD3.js} +1 -1
  29. package/dist/{chunk-5TXDKTET.js → chunk-CPQBTTI6.js} +7 -7
  30. package/dist/{chunk-A5SROS6H.js → chunk-ELOTIL5F.js} +5 -5
  31. package/dist/{chunk-JJAMURMR.js → chunk-EORR34UB.js} +1 -1
  32. package/dist/{chunk-5QBK3QHJ.js → chunk-J2SYI36O.js} +6 -8
  33. package/dist/{chunk-K4LK6KYO.js → chunk-J7MWZFFP.js} +4 -4
  34. package/dist/{chunk-COC65LIW.js → chunk-JFZBGFNX.js} +3 -1
  35. package/dist/{chunk-YECBSG77.js → chunk-JIC33O5L.js} +2 -2
  36. package/dist/{chunk-XAYXN4EG.js → chunk-JJX77MB7.js} +366 -138
  37. package/dist/{chunk-FLEY546A.js → chunk-KBT2I5ER.js} +7 -7
  38. package/dist/{chunk-37LMRT7G.js → chunk-KTVHAHUV.js} +1 -1
  39. package/dist/{chunk-PMJAY6JS.js → chunk-LQT3SWFA.js} +5 -5
  40. package/dist/{chunk-HYEAR6HL.js → chunk-MLBH7J7J.js} +1 -1
  41. package/dist/{chunk-5DMPHA4V.js → chunk-NKFRRZIT.js} +27 -37
  42. package/dist/{chunk-HOK7MEWG.js → chunk-NWSKFYOH.js} +1 -1
  43. package/dist/{chunk-JY2HJYJT.js → chunk-RN3AWYEP.js} +2 -2
  44. package/dist/{chunk-RKW5QGGN.js → chunk-RQ62VKM7.js} +1 -1
  45. package/dist/{chunk-XQPKMLRI.js → chunk-SDRJ2LE3.js} +1 -1
  46. package/dist/{chunk-JAJVUQV7.js → chunk-TKJ7277U.js} +3 -3
  47. package/dist/{chunk-EPOA52SD.js → chunk-TVXAN43I.js} +1 -1
  48. package/dist/{chunk-2NS3ACHB.js → chunk-UWTXAYBP.js} +11 -11
  49. package/dist/{chunk-2J4VCHRX.js → chunk-V57LZDHN.js} +8 -10
  50. package/dist/{chunk-HZF5P5UN.js → chunk-V7YE4WCP.js} +58 -7
  51. package/dist/{chunk-PGJBNO3I.js → chunk-XFZLQANQ.js} +2 -2
  52. package/dist/{chunk-5XBRH3N7.js → chunk-Y6MVGU7L.js} +12 -11
  53. package/dist/{chunk-WTKAALLV.js → chunk-Y7ZUBP2K.js} +6 -6
  54. package/dist/{chunk-UG5UCHHJ.js → chunk-ZLSFOSDK.js} +2 -1
  55. package/dist/cli/chat.js +36 -36
  56. package/dist/cli/check.js +8 -9
  57. package/dist/cli/init.js +41 -7
  58. package/dist/cli/plugins.js +15 -16
  59. package/dist/cli/snapshot-create.js +11 -12
  60. package/dist/cli/upgrade.js +9 -10
  61. package/dist/db/schema/conversation-events.d.ts +20 -0
  62. package/dist/db/schema/conversation-participants.d.ts +63 -0
  63. package/dist/db/schema.d.ts +77 -1
  64. package/dist/{db-QNQM5YRR.js → db-WT7P56AH.js} +8 -8
  65. package/dist/instrumentation.js +4 -4
  66. package/dist/nitro.js +2 -2
  67. package/dist/{oauth-callback-server-ERQPIR27.js → oauth-callback-server-R2PK2MCA.js} +26 -26
  68. package/dist/{runner-BX46SQIE.js → runner-O7YYUIHT.js} +15 -16
  69. package/dist/{sandbox-egress-signals-EKPAVWQL.js → sandbox-egress-signals-U3ZX7C5W.js} +3 -4
  70. package/dist/{skills-JL44EIRX.js → skills-S6HLQRH7.js} +8 -9
  71. package/dist/spawn-B4SBFFA2.js +37 -0
  72. package/dist/{validation-UU2AIJIY.js → validation-46WD2OAR.js} +8 -9
  73. package/dist/version.js +1 -1
  74. package/dist/{work-SS7RU5CH.js → work-YT5QUBS3.js} +20 -21
  75. package/dist/worker-4C5BEDWN.js +24 -0
  76. package/migrations/0026_conversation_event_actor_and_participants.sql +140 -0
  77. package/migrations/meta/0026_snapshot.json +2424 -0
  78. package/migrations/meta/_journal.json +7 -0
  79. package/package.json +8 -6
  80. package/dist/catalog-runtime-CGUDNL3D.js +0 -17
  81. package/dist/chunk-F3B2YJ76.js +0 -57
  82. package/dist/spawn-W6FO32T4.js +0 -38
  83. package/dist/worker-5P2E7LVI.js +0 -25
@@ -2,46 +2,46 @@ import {
2
2
  GET,
3
3
  GET2,
4
4
  syncLocalOAuthCredential
5
- } from "./chunk-5DMPHA4V.js";
5
+ } from "./chunk-NKFRRZIT.js";
6
6
  import "./chunk-FA6POGLH.js";
7
- import "./chunk-HOK7MEWG.js";
8
- import "./chunk-37LMRT7G.js";
9
- import "./chunk-A5SROS6H.js";
10
- import "./chunk-2NS3ACHB.js";
11
- import "./chunk-ISEROVYZ.js";
7
+ import "./chunk-NWSKFYOH.js";
8
+ import "./chunk-KTVHAHUV.js";
9
+ import "./chunk-ELOTIL5F.js";
10
+ import "./chunk-UWTXAYBP.js";
11
+ import "./chunk-4K5N6HTX.js";
12
12
  import "./chunk-WR76IVA5.js";
13
13
  import "./chunk-JAL3CH4G.js";
14
14
  import "./chunk-5I6ORJUY.js";
15
15
  import {
16
16
  createUserTokenStore
17
- } from "./chunk-O2YXWWPM.js";
17
+ } from "./chunk-2AHVM3HK.js";
18
18
  import "./chunk-RF6J3DIO.js";
19
- import "./chunk-FLEY546A.js";
20
- import "./chunk-TIV3PX5H.js";
21
- import "./chunk-5QBK3QHJ.js";
19
+ import "./chunk-KBT2I5ER.js";
20
+ import "./chunk-5IDFPCON.js";
21
+ import "./chunk-APHDJYN7.js";
22
+ import "./chunk-J2SYI36O.js";
22
23
  import "./chunk-3Y47VMHV.js";
23
24
  import "./chunk-PDO5BLNM.js";
24
- import "./chunk-2J4VCHRX.js";
25
- import "./chunk-JAJVUQV7.js";
26
- import "./chunk-XAYXN4EG.js";
27
- import "./chunk-ET54Q4TD.js";
25
+ import "./chunk-V57LZDHN.js";
26
+ import "./chunk-TKJ7277U.js";
27
+ import "./chunk-JJX77MB7.js";
28
+ import "./chunk-773XC7P4.js";
28
29
  import "./chunk-EM225ITJ.js";
29
- import "./chunk-XQPKMLRI.js";
30
- import "./chunk-PGJBNO3I.js";
30
+ import "./chunk-SDRJ2LE3.js";
31
+ import "./chunk-XFZLQANQ.js";
31
32
  import "./chunk-VFUK3X5B.js";
32
- import "./chunk-VXWTGOLW.js";
33
- import "./chunk-YECBSG77.js";
34
- import "./chunk-EPOA52SD.js";
35
- import "./chunk-JY2HJYJT.js";
36
- import "./chunk-RUIXF3YQ.js";
37
- import "./chunk-HZF5P5UN.js";
38
- import "./chunk-F3B2YJ76.js";
39
- import "./chunk-HMU2QP5M.js";
33
+ import "./chunk-2WLJDM23.js";
34
+ import "./chunk-JIC33O5L.js";
35
+ import "./chunk-TVXAN43I.js";
36
+ import "./chunk-RN3AWYEP.js";
37
+ import "./chunk-BDUENQD3.js";
38
+ import "./chunk-V7YE4WCP.js";
39
+ import "./chunk-7NYEB2TM.js";
40
40
  import "./chunk-6GWA276C.js";
41
41
  import "./chunk-OOUNJNMR.js";
42
42
  import "./chunk-H4HBKISO.js";
43
- import "./chunk-JJAMURMR.js";
44
- import "./chunk-COC65LIW.js";
43
+ import "./chunk-EORR34UB.js";
44
+ import "./chunk-JFZBGFNX.js";
45
45
  import "./chunk-MLKGABMK.js";
46
46
 
47
47
  // src/chat/local/oauth-callback-server.ts
@@ -4,14 +4,14 @@ import {
4
4
  finalizeFailedTurnReplyWithEvent,
5
5
  processPluginTask,
6
6
  scheduleSessionCompletedPluginTasks
7
- } from "./chunk-2NS3ACHB.js";
7
+ } from "./chunk-UWTXAYBP.js";
8
8
  import {
9
9
  ConversationTurnLifecycleService,
10
10
  coerceThreadConversationState,
11
11
  getPersistedSandboxState,
12
12
  getPersistedThreadState,
13
13
  persistThreadStateById
14
- } from "./chunk-ISEROVYZ.js";
14
+ } from "./chunk-4K5N6HTX.js";
15
15
  import "./chunk-5I6ORJUY.js";
16
16
  import {
17
17
  authorizationId
@@ -34,34 +34,33 @@ import {
34
34
  stripRuntimeTurnContext,
35
35
  trimTrailingAssistantMessages,
36
36
  upsertConversationMessage
37
- } from "./chunk-5QBK3QHJ.js";
37
+ } from "./chunk-J2SYI36O.js";
38
38
  import "./chunk-3Y47VMHV.js";
39
39
  import "./chunk-PDO5BLNM.js";
40
- import "./chunk-2J4VCHRX.js";
41
- import "./chunk-JAJVUQV7.js";
40
+ import "./chunk-V57LZDHN.js";
41
+ import "./chunk-TKJ7277U.js";
42
42
  import {
43
43
  getConversationEventStore,
44
44
  getConversationStore
45
- } from "./chunk-XAYXN4EG.js";
46
- import "./chunk-ET54Q4TD.js";
45
+ } from "./chunk-JJX77MB7.js";
46
+ import "./chunk-773XC7P4.js";
47
47
  import "./chunk-EM225ITJ.js";
48
- import "./chunk-XQPKMLRI.js";
49
- import "./chunk-PGJBNO3I.js";
48
+ import "./chunk-SDRJ2LE3.js";
49
+ import "./chunk-XFZLQANQ.js";
50
50
  import "./chunk-VFUK3X5B.js";
51
- import "./chunk-VXWTGOLW.js";
51
+ import "./chunk-2WLJDM23.js";
52
52
  import {
53
53
  credentialContextForActor
54
- } from "./chunk-RUIXF3YQ.js";
55
- import "./chunk-HZF5P5UN.js";
56
- import "./chunk-F3B2YJ76.js";
54
+ } from "./chunk-BDUENQD3.js";
55
+ import "./chunk-V7YE4WCP.js";
57
56
  import {
58
57
  logException,
59
58
  setTags,
60
59
  withLogContext
61
- } from "./chunk-HMU2QP5M.js";
60
+ } from "./chunk-7NYEB2TM.js";
62
61
  import "./chunk-6GWA276C.js";
63
- import "./chunk-JJAMURMR.js";
64
- import "./chunk-COC65LIW.js";
62
+ import "./chunk-EORR34UB.js";
63
+ import "./chunk-JFZBGFNX.js";
65
64
  import "./chunk-MLKGABMK.js";
66
65
 
67
66
  // src/chat/local/runner.ts
@@ -1,9 +1,8 @@
1
1
  import {
2
2
  sandboxEgressSignalsResponseSchema
3
- } from "./chunk-HUO3UTAQ.js";
4
- import "./chunk-RUIXF3YQ.js";
5
- import "./chunk-HZF5P5UN.js";
6
- import "./chunk-F3B2YJ76.js";
3
+ } from "./chunk-7MA4HV4W.js";
4
+ import "./chunk-BDUENQD3.js";
5
+ import "./chunk-V7YE4WCP.js";
7
6
  import "./chunk-MLKGABMK.js";
8
7
 
9
8
  // src/chat/local/sandbox-egress-signals.ts
@@ -6,18 +6,17 @@ import {
6
6
  parseSkillInvocation,
7
7
  resetSkillDiscoveryCache,
8
8
  stripFrontmatter
9
- } from "./chunk-YECBSG77.js";
10
- import "./chunk-EPOA52SD.js";
11
- import "./chunk-JY2HJYJT.js";
12
- import "./chunk-RUIXF3YQ.js";
13
- import "./chunk-HZF5P5UN.js";
14
- import "./chunk-F3B2YJ76.js";
15
- import "./chunk-HMU2QP5M.js";
9
+ } from "./chunk-JIC33O5L.js";
10
+ import "./chunk-TVXAN43I.js";
11
+ import "./chunk-RN3AWYEP.js";
12
+ import "./chunk-BDUENQD3.js";
13
+ import "./chunk-V7YE4WCP.js";
14
+ import "./chunk-7NYEB2TM.js";
16
15
  import "./chunk-6GWA276C.js";
17
16
  import "./chunk-OOUNJNMR.js";
18
17
  import "./chunk-H4HBKISO.js";
19
- import "./chunk-JJAMURMR.js";
20
- import "./chunk-COC65LIW.js";
18
+ import "./chunk-EORR34UB.js";
19
+ import "./chunk-JFZBGFNX.js";
21
20
  import "./chunk-MLKGABMK.js";
22
21
  export {
23
22
  discoverSkills,
@@ -0,0 +1,37 @@
1
+ import {
2
+ bindSpawnAgent
3
+ } from "./chunk-RQ62VKM7.js";
4
+ import "./chunk-Y7ZUBP2K.js";
5
+ import "./chunk-ELOTIL5F.js";
6
+ import "./chunk-4K5N6HTX.js";
7
+ import "./chunk-JAL3CH4G.js";
8
+ import "./chunk-CPQBTTI6.js";
9
+ import "./chunk-DIB4GX3G.js";
10
+ import "./chunk-RF6J3DIO.js";
11
+ import "./chunk-KBT2I5ER.js";
12
+ import "./chunk-7MA4HV4W.js";
13
+ import "./chunk-J2SYI36O.js";
14
+ import "./chunk-3Y47VMHV.js";
15
+ import "./chunk-PDO5BLNM.js";
16
+ import "./chunk-TKJ7277U.js";
17
+ import "./chunk-JJX77MB7.js";
18
+ import "./chunk-773XC7P4.js";
19
+ import "./chunk-EM225ITJ.js";
20
+ import "./chunk-SDRJ2LE3.js";
21
+ import "./chunk-XFZLQANQ.js";
22
+ import "./chunk-VFUK3X5B.js";
23
+ import "./chunk-2WLJDM23.js";
24
+ import "./chunk-TVXAN43I.js";
25
+ import "./chunk-RN3AWYEP.js";
26
+ import "./chunk-BDUENQD3.js";
27
+ import "./chunk-V7YE4WCP.js";
28
+ import "./chunk-7NYEB2TM.js";
29
+ import "./chunk-6GWA276C.js";
30
+ import "./chunk-OOUNJNMR.js";
31
+ import "./chunk-H4HBKISO.js";
32
+ import "./chunk-EORR34UB.js";
33
+ import "./chunk-JFZBGFNX.js";
34
+ import "./chunk-MLKGABMK.js";
35
+ export {
36
+ bindSpawnAgent
37
+ };
@@ -1,18 +1,17 @@
1
1
  import {
2
2
  validatePluginEgressCredentialHooks,
3
3
  validatePluginRegistrations
4
- } from "./chunk-HYEAR6HL.js";
5
- import "./chunk-EPOA52SD.js";
6
- import "./chunk-JY2HJYJT.js";
7
- import "./chunk-RUIXF3YQ.js";
8
- import "./chunk-HZF5P5UN.js";
9
- import "./chunk-F3B2YJ76.js";
10
- import "./chunk-HMU2QP5M.js";
4
+ } from "./chunk-MLBH7J7J.js";
5
+ import "./chunk-TVXAN43I.js";
6
+ import "./chunk-RN3AWYEP.js";
7
+ import "./chunk-BDUENQD3.js";
8
+ import "./chunk-V7YE4WCP.js";
9
+ import "./chunk-7NYEB2TM.js";
11
10
  import "./chunk-6GWA276C.js";
12
11
  import "./chunk-OOUNJNMR.js";
13
12
  import "./chunk-H4HBKISO.js";
14
- import "./chunk-JJAMURMR.js";
15
- import "./chunk-COC65LIW.js";
13
+ import "./chunk-EORR34UB.js";
14
+ import "./chunk-JFZBGFNX.js";
16
15
  import "./chunk-MLKGABMK.js";
17
16
  export {
18
17
  validatePluginEgressCredentialHooks,
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  JUNIOR_VERSION
3
- } from "./chunk-COC65LIW.js";
3
+ } from "./chunk-JFZBGFNX.js";
4
4
  import "./chunk-MLKGABMK.js";
5
5
  export {
6
6
  JUNIOR_VERSION
@@ -5,36 +5,35 @@ import {
5
5
  enqueueAgentInvocation,
6
6
  resolveAgentInvocationId,
7
7
  routeAgentInvocationWork
8
- } from "./chunk-WTKAALLV.js";
9
- import "./chunk-A5SROS6H.js";
10
- import "./chunk-ISEROVYZ.js";
8
+ } from "./chunk-Y7ZUBP2K.js";
9
+ import "./chunk-ELOTIL5F.js";
10
+ import "./chunk-4K5N6HTX.js";
11
11
  import "./chunk-JAL3CH4G.js";
12
- import "./chunk-5TXDKTET.js";
12
+ import "./chunk-CPQBTTI6.js";
13
13
  import "./chunk-DIB4GX3G.js";
14
- import "./chunk-FLEY546A.js";
15
- import "./chunk-HUO3UTAQ.js";
16
- import "./chunk-5QBK3QHJ.js";
14
+ import "./chunk-KBT2I5ER.js";
15
+ import "./chunk-7MA4HV4W.js";
16
+ import "./chunk-J2SYI36O.js";
17
17
  import "./chunk-3Y47VMHV.js";
18
18
  import "./chunk-PDO5BLNM.js";
19
- import "./chunk-JAJVUQV7.js";
20
- import "./chunk-XAYXN4EG.js";
21
- import "./chunk-ET54Q4TD.js";
19
+ import "./chunk-TKJ7277U.js";
20
+ import "./chunk-JJX77MB7.js";
21
+ import "./chunk-773XC7P4.js";
22
22
  import "./chunk-EM225ITJ.js";
23
- import "./chunk-XQPKMLRI.js";
24
- import "./chunk-PGJBNO3I.js";
23
+ import "./chunk-SDRJ2LE3.js";
24
+ import "./chunk-XFZLQANQ.js";
25
25
  import "./chunk-VFUK3X5B.js";
26
- import "./chunk-VXWTGOLW.js";
27
- import "./chunk-EPOA52SD.js";
28
- import "./chunk-JY2HJYJT.js";
29
- import "./chunk-RUIXF3YQ.js";
30
- import "./chunk-HZF5P5UN.js";
31
- import "./chunk-F3B2YJ76.js";
32
- import "./chunk-HMU2QP5M.js";
26
+ import "./chunk-2WLJDM23.js";
27
+ import "./chunk-TVXAN43I.js";
28
+ import "./chunk-RN3AWYEP.js";
29
+ import "./chunk-BDUENQD3.js";
30
+ import "./chunk-V7YE4WCP.js";
31
+ import "./chunk-7NYEB2TM.js";
33
32
  import "./chunk-6GWA276C.js";
34
33
  import "./chunk-OOUNJNMR.js";
35
34
  import "./chunk-H4HBKISO.js";
36
- import "./chunk-JJAMURMR.js";
37
- import "./chunk-COC65LIW.js";
35
+ import "./chunk-EORR34UB.js";
36
+ import "./chunk-JFZBGFNX.js";
38
37
  import "./chunk-MLKGABMK.js";
39
38
  export {
40
39
  buildAgentInvocationInboundMessage,
@@ -0,0 +1,24 @@
1
+ import {
2
+ CONVERSATION_WORK_DEFER_DELAY_MS,
3
+ processConversationWork
4
+ } from "./chunk-J7MWZFFP.js";
5
+ import "./chunk-NWSKFYOH.js";
6
+ import "./chunk-ELOTIL5F.js";
7
+ import "./chunk-JAL3CH4G.js";
8
+ import "./chunk-3Y47VMHV.js";
9
+ import "./chunk-JJX77MB7.js";
10
+ import "./chunk-773XC7P4.js";
11
+ import "./chunk-SDRJ2LE3.js";
12
+ import "./chunk-XFZLQANQ.js";
13
+ import "./chunk-VFUK3X5B.js";
14
+ import "./chunk-2WLJDM23.js";
15
+ import "./chunk-V7YE4WCP.js";
16
+ import "./chunk-7NYEB2TM.js";
17
+ import "./chunk-6GWA276C.js";
18
+ import "./chunk-EORR34UB.js";
19
+ import "./chunk-JFZBGFNX.js";
20
+ import "./chunk-MLKGABMK.js";
21
+ export {
22
+ CONVERSATION_WORK_DEFER_DELAY_MS,
23
+ processConversationWork
24
+ };
@@ -0,0 +1,140 @@
1
+ CREATE TABLE "junior_conversation_participants" (
2
+ "user_id" text NOT NULL,
3
+ "root_conversation_id" text NOT NULL,
4
+ "last_message_at" timestamp with time zone NOT NULL,
5
+ CONSTRAINT "junior_conversation_participants_user_root_pk" PRIMARY KEY("user_id","root_conversation_id")
6
+ );
7
+ --> statement-breakpoint
8
+ ALTER TABLE "junior_conversation_events" ADD COLUMN "actor_identity_id" text;--> statement-breakpoint
9
+ ALTER TABLE "junior_conversation_participants" ADD CONSTRAINT "junior_conversation_participants_user_id_junior_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."junior_users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
10
+ ALTER TABLE "junior_conversation_participants" ADD CONSTRAINT "junior_conversation_participants_root_conversation_id_junior_conversations_conversation_id_fk" FOREIGN KEY ("root_conversation_id") REFERENCES "public"."junior_conversations"("conversation_id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
11
+ CREATE INDEX "junior_conversation_participants_user_activity_idx" ON "junior_conversation_participants" USING btree ("user_id","last_message_at" DESC NULLS LAST);--> statement-breakpoint
12
+ CREATE INDEX "junior_conversation_participants_root_idx" ON "junior_conversation_participants" USING btree ("root_conversation_id");--> statement-breakpoint
13
+ ALTER TABLE "junior_conversation_events" ADD CONSTRAINT "junior_conversation_events_actor_identity_id_junior_identities_id_fk" FOREIGN KEY ("actor_identity_id") REFERENCES "public"."junior_identities"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
14
+ CREATE INDEX "junior_conversation_events_actor_identity_idx" ON "junior_conversation_events" USING btree ("actor_identity_id","conversation_id","seq");--> statement-breakpoint
15
+ -- Lift explicit payload authorIdentityId values onto the new column when valid.
16
+ UPDATE "junior_conversation_events" AS e
17
+ SET "actor_identity_id" = e."payload"->>'authorIdentityId'
18
+ WHERE e."actor_identity_id" IS NULL
19
+ AND e."type" IN ('message', 'message_updated')
20
+ AND jsonb_typeof(e."payload") = 'object'
21
+ AND e."payload" ? 'authorIdentityId'
22
+ AND EXISTS (
23
+ SELECT 1
24
+ FROM "junior_identities" AS i
25
+ WHERE i."id" = e."payload"->>'authorIdentityId'
26
+ );--> statement-breakpoint
27
+ -- Match durable Slack human authors to known identities by subject (+ tenant when known).
28
+ UPDATE "junior_conversation_events" AS e
29
+ SET "actor_identity_id" = matched."id"
30
+ FROM (
31
+ SELECT DISTINCT ON (e2."conversation_id", e2."seq")
32
+ e2."conversation_id",
33
+ e2."seq",
34
+ i."id"
35
+ FROM "junior_conversation_events" AS e2
36
+ INNER JOIN "junior_conversations" AS c
37
+ ON c."conversation_id" = e2."conversation_id"
38
+ LEFT JOIN "junior_destinations" AS d
39
+ ON d."id" = c."destination_id"
40
+ INNER JOIN "junior_identities" AS i
41
+ ON i."provider" = 'slack'
42
+ AND i."provider_subject_id" = e2."payload"->'meta'->'author'->>'userId'
43
+ AND (
44
+ d."provider_tenant_id" IS NULL
45
+ OR d."provider_tenant_id" = ''
46
+ OR i."provider_tenant_id" = d."provider_tenant_id"
47
+ )
48
+ WHERE e2."actor_identity_id" IS NULL
49
+ AND e2."type" IN ('message', 'message_updated')
50
+ AND e2."payload"->>'role' = 'user'
51
+ AND coalesce((e2."payload"->'meta'->'author'->>'isBot')::boolean, false) = false
52
+ AND coalesce(e2."payload"->'meta'->'author'->>'userId', '') <> ''
53
+ ORDER BY e2."conversation_id", e2."seq", i."updated_at" DESC, i."id"
54
+ ) AS matched
55
+ WHERE e."conversation_id" = matched."conversation_id"
56
+ AND e."seq" = matched."seq"
57
+ AND e."actor_identity_id" IS NULL;--> statement-breakpoint
58
+ -- Match durable junior/web human authors by verified email subject, including
59
+ -- dashboard:<sha256(email).slice(0,24)> author ids produced by webActorFromEmail.
60
+ CREATE EXTENSION IF NOT EXISTS pgcrypto;--> statement-breakpoint
61
+ UPDATE "junior_conversation_events" AS e
62
+ SET "actor_identity_id" = matched."id"
63
+ FROM (
64
+ SELECT DISTINCT ON (e2."conversation_id", e2."seq")
65
+ e2."conversation_id",
66
+ e2."seq",
67
+ i."id"
68
+ FROM "junior_conversation_events" AS e2
69
+ INNER JOIN "junior_identities" AS i
70
+ ON i."provider" = 'junior'
71
+ AND i."kind" = 'user'
72
+ AND i."email_verified" = true
73
+ AND i."email_normalized" IS NOT NULL
74
+ AND (
75
+ i."email_normalized" = lower(e2."payload"->'meta'->'author'->>'email')
76
+ OR i."provider_subject_id" = lower(e2."payload"->'meta'->'author'->>'email')
77
+ OR (
78
+ e2."payload"->'meta'->'author'->>'userId' LIKE 'dashboard:%'
79
+ AND e2."payload"->'meta'->'author'->>'userId' = concat(
80
+ 'dashboard:',
81
+ left(encode(digest(i."email_normalized", 'sha256'), 'hex'), 24)
82
+ )
83
+ )
84
+ )
85
+ WHERE e2."actor_identity_id" IS NULL
86
+ AND e2."type" IN ('message', 'message_updated')
87
+ AND e2."payload"->>'role' = 'user'
88
+ AND coalesce((e2."payload"->'meta'->'author'->>'isBot')::boolean, false) = false
89
+ ORDER BY e2."conversation_id", e2."seq", i."updated_at" DESC, i."id"
90
+ ) AS matched
91
+ WHERE e."conversation_id" = matched."conversation_id"
92
+ AND e."seq" = matched."seq"
93
+ AND e."actor_identity_id" IS NULL;--> statement-breakpoint
94
+ -- Materialize linked-user participants from authored human user messages.
95
+ INSERT INTO "junior_conversation_participants" (
96
+ "user_id",
97
+ "root_conversation_id",
98
+ "last_message_at"
99
+ )
100
+ SELECT
101
+ i."user_id",
102
+ coalesce(c."root_conversation_id", c."conversation_id") AS "root_conversation_id",
103
+ max(e."created_at") AS "last_message_at"
104
+ FROM "junior_conversation_events" AS e
105
+ INNER JOIN "junior_identities" AS i
106
+ ON i."id" = e."actor_identity_id"
107
+ INNER JOIN "junior_conversations" AS c
108
+ ON c."conversation_id" = e."conversation_id"
109
+ WHERE i."user_id" IS NOT NULL
110
+ AND e."type" IN ('message', 'message_updated')
111
+ AND e."payload"->>'role' = 'user'
112
+ AND coalesce((e."payload"->'meta'->'author'->>'isBot')::boolean, false) = false
113
+ AND coalesce(c."root_conversation_id", c."conversation_id") IS NOT NULL
114
+ GROUP BY i."user_id", coalesce(c."root_conversation_id", c."conversation_id")
115
+ ON CONFLICT ("user_id", "root_conversation_id") DO UPDATE
116
+ SET "last_message_at" = greatest(
117
+ "junior_conversation_participants"."last_message_at",
118
+ excluded."last_message_at"
119
+ );--> statement-breakpoint
120
+ -- Keep root actors in the personal feed even before they author a message row.
121
+ INSERT INTO "junior_conversation_participants" (
122
+ "user_id",
123
+ "root_conversation_id",
124
+ "last_message_at"
125
+ )
126
+ SELECT
127
+ i."user_id",
128
+ c."conversation_id",
129
+ c."last_activity_at"
130
+ FROM "junior_conversations" AS c
131
+ INNER JOIN "junior_identities" AS i
132
+ ON i."id" = c."actor_identity_id"
133
+ WHERE c."parent_conversation_id" IS NULL
134
+ AND i."user_id" IS NOT NULL
135
+ AND i."kind" = 'user'
136
+ ON CONFLICT ("user_id", "root_conversation_id") DO UPDATE
137
+ SET "last_message_at" = greatest(
138
+ "junior_conversation_participants"."last_message_at",
139
+ excluded."last_message_at"
140
+ );