@cossistant/types 0.1.1 → 0.1.2
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/api/ai-agent-capabilities.d.ts +16 -19
- package/api/ai-agent-capabilities.d.ts.map +1 -1
- package/api/ai-agent-capabilities.js +215 -286
- package/api/ai-agent-capabilities.js.map +1 -1
- package/api/ai-agent-defaults.d.ts +6 -0
- package/api/ai-agent-defaults.d.ts.map +1 -0
- package/api/ai-agent-defaults.js +33 -0
- package/api/ai-agent-defaults.js.map +1 -0
- package/api/ai-agent.d.ts +311 -204
- package/api/ai-agent.d.ts.map +1 -1
- package/api/ai-agent.js +175 -111
- package/api/ai-agent.js.map +1 -1
- package/api/conversation.d.ts +29 -6
- package/api/conversation.d.ts.map +1 -1
- package/api/conversation.js +7 -2
- package/api/conversation.js.map +1 -1
- package/api/feedback.d.ts +5 -0
- package/api/feedback.d.ts.map +1 -1
- package/api/feedback.js +2 -0
- package/api/feedback.js.map +1 -1
- package/api/index.d.ts +7 -6
- package/api/index.js +7 -6
- package/api/knowledge.d.ts.map +1 -1
- package/api/link-source.d.ts +4 -4
- package/api/link-source.d.ts.map +1 -1
- package/api/link-source.js +1 -1
- package/api/link-source.js.map +1 -1
- package/api/timeline-item.d.ts +18 -6
- package/api/timeline-item.d.ts.map +1 -1
- package/api/timeline-item.js +3 -1
- package/api/timeline-item.js.map +1 -1
- package/api/user.d.ts +1 -1
- package/api/user.d.ts.map +1 -1
- package/api/user.js +2 -2
- package/api/user.js.map +1 -1
- package/api/visitor.d.ts +225 -1
- package/api/visitor.d.ts.map +1 -1
- package/api/visitor.js +142 -1
- package/api/visitor.js.map +1 -1
- package/api/website.d.ts +12 -3
- package/api/website.d.ts.map +1 -1
- package/api/website.js +16 -2
- package/api/website.js.map +1 -1
- package/enums.d.ts +2 -0
- package/enums.d.ts.map +1 -1
- package/enums.js +3 -1
- package/enums.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +9 -8
- package/package.json +1 -1
- package/realtime-events.d.ts +74 -4
- package/realtime-events.d.ts.map +1 -1
- package/realtime-events.js +6 -2
- package/realtime-events.js.map +1 -1
- package/schemas.d.ts +3 -1
- package/schemas.d.ts.map +1 -1
- package/tool-timeline-policy.d.ts +19 -2
- package/tool-timeline-policy.d.ts.map +1 -1
- package/tool-timeline-policy.js +29 -6
- package/tool-timeline-policy.js.map +1 -1
- package/trpc/conversation-hard-limit.d.ts +30 -0
- package/trpc/conversation-hard-limit.d.ts.map +1 -0
- package/trpc/conversation-hard-limit.js +43 -0
- package/trpc/conversation-hard-limit.js.map +1 -0
- package/trpc/conversation.d.ts +44 -4
- package/trpc/conversation.d.ts.map +1 -1
- package/trpc/conversation.js +6 -0
- package/trpc/conversation.js.map +1 -1
- package/trpc/visitor.d.ts +73 -15
- package/trpc/visitor.d.ts.map +1 -1
- package/trpc/visitor.js +15 -8
- package/trpc/visitor.js.map +1 -1
package/package.json
CHANGED
package/realtime-events.d.ts
CHANGED
|
@@ -330,6 +330,8 @@ declare const realtimeSchema: {
|
|
|
330
330
|
visitor_blocked: "visitor_blocked";
|
|
331
331
|
visitor_unblocked: "visitor_unblocked";
|
|
332
332
|
visitor_identified: "visitor_identified";
|
|
333
|
+
ai_paused: "ai_paused";
|
|
334
|
+
ai_resumed: "ai_resumed";
|
|
333
335
|
}>;
|
|
334
336
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
335
337
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -339,8 +341,8 @@ declare const realtimeSchema: {
|
|
|
339
341
|
}, z.core.$strip>, z.ZodObject<{
|
|
340
342
|
type: z.ZodLiteral<"metadata">;
|
|
341
343
|
source: z.ZodEnum<{
|
|
342
|
-
widget: "widget";
|
|
343
344
|
email: "email";
|
|
345
|
+
widget: "widget";
|
|
344
346
|
api: "api";
|
|
345
347
|
}>;
|
|
346
348
|
}, z.core.$strip>]>>;
|
|
@@ -383,6 +385,16 @@ declare const realtimeSchema: {
|
|
|
383
385
|
websiteId: z.ZodString;
|
|
384
386
|
channel: z.ZodString;
|
|
385
387
|
title: z.ZodNullable<z.ZodString>;
|
|
388
|
+
titleSource: z.ZodNullable<z.ZodEnum<{
|
|
389
|
+
ai: "ai";
|
|
390
|
+
user: "user";
|
|
391
|
+
}>>;
|
|
392
|
+
sentiment: z.ZodNullable<z.ZodEnum<{
|
|
393
|
+
positive: "positive";
|
|
394
|
+
negative: "negative";
|
|
395
|
+
neutral: "neutral";
|
|
396
|
+
}>>;
|
|
397
|
+
sentimentConfidence: z.ZodNullable<z.ZodNumber>;
|
|
386
398
|
resolutionTime: z.ZodNullable<z.ZodNumber>;
|
|
387
399
|
visitorRating: z.ZodNullable<z.ZodNumber>;
|
|
388
400
|
visitorRatingAt: z.ZodNullable<z.ZodString>;
|
|
@@ -603,6 +615,8 @@ declare const realtimeSchema: {
|
|
|
603
615
|
visitor_blocked: "visitor_blocked";
|
|
604
616
|
visitor_unblocked: "visitor_unblocked";
|
|
605
617
|
visitor_identified: "visitor_identified";
|
|
618
|
+
ai_paused: "ai_paused";
|
|
619
|
+
ai_resumed: "ai_resumed";
|
|
606
620
|
}>;
|
|
607
621
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
608
622
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -612,8 +626,8 @@ declare const realtimeSchema: {
|
|
|
612
626
|
}, z.core.$strip>, z.ZodObject<{
|
|
613
627
|
type: z.ZodLiteral<"metadata">;
|
|
614
628
|
source: z.ZodEnum<{
|
|
615
|
-
widget: "widget";
|
|
616
629
|
email: "email";
|
|
630
|
+
widget: "widget";
|
|
617
631
|
api: "api";
|
|
618
632
|
}>;
|
|
619
633
|
}, z.core.$strip>]>>;
|
|
@@ -824,6 +838,8 @@ declare const realtimeSchema: {
|
|
|
824
838
|
visitor_blocked: "visitor_blocked";
|
|
825
839
|
visitor_unblocked: "visitor_unblocked";
|
|
826
840
|
visitor_identified: "visitor_identified";
|
|
841
|
+
ai_paused: "ai_paused";
|
|
842
|
+
ai_resumed: "ai_resumed";
|
|
827
843
|
}>;
|
|
828
844
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
829
845
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -833,8 +849,8 @@ declare const realtimeSchema: {
|
|
|
833
849
|
}, z.core.$strip>, z.ZodObject<{
|
|
834
850
|
type: z.ZodLiteral<"metadata">;
|
|
835
851
|
source: z.ZodEnum<{
|
|
836
|
-
widget: "widget";
|
|
837
852
|
email: "email";
|
|
853
|
+
widget: "widget";
|
|
838
854
|
api: "api";
|
|
839
855
|
}>;
|
|
840
856
|
}, z.core.$strip>]>>;
|
|
@@ -844,6 +860,8 @@ declare const realtimeSchema: {
|
|
|
844
860
|
createdAt: z.ZodString;
|
|
845
861
|
deletedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
846
862
|
}, z.core.$strip>>;
|
|
863
|
+
dashboardLocked: z.ZodOptional<z.ZodBoolean>;
|
|
864
|
+
dashboardLockReason: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"conversation_limit">, z.ZodNull]>>;
|
|
847
865
|
viewIds: z.ZodArray<z.ZodString>;
|
|
848
866
|
seenData: z.ZodArray<z.ZodObject<{
|
|
849
867
|
id: z.ZodString;
|
|
@@ -890,6 +908,54 @@ declare const realtimeSchema: {
|
|
|
890
908
|
blockedAt: z.ZodNullable<z.ZodString>;
|
|
891
909
|
blockedByUserId: z.ZodNullable<z.ZodString>;
|
|
892
910
|
isBlocked: z.ZodBoolean;
|
|
911
|
+
attribution: z.ZodNullable<z.ZodObject<{
|
|
912
|
+
version: z.ZodLiteral<1>;
|
|
913
|
+
firstTouch: z.ZodObject<{
|
|
914
|
+
channel: z.ZodEnum<{
|
|
915
|
+
email: "email";
|
|
916
|
+
direct: "direct";
|
|
917
|
+
paid: "paid";
|
|
918
|
+
organic_search: "organic_search";
|
|
919
|
+
social: "social";
|
|
920
|
+
referral: "referral";
|
|
921
|
+
}>;
|
|
922
|
+
isDirect: z.ZodBoolean;
|
|
923
|
+
referrer: z.ZodObject<{
|
|
924
|
+
url: z.ZodNullable<z.ZodString>;
|
|
925
|
+
domain: z.ZodNullable<z.ZodString>;
|
|
926
|
+
}, z.core.$strip>;
|
|
927
|
+
landing: z.ZodObject<{
|
|
928
|
+
url: z.ZodNullable<z.ZodString>;
|
|
929
|
+
path: z.ZodNullable<z.ZodString>;
|
|
930
|
+
title: z.ZodNullable<z.ZodString>;
|
|
931
|
+
}, z.core.$strip>;
|
|
932
|
+
utm: z.ZodObject<{
|
|
933
|
+
source: z.ZodNullable<z.ZodString>;
|
|
934
|
+
medium: z.ZodNullable<z.ZodString>;
|
|
935
|
+
campaign: z.ZodNullable<z.ZodString>;
|
|
936
|
+
content: z.ZodNullable<z.ZodString>;
|
|
937
|
+
term: z.ZodNullable<z.ZodString>;
|
|
938
|
+
}, z.core.$strip>;
|
|
939
|
+
clickIds: z.ZodObject<{
|
|
940
|
+
gclid: z.ZodNullable<z.ZodString>;
|
|
941
|
+
gbraid: z.ZodNullable<z.ZodString>;
|
|
942
|
+
wbraid: z.ZodNullable<z.ZodString>;
|
|
943
|
+
fbclid: z.ZodNullable<z.ZodString>;
|
|
944
|
+
msclkid: z.ZodNullable<z.ZodString>;
|
|
945
|
+
ttclid: z.ZodNullable<z.ZodString>;
|
|
946
|
+
li_fat_id: z.ZodNullable<z.ZodString>;
|
|
947
|
+
twclid: z.ZodNullable<z.ZodString>;
|
|
948
|
+
}, z.core.$strip>;
|
|
949
|
+
capturedAt: z.ZodString;
|
|
950
|
+
}, z.core.$strip>;
|
|
951
|
+
}, z.core.$strip>>;
|
|
952
|
+
currentPage: z.ZodNullable<z.ZodObject<{
|
|
953
|
+
url: z.ZodNullable<z.ZodString>;
|
|
954
|
+
path: z.ZodNullable<z.ZodString>;
|
|
955
|
+
title: z.ZodNullable<z.ZodString>;
|
|
956
|
+
referrerUrl: z.ZodNullable<z.ZodString>;
|
|
957
|
+
updatedAt: z.ZodString;
|
|
958
|
+
}, z.core.$strip>>;
|
|
893
959
|
contact: z.ZodNullable<z.ZodObject<{
|
|
894
960
|
id: z.ZodULID;
|
|
895
961
|
externalId: z.ZodNullable<z.ZodString>;
|
|
@@ -932,6 +998,8 @@ declare const realtimeSchema: {
|
|
|
932
998
|
visitor_blocked: "visitor_blocked";
|
|
933
999
|
visitor_unblocked: "visitor_unblocked";
|
|
934
1000
|
visitor_identified: "visitor_identified";
|
|
1001
|
+
ai_paused: "ai_paused";
|
|
1002
|
+
ai_resumed: "ai_resumed";
|
|
935
1003
|
}>;
|
|
936
1004
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
937
1005
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -976,6 +1044,8 @@ declare const realtimeSchema: {
|
|
|
976
1044
|
resolvedByAiAgentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
977
1045
|
resolutionTime: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
978
1046
|
deletedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1047
|
+
aiPausedUntil: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1048
|
+
viewIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
979
1049
|
}, z.core.$strip>;
|
|
980
1050
|
aiAgentId: z.ZodNullable<z.ZodString>;
|
|
981
1051
|
}, z.core.$strip>;
|
|
@@ -1163,10 +1233,10 @@ declare const realtimeSchema: {
|
|
|
1163
1233
|
linkSourceId: z.ZodString;
|
|
1164
1234
|
status: z.ZodEnum<{
|
|
1165
1235
|
pending: "pending";
|
|
1166
|
-
mapping: "mapping";
|
|
1167
1236
|
crawling: "crawling";
|
|
1168
1237
|
completed: "completed";
|
|
1169
1238
|
failed: "failed";
|
|
1239
|
+
mapping: "mapping";
|
|
1170
1240
|
}>;
|
|
1171
1241
|
discoveredPagesCount: z.ZodOptional<z.ZodNumber>;
|
|
1172
1242
|
crawledPagesCount: z.ZodOptional<z.ZodNumber>;
|
package/realtime-events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-events.d.ts","names":[],"sources":["../src/realtime-events.ts"],"sourcesContent":[],"mappings":";;;cAWa,mBAAiB,CAAA,CAAA;;EAAjB,cAAA,aAKX;;;;;;;;AAL4B,cAWjB,cAXiB,EAAA;EAAA,SAAA,aAAA,aAAA,CAAA;IAWjB,SAAA,
|
|
1
|
+
{"version":3,"file":"realtime-events.d.ts","names":[],"sources":["../src/realtime-events.ts"],"sourcesContent":[],"mappings":";;;cAWa,mBAAiB,CAAA,CAAA;;EAAjB,cAAA,aAKX;;;;;;;;AAL4B,cAWjB,cAXiB,EAAA;EAAA,SAAA,aAAA,aAAA,CAAA;IAWjB,SAAA,aA+WH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEE,iBAAA,gBAAiC;KAEjC,+BAA+B,qBAAqB,CAAA,CAAE,cACzD,gBAAgB;KAGb,wBAAwB;QAC7B;WACG,qBAAqB;;KAGnB,gBAAA,WACL,oBAAoB,cAAc,KACvC;KAEU,4BAA4B,qBACvC,qBAAqB;;;;iBAKN,gCAAgC,yBACzC,mBAEJ,qBAAqB;;;;iBAQR,gBAAA,yBAAyC;iBAIzC,0BAA0B,0BAClC,cAAc,KACnB,qBAAqB"}
|
package/realtime-events.js
CHANGED
|
@@ -105,7 +105,9 @@ const realtimeSchema = {
|
|
|
105
105
|
ConversationEventType.REOPENED,
|
|
106
106
|
ConversationEventType.VISITOR_BLOCKED,
|
|
107
107
|
ConversationEventType.VISITOR_UNBLOCKED,
|
|
108
|
-
ConversationEventType.VISITOR_IDENTIFIED
|
|
108
|
+
ConversationEventType.VISITOR_IDENTIFIED,
|
|
109
|
+
ConversationEventType.AI_PAUSED,
|
|
110
|
+
ConversationEventType.AI_RESUMED
|
|
109
111
|
]),
|
|
110
112
|
actorUserId: z.string().nullable(),
|
|
111
113
|
actorAiAgentId: z.string().nullable(),
|
|
@@ -145,7 +147,9 @@ const realtimeSchema = {
|
|
|
145
147
|
resolvedByUserId: z.string().nullable().optional(),
|
|
146
148
|
resolvedByAiAgentId: z.string().nullable().optional(),
|
|
147
149
|
resolutionTime: z.number().nullable().optional(),
|
|
148
|
-
deletedAt: z.string().nullable().optional()
|
|
150
|
+
deletedAt: z.string().nullable().optional(),
|
|
151
|
+
aiPausedUntil: z.string().nullable().optional(),
|
|
152
|
+
viewIds: z.array(z.string()).optional()
|
|
149
153
|
}),
|
|
150
154
|
aiAgentId: z.string().nullable()
|
|
151
155
|
}),
|
package/realtime-events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime-events.js","names":[],"sources":["../src/realtime-events.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { visitorResponseSchema } from \"./api/visitor\";\nimport {\n\tConversationEventType,\n\tConversationStatus,\n\tConversationTimelineType,\n\tTimelineItemVisibility,\n} from \"./enums\";\nimport { conversationSchema } from \"./schemas\";\nimport { conversationHeaderSchema } from \"./trpc/conversation\";\n\nexport const baseRealtimeEvent = z.object({\n\twebsiteId: z.string(),\n\torganizationId: z.string(),\n\tvisitorId: z.string().nullable(),\n\tuserId: z.string().nullable(),\n});\n\n/**\n * Central event system for real-time communication\n * All WebSocket and Redis Pub/Sub events are defined here\n */\nexport const realtimeSchema = {\n\tuserConnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tuserDisconnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorConnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorDisconnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tuserPresenceUpdate: baseRealtimeEvent.extend({\n\t\tuserId: z.string(),\n\t\tstatus: z.enum([\"online\", \"away\", \"offline\"]),\n\t\tlastSeen: z.string(),\n\t}),\n\tconversationSeen: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tlastSeenAt: z.string(),\n\t\t/** The type of actor who marked the conversation as seen */\n\t\tactorType: z.enum([\"visitor\", \"user\", \"ai_agent\"]),\n\t\t/** The actor's ID (matches one of userId, visitorId, or aiAgentId based on actorType) */\n\t\tactorId: z.string(),\n\t}),\n\tconversationTyping: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tisTyping: z.boolean(),\n\t\tvisitorPreview: z.string().max(2000).nullable().optional(),\n\t}),\n\ttimelineItemCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\tconversationCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tconversation: conversationSchema,\n\t\theader: conversationHeaderSchema,\n\t}),\n\tvisitorIdentified: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tvisitor: visitorResponseSchema,\n\t}),\n\tconversationEventCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tevent: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationEventType.ASSIGNED,\n\t\t\t\tConversationEventType.UNASSIGNED,\n\t\t\t\tConversationEventType.PARTICIPANT_REQUESTED,\n\t\t\t\tConversationEventType.PARTICIPANT_JOINED,\n\t\t\t\tConversationEventType.PARTICIPANT_LEFT,\n\t\t\t\tConversationEventType.STATUS_CHANGED,\n\t\t\t\tConversationEventType.PRIORITY_CHANGED,\n\t\t\t\tConversationEventType.TAG_ADDED,\n\t\t\t\tConversationEventType.TAG_REMOVED,\n\t\t\t\tConversationEventType.RESOLVED,\n\t\t\t\tConversationEventType.REOPENED,\n\t\t\t\tConversationEventType.VISITOR_BLOCKED,\n\t\t\t\tConversationEventType.VISITOR_UNBLOCKED,\n\t\t\t\tConversationEventType.VISITOR_IDENTIFIED,\n\t\t\t]),\n\t\t\tactorUserId: z.string().nullable(),\n\t\t\tactorAiAgentId: z.string().nullable(),\n\t\t\ttargetUserId: z.string().nullable(),\n\t\t\ttargetAiAgentId: z.string().nullable(),\n\t\t\tmessage: z.string().nullable(),\n\t\t\tmetadata: z.record(z.string(), z.unknown()).nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tupdatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t}),\n\t}),\n\t// Conversation updated (title, sentiment, escalation status changes, status changes)\n\tconversationUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tupdates: z.object({\n\t\t\ttitle: z.string().nullable().optional(),\n\t\t\tsentiment: z\n\t\t\t\t.enum([\"positive\", \"negative\", \"neutral\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tsentimentConfidence: z.number().nullable().optional(),\n\t\t\tescalatedAt: z.string().nullable().optional(),\n\t\t\tescalationReason: z.string().nullable().optional(),\n\t\t\tstatus: z\n\t\t\t\t.enum([\n\t\t\t\t\tConversationStatus.OPEN,\n\t\t\t\t\tConversationStatus.RESOLVED,\n\t\t\t\t\tConversationStatus.SPAM,\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\tpriority: z.enum([\"low\", \"normal\", \"high\", \"urgent\"]).optional(),\n\t\t\tresolvedAt: z.string().nullable().optional(),\n\t\t\tresolvedByUserId: z.string().nullable().optional(),\n\t\t\tresolvedByAiAgentId: z.string().nullable().optional(),\n\t\t\tresolutionTime: z.number().nullable().optional(),\n\t\t\tdeletedAt: z.string().nullable().optional(),\n\t\t}),\n\t\taiAgentId: z.string().nullable(),\n\t}),\n\n\t// =========================================================================\n\t// AI AGENT PROCESSING EVENTS\n\t// For progressive UI updates during AI agent responses\n\t//\n\t// AUDIENCE FIELD:\n\t// - 'all': Send to both dashboard and widget\n\t// - 'dashboard': Send only to dashboard (human agents)\n\t//\n\t// Widget (visitor) connections only receive events with audience='all'\n\t// =========================================================================\n\n\t// Emitted when AI agent starts processing a message\n\taiAgentProcessingStarted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** ID of the trigger message that started this workflow */\n\t\ttriggerMessageId: z.string(),\n\t\t/** Initial phase of processing */\n\t\tphase: z.string().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"dashboard\"),\n\t}),\n\n\t// Emitted when AI agent makes a decision about whether to act\n\taiAgentDecisionMade: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether the AI decided to take action */\n\t\tshouldAct: z.boolean(),\n\t\t/** Human-readable reason for the decision */\n\t\treason: z.string(),\n\t\t/** Response mode: how the AI is responding */\n\t\tmode: z.enum([\n\t\t\t\"respond_to_visitor\",\n\t\t\t\"respond_to_command\",\n\t\t\t\"background_only\",\n\t\t]),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]),\n\t}),\n\n\t// Emitted for progress updates during AI agent processing\n\taiAgentProcessingProgress: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Current phase: 'thinking', 'searching', 'tool-executing', 'generating', etc. */\n\t\tphase: z.string(),\n\t\t/** Human-readable message for display (widget sees this) */\n\t\tmessage: z.string().nullable(),\n\t\t/** Tool information when phase is tool-related */\n\t\ttool: z\n\t\t\t.object({\n\t\t\t\ttoolCallId: z.string(),\n\t\t\t\ttoolName: z.string(),\n\t\t\t\t/** Tool state: partial (executing), result (success), error (failed) */\n\t\t\t\tstate: z.enum([\"partial\", \"result\", \"error\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// Emitted when AI agent finishes processing\n\taiAgentProcessingCompleted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether processing completed successfully, was skipped, cancelled, or errored */\n\t\tstatus: z.enum([\"success\", \"skipped\", \"cancelled\", \"error\"]),\n\t\t/** Action taken (if status is 'success') */\n\t\taction: z.string().nullable().optional(),\n\t\t/** Reason for skip/cancel/error */\n\t\treason: z.string().nullable().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// =========================================================================\n\t// TIMELINE ITEM UPDATE EVENTS\n\t// For updating timeline items with new parts or state changes\n\t// =========================================================================\n\n\t// Emitted when an entire timeline item is updated (e.g., parts added)\n\ttimelineItemUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\n\t// Emitted for granular part updates (e.g., tool state changes)\n\ttimelineItemPartUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\ttimelineItemId: z.string(),\n\t\t/** Index of the part in the parts array */\n\t\tpartIndex: z.number(),\n\t\t/** The updated part data */\n\t\tpart: z.unknown(),\n\t}),\n\t// Web crawling events\n\tcrawlStarted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tdiscoveredPages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t\ttotalPagesCount: z.number(),\n\t}),\n\tcrawlProgress: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tstatus: z.enum([\"pending\", \"crawling\", \"completed\", \"failed\"]),\n\t\t\tsizeBytes: z.number().optional(),\n\t\t\terror: z.string().nullable().optional(),\n\t\t}),\n\t\tcompletedCount: z.number(),\n\t\ttotalCount: z.number(),\n\t}),\n\tcrawlCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tcrawledPagesCount: z.number(),\n\t\ttotalSizeBytes: z.number(),\n\t\tfailedPagesCount: z.number(),\n\t}),\n\tcrawlFailed: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\terror: z.string(),\n\t}),\n\t// Link source updated (for status changes, etc.)\n\tlinkSourceUpdated: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tstatus: z.enum([\"pending\", \"mapping\", \"crawling\", \"completed\", \"failed\"]),\n\t\tdiscoveredPagesCount: z.number().optional(),\n\t\tcrawledPagesCount: z.number().optional(),\n\t\ttotalSizeBytes: z.number().optional(),\n\t\terrorMessage: z.string().nullable().optional(),\n\t}),\n\t// Emitted after map phase with all discovered URLs (for real-time tree display)\n\tcrawlPagesDiscovered: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\tpath: z.string(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t}),\n\t// Emitted when each page completes scraping (for real-time updates)\n\tcrawlPageCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tsizeBytes: z.number(),\n\t\t\tknowledgeId: z.string(),\n\t\t}),\n\t}),\n\n\t// =========================================================================\n\t// AI TRAINING EVENTS\n\t// For knowledge base embedding generation and progress tracking\n\t// =========================================================================\n\n\t// Emitted when AI training starts\n\ttrainingStarted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t}),\n\n\t// Emitted for progress updates during AI training\n\ttrainingProgress: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\tprocessedItems: z.number(),\n\t\ttotalItems: z.number(),\n\t\tcurrentItem: z\n\t\t\t.object({\n\t\t\t\tid: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\ttype: z.enum([\"url\", \"faq\", \"article\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\tpercentage: z.number(),\n\t}),\n\n\t// Emitted when AI training completes successfully\n\ttrainingCompleted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t\ttotalChunks: z.number(),\n\t\tduration: z.number(), // milliseconds\n\t}),\n\n\t// Emitted when AI training fails\n\ttrainingFailed: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\terror: z.string(),\n\t}),\n} as const;\n\nexport type RealtimeEventType = keyof typeof realtimeSchema;\n\nexport type RealtimeEventPayload<T extends RealtimeEventType> = z.infer<\n\t(typeof realtimeSchema)[T]\n>;\n\nexport type RealtimeEvent<T extends RealtimeEventType> = {\n\ttype: T;\n\tpayload: RealtimeEventPayload<T>;\n};\n\nexport type AnyRealtimeEvent = {\n\t[K in RealtimeEventType]: RealtimeEvent<K>;\n}[RealtimeEventType];\n\nexport type RealtimeEventData<T extends RealtimeEventType> =\n\tRealtimeEventPayload<T>;\n\n/**\n * Validates an event against its schema\n */\nexport function validateRealtimeEvent<T extends RealtimeEventType>(\n\ttype: T,\n\tdata: unknown\n): RealtimeEventPayload<T> {\n\tconst schema = realtimeSchema[type];\n\treturn schema.parse(data) as RealtimeEventPayload<T>;\n}\n\n/**\n * Type guard to check if a string is a valid event type\n */\nexport function isValidEventType(type: unknown): type is RealtimeEventType {\n\treturn typeof type === \"string\" && type in realtimeSchema;\n}\n\nexport function getEventPayload<T extends RealtimeEventType>(\n\tevent: RealtimeEvent<T>\n): RealtimeEventPayload<T> {\n\treturn event.payload;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"realtime-events.js","names":[],"sources":["../src/realtime-events.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { visitorResponseSchema } from \"./api/visitor\";\nimport {\n\tConversationEventType,\n\tConversationStatus,\n\tConversationTimelineType,\n\tTimelineItemVisibility,\n} from \"./enums\";\nimport { conversationSchema } from \"./schemas\";\nimport { conversationHeaderSchema } from \"./trpc/conversation\";\n\nexport const baseRealtimeEvent = z.object({\n\twebsiteId: z.string(),\n\torganizationId: z.string(),\n\tvisitorId: z.string().nullable(),\n\tuserId: z.string().nullable(),\n});\n\n/**\n * Central event system for real-time communication\n * All WebSocket and Redis Pub/Sub events are defined here\n */\nexport const realtimeSchema = {\n\tuserConnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tuserDisconnected: baseRealtimeEvent.extend({\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorConnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tvisitorDisconnected: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tconnectionId: z.string(),\n\t}),\n\tuserPresenceUpdate: baseRealtimeEvent.extend({\n\t\tuserId: z.string(),\n\t\tstatus: z.enum([\"online\", \"away\", \"offline\"]),\n\t\tlastSeen: z.string(),\n\t}),\n\tconversationSeen: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tlastSeenAt: z.string(),\n\t\t/** The type of actor who marked the conversation as seen */\n\t\tactorType: z.enum([\"visitor\", \"user\", \"ai_agent\"]),\n\t\t/** The actor's ID (matches one of userId, visitorId, or aiAgentId based on actorType) */\n\t\tactorId: z.string(),\n\t}),\n\tconversationTyping: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tisTyping: z.boolean(),\n\t\tvisitorPreview: z.string().max(2000).nullable().optional(),\n\t}),\n\ttimelineItemCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\tconversationCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tconversation: conversationSchema,\n\t\theader: conversationHeaderSchema,\n\t}),\n\tvisitorIdentified: baseRealtimeEvent.extend({\n\t\tvisitorId: z.string(),\n\t\tvisitor: visitorResponseSchema,\n\t}),\n\tconversationEventCreated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string().nullable(),\n\t\tevent: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationEventType.ASSIGNED,\n\t\t\t\tConversationEventType.UNASSIGNED,\n\t\t\t\tConversationEventType.PARTICIPANT_REQUESTED,\n\t\t\t\tConversationEventType.PARTICIPANT_JOINED,\n\t\t\t\tConversationEventType.PARTICIPANT_LEFT,\n\t\t\t\tConversationEventType.STATUS_CHANGED,\n\t\t\t\tConversationEventType.PRIORITY_CHANGED,\n\t\t\t\tConversationEventType.TAG_ADDED,\n\t\t\t\tConversationEventType.TAG_REMOVED,\n\t\t\t\tConversationEventType.RESOLVED,\n\t\t\t\tConversationEventType.REOPENED,\n\t\t\t\tConversationEventType.VISITOR_BLOCKED,\n\t\t\t\tConversationEventType.VISITOR_UNBLOCKED,\n\t\t\t\tConversationEventType.VISITOR_IDENTIFIED,\n\t\t\t\tConversationEventType.AI_PAUSED,\n\t\t\t\tConversationEventType.AI_RESUMED,\n\t\t\t]),\n\t\t\tactorUserId: z.string().nullable(),\n\t\t\tactorAiAgentId: z.string().nullable(),\n\t\t\ttargetUserId: z.string().nullable(),\n\t\t\ttargetAiAgentId: z.string().nullable(),\n\t\t\tmessage: z.string().nullable(),\n\t\t\tmetadata: z.record(z.string(), z.unknown()).nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tupdatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t}),\n\t}),\n\t// Conversation updated (title, sentiment, escalation status changes, status changes)\n\tconversationUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\tupdates: z.object({\n\t\t\ttitle: z.string().nullable().optional(),\n\t\t\tsentiment: z\n\t\t\t\t.enum([\"positive\", \"negative\", \"neutral\"])\n\t\t\t\t.nullable()\n\t\t\t\t.optional(),\n\t\t\tsentimentConfidence: z.number().nullable().optional(),\n\t\t\tescalatedAt: z.string().nullable().optional(),\n\t\t\tescalationReason: z.string().nullable().optional(),\n\t\t\tstatus: z\n\t\t\t\t.enum([\n\t\t\t\t\tConversationStatus.OPEN,\n\t\t\t\t\tConversationStatus.RESOLVED,\n\t\t\t\t\tConversationStatus.SPAM,\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t\tpriority: z.enum([\"low\", \"normal\", \"high\", \"urgent\"]).optional(),\n\t\t\tresolvedAt: z.string().nullable().optional(),\n\t\t\tresolvedByUserId: z.string().nullable().optional(),\n\t\t\tresolvedByAiAgentId: z.string().nullable().optional(),\n\t\t\tresolutionTime: z.number().nullable().optional(),\n\t\t\tdeletedAt: z.string().nullable().optional(),\n\t\t\taiPausedUntil: z.string().nullable().optional(),\n\t\t\tviewIds: z.array(z.string()).optional(),\n\t\t}),\n\t\taiAgentId: z.string().nullable(),\n\t}),\n\n\t// =========================================================================\n\t// AI AGENT PROCESSING EVENTS\n\t// For progressive UI updates during AI agent responses\n\t//\n\t// AUDIENCE FIELD:\n\t// - 'all': Send to both dashboard and widget\n\t// - 'dashboard': Send only to dashboard (human agents)\n\t//\n\t// Widget (visitor) connections only receive events with audience='all'\n\t// =========================================================================\n\n\t// Emitted when AI agent starts processing a message\n\taiAgentProcessingStarted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** ID of the trigger message that started this workflow */\n\t\ttriggerMessageId: z.string(),\n\t\t/** Initial phase of processing */\n\t\tphase: z.string().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"dashboard\"),\n\t}),\n\n\t// Emitted when AI agent makes a decision about whether to act\n\taiAgentDecisionMade: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether the AI decided to take action */\n\t\tshouldAct: z.boolean(),\n\t\t/** Human-readable reason for the decision */\n\t\treason: z.string(),\n\t\t/** Response mode: how the AI is responding */\n\t\tmode: z.enum([\n\t\t\t\"respond_to_visitor\",\n\t\t\t\"respond_to_command\",\n\t\t\t\"background_only\",\n\t\t]),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]),\n\t}),\n\n\t// Emitted for progress updates during AI agent processing\n\taiAgentProcessingProgress: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Current phase: 'thinking', 'searching', 'tool-executing', 'generating', etc. */\n\t\tphase: z.string(),\n\t\t/** Human-readable message for display (widget sees this) */\n\t\tmessage: z.string().nullable(),\n\t\t/** Tool information when phase is tool-related */\n\t\ttool: z\n\t\t\t.object({\n\t\t\t\ttoolCallId: z.string(),\n\t\t\t\ttoolName: z.string(),\n\t\t\t\t/** Tool state: partial (executing), result (success), error (failed) */\n\t\t\t\tstate: z.enum([\"partial\", \"result\", \"error\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// Emitted when AI agent finishes processing\n\taiAgentProcessingCompleted: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\taiAgentId: z.string(),\n\t\tworkflowRunId: z.string(),\n\t\t/** Whether processing completed successfully, was skipped, cancelled, or errored */\n\t\tstatus: z.enum([\"success\", \"skipped\", \"cancelled\", \"error\"]),\n\t\t/** Action taken (if status is 'success') */\n\t\taction: z.string().nullable().optional(),\n\t\t/** Reason for skip/cancel/error */\n\t\treason: z.string().nullable().optional(),\n\t\t/** Audience: 'all' = everyone, 'dashboard' = team only */\n\t\taudience: z.enum([\"all\", \"dashboard\"]).default(\"all\"),\n\t}),\n\n\t// =========================================================================\n\t// TIMELINE ITEM UPDATE EVENTS\n\t// For updating timeline items with new parts or state changes\n\t// =========================================================================\n\n\t// Emitted when an entire timeline item is updated (e.g., parts added)\n\ttimelineItemUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\titem: z.object({\n\t\t\tid: z.string(),\n\t\t\tconversationId: z.string(),\n\t\t\torganizationId: z.string(),\n\t\t\tvisibility: z.enum([\n\t\t\t\tTimelineItemVisibility.PUBLIC,\n\t\t\t\tTimelineItemVisibility.PRIVATE,\n\t\t\t]),\n\t\t\ttype: z.enum([\n\t\t\t\tConversationTimelineType.MESSAGE,\n\t\t\t\tConversationTimelineType.EVENT,\n\t\t\t\tConversationTimelineType.IDENTIFICATION,\n\t\t\t\tConversationTimelineType.TOOL,\n\t\t\t]),\n\t\t\ttext: z.string().nullable(),\n\t\t\tparts: z.array(z.unknown()),\n\t\t\tuserId: z.string().nullable(),\n\t\t\tvisitorId: z.string().nullable(),\n\t\t\taiAgentId: z.string().nullable(),\n\t\t\tcreatedAt: z.string(),\n\t\t\tdeletedAt: z.string().nullable(),\n\t\t\ttool: z.string().nullable().optional(),\n\t\t}),\n\t}),\n\n\t// Emitted for granular part updates (e.g., tool state changes)\n\ttimelineItemPartUpdated: baseRealtimeEvent.extend({\n\t\tconversationId: z.string(),\n\t\ttimelineItemId: z.string(),\n\t\t/** Index of the part in the parts array */\n\t\tpartIndex: z.number(),\n\t\t/** The updated part data */\n\t\tpart: z.unknown(),\n\t}),\n\t// Web crawling events\n\tcrawlStarted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tdiscoveredPages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t\ttotalPagesCount: z.number(),\n\t}),\n\tcrawlProgress: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tstatus: z.enum([\"pending\", \"crawling\", \"completed\", \"failed\"]),\n\t\t\tsizeBytes: z.number().optional(),\n\t\t\terror: z.string().nullable().optional(),\n\t\t}),\n\t\tcompletedCount: z.number(),\n\t\ttotalCount: z.number(),\n\t}),\n\tcrawlCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\tcrawledPagesCount: z.number(),\n\t\ttotalSizeBytes: z.number(),\n\t\tfailedPagesCount: z.number(),\n\t}),\n\tcrawlFailed: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\turl: z.string(),\n\t\terror: z.string(),\n\t}),\n\t// Link source updated (for status changes, etc.)\n\tlinkSourceUpdated: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tstatus: z.enum([\"pending\", \"mapping\", \"crawling\", \"completed\", \"failed\"]),\n\t\tdiscoveredPagesCount: z.number().optional(),\n\t\tcrawledPagesCount: z.number().optional(),\n\t\ttotalSizeBytes: z.number().optional(),\n\t\terrorMessage: z.string().nullable().optional(),\n\t}),\n\t// Emitted after map phase with all discovered URLs (for real-time tree display)\n\tcrawlPagesDiscovered: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpages: z.array(\n\t\t\tz.object({\n\t\t\t\turl: z.string(),\n\t\t\t\tpath: z.string(),\n\t\t\t\tdepth: z.number(),\n\t\t\t})\n\t\t),\n\t}),\n\t// Emitted when each page completes scraping (for real-time updates)\n\tcrawlPageCompleted: baseRealtimeEvent.extend({\n\t\tlinkSourceId: z.string(),\n\t\tpage: z.object({\n\t\t\turl: z.string(),\n\t\t\ttitle: z.string().nullable(),\n\t\t\tsizeBytes: z.number(),\n\t\t\tknowledgeId: z.string(),\n\t\t}),\n\t}),\n\n\t// =========================================================================\n\t// AI TRAINING EVENTS\n\t// For knowledge base embedding generation and progress tracking\n\t// =========================================================================\n\n\t// Emitted when AI training starts\n\ttrainingStarted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t}),\n\n\t// Emitted for progress updates during AI training\n\ttrainingProgress: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\tprocessedItems: z.number(),\n\t\ttotalItems: z.number(),\n\t\tcurrentItem: z\n\t\t\t.object({\n\t\t\t\tid: z.string(),\n\t\t\t\ttitle: z.string().nullable(),\n\t\t\t\ttype: z.enum([\"url\", \"faq\", \"article\"]),\n\t\t\t})\n\t\t\t.optional(),\n\t\tpercentage: z.number(),\n\t}),\n\n\t// Emitted when AI training completes successfully\n\ttrainingCompleted: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\ttotalItems: z.number(),\n\t\ttotalChunks: z.number(),\n\t\tduration: z.number(), // milliseconds\n\t}),\n\n\t// Emitted when AI training fails\n\ttrainingFailed: baseRealtimeEvent.extend({\n\t\taiAgentId: z.string(),\n\t\terror: z.string(),\n\t}),\n} as const;\n\nexport type RealtimeEventType = keyof typeof realtimeSchema;\n\nexport type RealtimeEventPayload<T extends RealtimeEventType> = z.infer<\n\t(typeof realtimeSchema)[T]\n>;\n\nexport type RealtimeEvent<T extends RealtimeEventType> = {\n\ttype: T;\n\tpayload: RealtimeEventPayload<T>;\n};\n\nexport type AnyRealtimeEvent = {\n\t[K in RealtimeEventType]: RealtimeEvent<K>;\n}[RealtimeEventType];\n\nexport type RealtimeEventData<T extends RealtimeEventType> =\n\tRealtimeEventPayload<T>;\n\n/**\n * Validates an event against its schema\n */\nexport function validateRealtimeEvent<T extends RealtimeEventType>(\n\ttype: T,\n\tdata: unknown\n): RealtimeEventPayload<T> {\n\tconst schema = realtimeSchema[type];\n\treturn schema.parse(data) as RealtimeEventPayload<T>;\n}\n\n/**\n * Type guard to check if a string is a valid event type\n */\nexport function isValidEventType(type: unknown): type is RealtimeEventType {\n\treturn typeof type === \"string\" && type in realtimeSchema;\n}\n\nexport function getEventPayload<T extends RealtimeEventType>(\n\tevent: RealtimeEvent<T>\n): RealtimeEventPayload<T> {\n\treturn event.payload;\n}\n"],"mappings":"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"}
|
package/schemas.d.ts
CHANGED
|
@@ -230,6 +230,8 @@ declare const conversationSchema: z.ZodObject<{
|
|
|
230
230
|
visitor_blocked: "visitor_blocked";
|
|
231
231
|
visitor_unblocked: "visitor_unblocked";
|
|
232
232
|
visitor_identified: "visitor_identified";
|
|
233
|
+
ai_paused: "ai_paused";
|
|
234
|
+
ai_resumed: "ai_resumed";
|
|
233
235
|
}>;
|
|
234
236
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
235
237
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -239,8 +241,8 @@ declare const conversationSchema: z.ZodObject<{
|
|
|
239
241
|
}, z.core.$strip>, z.ZodObject<{
|
|
240
242
|
type: z.ZodLiteral<"metadata">;
|
|
241
243
|
source: z.ZodEnum<{
|
|
242
|
-
widget: "widget";
|
|
243
244
|
email: "email";
|
|
245
|
+
widget: "widget";
|
|
244
246
|
api: "api";
|
|
245
247
|
}>;
|
|
246
248
|
}, z.core.$strip>]>>;
|
package/schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","names":[],"sources":["../src/schemas.ts"],"sourcesContent":[],"mappings":";;;cAIa,YAAU,CAAA,CAAA;;EAAV,IAAA,aAUX;;;;;;;;;KAEU,SAAA,GAAY,CAAA,CAAE,aAAa;cAE1B,oBAAkB,CAAA,CAAA;;;;EAdR,SAAA,aAAA;EAAA,SAAA,aAAA;EAYX,SAAA,aAAS;EAER,MAAA,cAAA,UAmBX,CAAA
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","names":[],"sources":["../src/schemas.ts"],"sourcesContent":[],"mappings":";;;cAIa,YAAU,CAAA,CAAA;;EAAV,IAAA,aAUX;;;;;;;;;KAEU,SAAA,GAAY,CAAA,CAAE,aAAa;cAE1B,oBAAkB,CAAA,CAAA;;;;EAdR,SAAA,aAAA;EAAA,SAAA,aAAA;EAYX,SAAA,aAAS;EAER,MAAA,cAAA,UAmBX,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAnB6B,KAqBnB,YAAA,GAAe,CAAA,CAAE,KArBE,CAAA,OAqBW,kBArBX,CAAA;AAAA,cAuBlB,sBAvBkB,EAuBI,CAAA,CAAA,SAvBJ,CAAA;EAqBnB,EAAA,aAAY;EAEX,cAAA,aAUX;;;;;;;;;KAEU,gBAAA,GAAmB,CAAA,CAAE,aAAa"}
|
|
@@ -5,9 +5,26 @@ declare const TOOL_TIMELINE_LOG_TYPE: {
|
|
|
5
5
|
readonly DECISION: "decision";
|
|
6
6
|
};
|
|
7
7
|
type ToolTimelineLogType = (typeof TOOL_TIMELINE_LOG_TYPE)[keyof typeof TOOL_TIMELINE_LOG_TYPE];
|
|
8
|
-
|
|
8
|
+
type WidgetToolActivityPolicy = {
|
|
9
|
+
timeline: boolean;
|
|
10
|
+
liveStatus: boolean;
|
|
11
|
+
defaultProgressMessage?: string | null;
|
|
12
|
+
};
|
|
13
|
+
declare const TOOL_WIDGET_ACTIVITY_REGISTRY: {
|
|
14
|
+
readonly searchKnowledgeBase: {
|
|
15
|
+
readonly timeline: true;
|
|
16
|
+
readonly liveStatus: true;
|
|
17
|
+
readonly defaultProgressMessage: "Searching knowledge base...";
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
declare const TOOL_TIMELINE_CONVERSATION_ALLOWLIST: readonly string[];
|
|
21
|
+
declare function getWidgetToolActivityPolicy(toolName: string): WidgetToolActivityPolicy | null;
|
|
22
|
+
declare function isWidgetVisibleTool(toolName: string): boolean;
|
|
23
|
+
declare function isWidgetTimelineTool(toolName: string): boolean;
|
|
24
|
+
declare function isWidgetLiveStatusTool(toolName: string): boolean;
|
|
25
|
+
declare function getWidgetToolDefaultProgressMessage(toolName: string): string | null;
|
|
9
26
|
declare function isConversationVisibleTool(toolName: string): boolean;
|
|
10
27
|
declare function getToolLogType(toolName: string): ToolTimelineLogType;
|
|
11
28
|
//#endregion
|
|
12
|
-
export { TOOL_TIMELINE_CONVERSATION_ALLOWLIST, TOOL_TIMELINE_LOG_TYPE, ToolTimelineLogType, getToolLogType, isConversationVisibleTool };
|
|
29
|
+
export { TOOL_TIMELINE_CONVERSATION_ALLOWLIST, TOOL_TIMELINE_LOG_TYPE, TOOL_WIDGET_ACTIVITY_REGISTRY, ToolTimelineLogType, WidgetToolActivityPolicy, getToolLogType, getWidgetToolActivityPolicy, getWidgetToolDefaultProgressMessage, isConversationVisibleTool, isWidgetLiveStatusTool, isWidgetTimelineTool, isWidgetVisibleTool };
|
|
13
30
|
//# sourceMappingURL=tool-timeline-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-timeline-policy.d.ts","names":[],"sources":["../src/tool-timeline-policy.ts"],"sourcesContent":[],"mappings":";cAAa;EAAA,SAAA,eAAA,EAIH,iBAAA;EAEE,SAAA,GAAA,EAAA,KAAA;
|
|
1
|
+
{"version":3,"file":"tool-timeline-policy.d.ts","names":[],"sources":["../src/tool-timeline-policy.ts"],"sourcesContent":[],"mappings":";cAAa;EAAA,SAAA,eAAA,EAIH,iBAAA;EAEE,SAAA,GAAA,EAAA,KAAA;EAGA,SAAA,QAAA,EAAA,UAAwB;AAMpC,CAAA;AAmBa,KA5BD,mBAAA,GA4BC,CAAA,OA3BJ,sBA6Ba,CAAA,CAAA,MAAA,OA7BwB,sBA6BxB,CAAA;AAEN,KA7BJ,wBAAA,GA6B+B;EAM3B,QAAA,EAAA,OAAA;EAIA,UAAA,EAAA,OAAA;EAIA,sBAAA,CAAA,EAAsB,MAAA,GAAA,IAAA;AAItC,CAAA;AAMgB,cA/CH,6BA+C4B,EAAA;EAIzB,SAAA,mBAAc,EAAoB;;;;;;cAhCrC;iBAIG,2BAAA,oBAEb;iBAIa,mBAAA;iBAIA,oBAAA;iBAIA,sBAAA;iBAIA,mCAAA;iBAMA,yBAAA;iBAIA,cAAA,oBAAkC"}
|
package/tool-timeline-policy.js
CHANGED
|
@@ -4,14 +4,37 @@ const TOOL_TIMELINE_LOG_TYPE = {
|
|
|
4
4
|
LOG: "log",
|
|
5
5
|
DECISION: "decision"
|
|
6
6
|
};
|
|
7
|
-
const
|
|
7
|
+
const TOOL_WIDGET_ACTIVITY_REGISTRY = { searchKnowledgeBase: {
|
|
8
|
+
timeline: true,
|
|
9
|
+
liveStatus: true,
|
|
10
|
+
defaultProgressMessage: "Searching knowledge base..."
|
|
11
|
+
} };
|
|
12
|
+
const DASHBOARD_CONVERSATION_VISIBLE_TOOL_NAMES = new Set([
|
|
8
13
|
"searchKnowledgeBase",
|
|
9
14
|
"updateConversationTitle",
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
"setConversationTitle",
|
|
16
|
+
"updateSentiment",
|
|
17
|
+
"setPriority"
|
|
18
|
+
]);
|
|
19
|
+
const WIDGET_TOOL_ACTIVITY_POLICIES = TOOL_WIDGET_ACTIVITY_REGISTRY;
|
|
20
|
+
const TOOL_TIMELINE_CONVERSATION_ALLOWLIST = Object.freeze(Object.keys(WIDGET_TOOL_ACTIVITY_POLICIES));
|
|
21
|
+
function getWidgetToolActivityPolicy(toolName) {
|
|
22
|
+
return WIDGET_TOOL_ACTIVITY_POLICIES[toolName] ?? null;
|
|
23
|
+
}
|
|
24
|
+
function isWidgetVisibleTool(toolName) {
|
|
25
|
+
return Boolean(getWidgetToolActivityPolicy(toolName));
|
|
26
|
+
}
|
|
27
|
+
function isWidgetTimelineTool(toolName) {
|
|
28
|
+
return getWidgetToolActivityPolicy(toolName)?.timeline === true;
|
|
29
|
+
}
|
|
30
|
+
function isWidgetLiveStatusTool(toolName) {
|
|
31
|
+
return getWidgetToolActivityPolicy(toolName)?.liveStatus === true;
|
|
32
|
+
}
|
|
33
|
+
function getWidgetToolDefaultProgressMessage(toolName) {
|
|
34
|
+
return getWidgetToolActivityPolicy(toolName)?.defaultProgressMessage ?? null;
|
|
35
|
+
}
|
|
13
36
|
function isConversationVisibleTool(toolName) {
|
|
14
|
-
return
|
|
37
|
+
return DASHBOARD_CONVERSATION_VISIBLE_TOOL_NAMES.has(toolName);
|
|
15
38
|
}
|
|
16
39
|
function getToolLogType(toolName) {
|
|
17
40
|
if (toolName === "aiDecision") return TOOL_TIMELINE_LOG_TYPE.DECISION;
|
|
@@ -20,5 +43,5 @@ function getToolLogType(toolName) {
|
|
|
20
43
|
}
|
|
21
44
|
|
|
22
45
|
//#endregion
|
|
23
|
-
export { TOOL_TIMELINE_CONVERSATION_ALLOWLIST, TOOL_TIMELINE_LOG_TYPE, getToolLogType, isConversationVisibleTool };
|
|
46
|
+
export { TOOL_TIMELINE_CONVERSATION_ALLOWLIST, TOOL_TIMELINE_LOG_TYPE, TOOL_WIDGET_ACTIVITY_REGISTRY, getToolLogType, getWidgetToolActivityPolicy, getWidgetToolDefaultProgressMessage, isConversationVisibleTool, isWidgetLiveStatusTool, isWidgetTimelineTool, isWidgetVisibleTool };
|
|
24
47
|
//# sourceMappingURL=tool-timeline-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-timeline-policy.js","names":[],"sources":["../src/tool-timeline-policy.ts"],"sourcesContent":["export const TOOL_TIMELINE_LOG_TYPE = {\n\tCUSTOMER_FACING: \"customer_facing\",\n\tLOG: \"log\",\n\tDECISION: \"decision\",\n} as const;\n\nexport type ToolTimelineLogType =\n\t(typeof TOOL_TIMELINE_LOG_TYPE)[keyof typeof TOOL_TIMELINE_LOG_TYPE];\n\nexport const
|
|
1
|
+
{"version":3,"file":"tool-timeline-policy.js","names":["WIDGET_TOOL_ACTIVITY_POLICIES: Record<string, WidgetToolActivityPolicy>"],"sources":["../src/tool-timeline-policy.ts"],"sourcesContent":["export const TOOL_TIMELINE_LOG_TYPE = {\n\tCUSTOMER_FACING: \"customer_facing\",\n\tLOG: \"log\",\n\tDECISION: \"decision\",\n} as const;\n\nexport type ToolTimelineLogType =\n\t(typeof TOOL_TIMELINE_LOG_TYPE)[keyof typeof TOOL_TIMELINE_LOG_TYPE];\n\nexport type WidgetToolActivityPolicy = {\n\ttimeline: boolean;\n\tliveStatus: boolean;\n\tdefaultProgressMessage?: string | null;\n};\n\nexport const TOOL_WIDGET_ACTIVITY_REGISTRY = {\n\tsearchKnowledgeBase: {\n\t\ttimeline: true,\n\t\tliveStatus: true,\n\t\tdefaultProgressMessage: \"Searching knowledge base...\",\n\t},\n} as const satisfies Record<string, WidgetToolActivityPolicy>;\n\nconst DASHBOARD_CONVERSATION_VISIBLE_TOOL_NAMES = new Set([\n\t\"searchKnowledgeBase\",\n\t\"updateConversationTitle\",\n\t\"setConversationTitle\",\n\t\"updateSentiment\",\n\t\"setPriority\",\n]);\n\nconst WIDGET_TOOL_ACTIVITY_POLICIES: Record<string, WidgetToolActivityPolicy> =\n\tTOOL_WIDGET_ACTIVITY_REGISTRY;\n\nexport const TOOL_TIMELINE_CONVERSATION_ALLOWLIST = Object.freeze(\n\tObject.keys(WIDGET_TOOL_ACTIVITY_POLICIES)\n) as readonly string[];\n\nexport function getWidgetToolActivityPolicy(\n\ttoolName: string\n): WidgetToolActivityPolicy | null {\n\treturn WIDGET_TOOL_ACTIVITY_POLICIES[toolName] ?? null;\n}\n\nexport function isWidgetVisibleTool(toolName: string): boolean {\n\treturn Boolean(getWidgetToolActivityPolicy(toolName));\n}\n\nexport function isWidgetTimelineTool(toolName: string): boolean {\n\treturn getWidgetToolActivityPolicy(toolName)?.timeline === true;\n}\n\nexport function isWidgetLiveStatusTool(toolName: string): boolean {\n\treturn getWidgetToolActivityPolicy(toolName)?.liveStatus === true;\n}\n\nexport function getWidgetToolDefaultProgressMessage(\n\ttoolName: string\n): string | null {\n\treturn getWidgetToolActivityPolicy(toolName)?.defaultProgressMessage ?? null;\n}\n\nexport function isConversationVisibleTool(toolName: string): boolean {\n\treturn DASHBOARD_CONVERSATION_VISIBLE_TOOL_NAMES.has(toolName);\n}\n\nexport function getToolLogType(toolName: string): ToolTimelineLogType {\n\tif (toolName === \"aiDecision\") {\n\t\treturn TOOL_TIMELINE_LOG_TYPE.DECISION;\n\t}\n\n\tif (isConversationVisibleTool(toolName)) {\n\t\treturn TOOL_TIMELINE_LOG_TYPE.CUSTOMER_FACING;\n\t}\n\n\treturn TOOL_TIMELINE_LOG_TYPE.LOG;\n}\n"],"mappings":";AAAA,MAAa,yBAAyB;CACrC,iBAAiB;CACjB,KAAK;CACL,UAAU;CACV;AAWD,MAAa,gCAAgC,EAC5C,qBAAqB;CACpB,UAAU;CACV,YAAY;CACZ,wBAAwB;CACxB,EACD;AAED,MAAM,4CAA4C,IAAI,IAAI;CACzD;CACA;CACA;CACA;CACA;CACA,CAAC;AAEF,MAAMA,gCACL;AAED,MAAa,uCAAuC,OAAO,OAC1D,OAAO,KAAK,8BAA8B,CAC1C;AAED,SAAgB,4BACf,UACkC;AAClC,QAAO,8BAA8B,aAAa;;AAGnD,SAAgB,oBAAoB,UAA2B;AAC9D,QAAO,QAAQ,4BAA4B,SAAS,CAAC;;AAGtD,SAAgB,qBAAqB,UAA2B;AAC/D,QAAO,4BAA4B,SAAS,EAAE,aAAa;;AAG5D,SAAgB,uBAAuB,UAA2B;AACjE,QAAO,4BAA4B,SAAS,EAAE,eAAe;;AAG9D,SAAgB,oCACf,UACgB;AAChB,QAAO,4BAA4B,SAAS,EAAE,0BAA0B;;AAGzE,SAAgB,0BAA0B,UAA2B;AACpE,QAAO,0CAA0C,IAAI,SAAS;;AAG/D,SAAgB,eAAe,UAAuC;AACrE,KAAI,aAAa,aAChB,QAAO,uBAAuB;AAG/B,KAAI,0BAA0B,SAAS,CACtC,QAAO,uBAAuB;AAG/B,QAAO,uBAAuB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/trpc/conversation-hard-limit.d.ts
|
|
2
|
+
declare const DASHBOARD_CONVERSATION_LOCK_REASON: "conversation_limit";
|
|
3
|
+
type DashboardConversationLockReason = typeof DASHBOARD_CONVERSATION_LOCK_REASON;
|
|
4
|
+
type ConversationHardLimitCutoff = {
|
|
5
|
+
id: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
};
|
|
8
|
+
type DashboardLockableConversation = {
|
|
9
|
+
id: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
title: string | null;
|
|
12
|
+
lastTimelineItem: unknown | null;
|
|
13
|
+
lastMessageTimelineItem: unknown | null;
|
|
14
|
+
lastMessageAt: string | null;
|
|
15
|
+
dashboardLocked?: boolean;
|
|
16
|
+
dashboardLockReason?: DashboardConversationLockReason | null;
|
|
17
|
+
};
|
|
18
|
+
type DashboardLockMetadata = {
|
|
19
|
+
dashboardLocked: boolean;
|
|
20
|
+
dashboardLockReason: DashboardConversationLockReason | null;
|
|
21
|
+
};
|
|
22
|
+
declare function isConversationAfterHardLimitCutoff(value: Pick<DashboardLockableConversation, "createdAt" | "id">, cutoff: ConversationHardLimitCutoff | null): boolean;
|
|
23
|
+
declare function applyDashboardConversationHardLimitLock<T extends DashboardLockableConversation>(params: {
|
|
24
|
+
conversation: T;
|
|
25
|
+
cutoff: ConversationHardLimitCutoff | null;
|
|
26
|
+
}): T & DashboardLockMetadata;
|
|
27
|
+
declare function ensureDashboardConversationLockRedaction<T extends DashboardLockableConversation>(conversation: T): T & DashboardLockMetadata;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { ConversationHardLimitCutoff, DASHBOARD_CONVERSATION_LOCK_REASON, DashboardConversationLockReason, DashboardLockableConversation, applyDashboardConversationHardLimitLock, ensureDashboardConversationLockRedaction, isConversationAfterHardLimitCutoff };
|
|
30
|
+
//# sourceMappingURL=conversation-hard-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-hard-limit.d.ts","names":[],"sources":["../../src/trpc/conversation-hard-limit.ts"],"sourcesContent":[],"mappings":";cAAa;AAAA,KAED,+BAAA,GAFmE,OAGvE,kCAHuE;AAEnE,KAGA,2BAAA,GAH+B;EAG/B,EAAA,EAAA,MAAA;EAKA,SAAA,EAAA,MAAA;AASV,CAAA;AAOc,KAhBJ,6BAAA,GAgBsC;EACrC,EAAA,EAAA,MAAA;EAAL,SAAA,EAAA,MAAA;EACC,KAAA,EAAA,MAAA,GAAA,IAAA;EAA2B,gBAAA,EAAA,OAAA,GAAA,IAAA;EAiBpB,uBAAA,EAAA,OAAA,GAAA,IAAA;EACL,aAAA,EAAA,MAAA,GAAA,IAAA;EAEI,eAAA,CAAA,EAAA,OAAA;EACN,mBAAA,CAAA,EA/Bc,+BA+Bd,GAAA,IAAA;CACL;KA7BC,qBAAA,GA6BG;EAAqB,eAAA,EAAA,OAAA;EAsBb,mBAAA,EAjDM,+BAiDkC,GAAA,IAAA;CAC7C;AACK,iBAhDA,kCAAA,CAgDA,KAAA,EA/CR,IA+CQ,CA/CH,6BA+CG,EAAA,WAAA,GAAA,IAAA,CAAA,EAAA,MAAA,EA9CP,2BA8CO,GAAA,IAAA,CAAA,EAAA,OAAA;AAAI,iBA7BJ,uCA6BI,CAAA,UA5BT,6BA4BS,CAAA,CAAA,MAAA,EAAA;EAAI,YAAA,EA1BT,CA0BS;EAAqB,MAAA,EAzBpC,2BAyBoC,GAAA,IAAA;IAxBzC,IAAI;iBAsBQ,mDACL,6CACK,IAAI,IAAI"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/trpc/conversation-hard-limit.ts
|
|
2
|
+
const DASHBOARD_CONVERSATION_LOCK_REASON = "conversation_limit";
|
|
3
|
+
function isConversationAfterHardLimitCutoff(value, cutoff) {
|
|
4
|
+
if (!cutoff) return false;
|
|
5
|
+
if (value.createdAt > cutoff.createdAt) return true;
|
|
6
|
+
if (value.createdAt < cutoff.createdAt) return false;
|
|
7
|
+
return value.id > cutoff.id;
|
|
8
|
+
}
|
|
9
|
+
function applyDashboardConversationHardLimitLock(params) {
|
|
10
|
+
const { conversation, cutoff } = params;
|
|
11
|
+
if (!isConversationAfterHardLimitCutoff(conversation, cutoff)) return {
|
|
12
|
+
...conversation,
|
|
13
|
+
dashboardLocked: false,
|
|
14
|
+
dashboardLockReason: null
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
...conversation,
|
|
18
|
+
lastTimelineItem: null,
|
|
19
|
+
lastMessageTimelineItem: null,
|
|
20
|
+
lastMessageAt: null,
|
|
21
|
+
dashboardLocked: true,
|
|
22
|
+
dashboardLockReason: DASHBOARD_CONVERSATION_LOCK_REASON
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function ensureDashboardConversationLockRedaction(conversation) {
|
|
26
|
+
if (!conversation.dashboardLocked) return {
|
|
27
|
+
...conversation,
|
|
28
|
+
dashboardLocked: false,
|
|
29
|
+
dashboardLockReason: null
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
...conversation,
|
|
33
|
+
lastTimelineItem: null,
|
|
34
|
+
lastMessageTimelineItem: null,
|
|
35
|
+
lastMessageAt: null,
|
|
36
|
+
dashboardLocked: true,
|
|
37
|
+
dashboardLockReason: conversation.dashboardLockReason ?? DASHBOARD_CONVERSATION_LOCK_REASON
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { DASHBOARD_CONVERSATION_LOCK_REASON, applyDashboardConversationHardLimitLock, ensureDashboardConversationLockRedaction, isConversationAfterHardLimitCutoff };
|
|
43
|
+
//# sourceMappingURL=conversation-hard-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-hard-limit.js","names":[],"sources":["../../src/trpc/conversation-hard-limit.ts"],"sourcesContent":["export const DASHBOARD_CONVERSATION_LOCK_REASON = \"conversation_limit\" as const;\n\nexport type DashboardConversationLockReason =\n\ttypeof DASHBOARD_CONVERSATION_LOCK_REASON;\n\nexport type ConversationHardLimitCutoff = {\n\tid: string;\n\tcreatedAt: string;\n};\n\nexport type DashboardLockableConversation = {\n\tid: string;\n\tcreatedAt: string;\n\ttitle: string | null;\n\tlastTimelineItem: unknown | null;\n\tlastMessageTimelineItem: unknown | null;\n\tlastMessageAt: string | null;\n\tdashboardLocked?: boolean;\n\tdashboardLockReason?: DashboardConversationLockReason | null;\n};\n\ntype DashboardLockMetadata = {\n\tdashboardLocked: boolean;\n\tdashboardLockReason: DashboardConversationLockReason | null;\n};\n\nexport function isConversationAfterHardLimitCutoff(\n\tvalue: Pick<DashboardLockableConversation, \"createdAt\" | \"id\">,\n\tcutoff: ConversationHardLimitCutoff | null\n): boolean {\n\tif (!cutoff) {\n\t\treturn false;\n\t}\n\n\tif (value.createdAt > cutoff.createdAt) {\n\t\treturn true;\n\t}\n\n\tif (value.createdAt < cutoff.createdAt) {\n\t\treturn false;\n\t}\n\n\treturn value.id > cutoff.id;\n}\n\nexport function applyDashboardConversationHardLimitLock<\n\tT extends DashboardLockableConversation,\n>(params: {\n\tconversation: T;\n\tcutoff: ConversationHardLimitCutoff | null;\n}): T & DashboardLockMetadata {\n\tconst { conversation, cutoff } = params;\n\tconst isLocked = isConversationAfterHardLimitCutoff(conversation, cutoff);\n\n\tif (!isLocked) {\n\t\treturn {\n\t\t\t...conversation,\n\t\t\tdashboardLocked: false,\n\t\t\tdashboardLockReason: null,\n\t\t};\n\t}\n\n\treturn {\n\t\t...conversation,\n\t\tlastTimelineItem: null,\n\t\tlastMessageTimelineItem: null,\n\t\tlastMessageAt: null,\n\t\tdashboardLocked: true,\n\t\tdashboardLockReason: DASHBOARD_CONVERSATION_LOCK_REASON,\n\t};\n}\n\nexport function ensureDashboardConversationLockRedaction<\n\tT extends DashboardLockableConversation,\n>(conversation: T): T & DashboardLockMetadata {\n\tif (!conversation.dashboardLocked) {\n\t\treturn {\n\t\t\t...conversation,\n\t\t\tdashboardLocked: false,\n\t\t\tdashboardLockReason: null,\n\t\t};\n\t}\n\n\treturn {\n\t\t...conversation,\n\t\tlastTimelineItem: null,\n\t\tlastMessageTimelineItem: null,\n\t\tlastMessageAt: null,\n\t\tdashboardLocked: true,\n\t\tdashboardLockReason:\n\t\t\tconversation.dashboardLockReason ?? DASHBOARD_CONVERSATION_LOCK_REASON,\n\t};\n}\n"],"mappings":";AAAA,MAAa,qCAAqC;AA0BlD,SAAgB,mCACf,OACA,QACU;AACV,KAAI,CAAC,OACJ,QAAO;AAGR,KAAI,MAAM,YAAY,OAAO,UAC5B,QAAO;AAGR,KAAI,MAAM,YAAY,OAAO,UAC5B,QAAO;AAGR,QAAO,MAAM,KAAK,OAAO;;AAG1B,SAAgB,wCAEd,QAG4B;CAC7B,MAAM,EAAE,cAAc,WAAW;AAGjC,KAAI,CAFa,mCAAmC,cAAc,OAAO,CAGxE,QAAO;EACN,GAAG;EACH,iBAAiB;EACjB,qBAAqB;EACrB;AAGF,QAAO;EACN,GAAG;EACH,kBAAkB;EAClB,yBAAyB;EACzB,eAAe;EACf,iBAAiB;EACjB,qBAAqB;EACrB;;AAGF,SAAgB,yCAEd,cAA4C;AAC7C,KAAI,CAAC,aAAa,gBACjB,QAAO;EACN,GAAG;EACH,iBAAiB;EACjB,qBAAqB;EACrB;AAGF,QAAO;EACN,GAAG;EACH,kBAAkB;EAClB,yBAAyB;EACzB,eAAe;EACf,iBAAiB;EACjB,qBACC,aAAa,uBAAuB;EACrC"}
|