@memberjunction/ng-conversations 2.128.0 → 2.130.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.
- package/dist/lib/components/attachment/image-viewer.component.d.ts +95 -0
- package/dist/lib/components/attachment/image-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/attachment/image-viewer.component.js +293 -0
- package/dist/lib/components/attachment/image-viewer.component.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +88 -26
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +542 -338
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +12 -3
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +68 -55
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +13 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +237 -119
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +102 -5
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.js +349 -21
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -1
- package/dist/lib/components/message/agent-response-form.component.d.ts +18 -0
- package/dist/lib/components/message/agent-response-form.component.d.ts.map +1 -1
- package/dist/lib/components/message/agent-response-form.component.js +149 -26
- package/dist/lib/components/message/agent-response-form.component.js.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
- package/dist/lib/components/message/conversation-message-rating.component.js +3 -2
- package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
- package/dist/lib/components/message/form-question.component.js +3 -3
- package/dist/lib/components/message/message-input-box.component.d.ts +29 -2
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +79 -12
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +60 -5
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +303 -119
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +41 -3
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +237 -106
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +7 -2
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +19 -4
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +7 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -1
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +28 -6
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +83 -10
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +290 -103
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +26 -25
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +7 -3
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +2 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.d.ts +23 -0
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
- package/dist/lib/services/active-tasks.service.js +91 -2
- package/dist/lib/services/active-tasks.service.js.map +1 -1
- package/dist/lib/services/agent-state.service.d.ts +2 -0
- package/dist/lib/services/agent-state.service.d.ts.map +1 -1
- package/dist/lib/services/agent-state.service.js +20 -3
- package/dist/lib/services/agent-state.service.js.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +38 -6
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +233 -71
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/conversation-attachment.service.d.ts +79 -0
- package/dist/lib/services/conversation-attachment.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-attachment.service.js +327 -0
- package/dist/lib/services/conversation-attachment.service.js.map +1 -0
- package/dist/lib/services/conversation-data.service.d.ts +15 -1
- package/dist/lib/services/conversation-data.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-data.service.js +23 -1
- package/dist/lib/services/conversation-data.service.js.map +1 -1
- package/dist/lib/services/conversation-streaming.service.d.ts +50 -1
- package/dist/lib/services/conversation-streaming.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-streaming.service.js +92 -4
- package/dist/lib/services/conversation-streaming.service.js.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.d.ts +16 -1
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
- package/dist/lib/services/mention-parser.service.js +30 -0
- package/dist/lib/services/mention-parser.service.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +17 -17
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { ConversationDetailAttachmentEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { MessageAttachment } from '../components/message/message-item.component';
|
|
4
|
+
import { PendingAttachment } from '../components/mention/mention-editor.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Service for managing conversation attachments.
|
|
8
|
+
* Handles loading, saving, and converting attachments between different formats.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ConversationAttachmentService {
|
|
11
|
+
constructor();
|
|
12
|
+
/**
|
|
13
|
+
* Load all attachments for a list of conversation detail IDs.
|
|
14
|
+
* Returns a map of ConversationDetailID -> MessageAttachment[]
|
|
15
|
+
*/
|
|
16
|
+
loadAttachmentsForMessages(conversationDetailIds: string[], contextUser?: UserInfo): Promise<Map<string, MessageAttachment[]>>;
|
|
17
|
+
/**
|
|
18
|
+
* Load attachments for a single message
|
|
19
|
+
*/
|
|
20
|
+
loadAttachmentsForMessage(conversationDetailId: string, contextUser?: UserInfo): Promise<MessageAttachment[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Save pending attachments to the database.
|
|
23
|
+
* Returns the saved attachment entities.
|
|
24
|
+
*
|
|
25
|
+
* @param conversationDetailId - ID of the conversation detail to attach to
|
|
26
|
+
* @param pendingAttachments - Array of pending attachments from the mention editor
|
|
27
|
+
* @param contextUser - User context for the operation
|
|
28
|
+
*/
|
|
29
|
+
saveAttachments(conversationDetailId: string, pendingAttachments: PendingAttachment[], contextUser?: UserInfo): Promise<ConversationDetailAttachmentEntity[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Create attachment reference tokens for message text.
|
|
32
|
+
* These tokens are stored in the Message field to reference attachments.
|
|
33
|
+
*/
|
|
34
|
+
createAttachmentReferences(attachments: ConversationDetailAttachmentEntity[]): string;
|
|
35
|
+
/**
|
|
36
|
+
* Convert a database entity to a MessageAttachment for display
|
|
37
|
+
*/
|
|
38
|
+
private convertToMessageAttachment;
|
|
39
|
+
/**
|
|
40
|
+
* Get the AttachmentType from a modality ID
|
|
41
|
+
*/
|
|
42
|
+
private getAttachmentTypeFromModality;
|
|
43
|
+
/**
|
|
44
|
+
* Get the modality ID for an attachment type
|
|
45
|
+
*/
|
|
46
|
+
private getModalityIdForType;
|
|
47
|
+
/**
|
|
48
|
+
* Extract base64 data from a data URL
|
|
49
|
+
*/
|
|
50
|
+
private extractBase64FromDataUrl;
|
|
51
|
+
/**
|
|
52
|
+
* Create a thumbnail from an image file.
|
|
53
|
+
* Returns a base64 data URL of the thumbnail.
|
|
54
|
+
*/
|
|
55
|
+
createThumbnail(file: File, maxSize?: number): Promise<string | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Get image dimensions from a file
|
|
58
|
+
*/
|
|
59
|
+
getImageDimensions(file: File): Promise<{
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
} | null>;
|
|
63
|
+
/**
|
|
64
|
+
* Process a file and create a PendingAttachment.
|
|
65
|
+
* This creates the data structure needed for the mention editor component.
|
|
66
|
+
*/
|
|
67
|
+
processFile(file: File): Promise<PendingAttachment>;
|
|
68
|
+
/**
|
|
69
|
+
* Convert a file to a data URL
|
|
70
|
+
*/
|
|
71
|
+
private fileToDataUrl;
|
|
72
|
+
/**
|
|
73
|
+
* Generate a temporary ID for pending attachments
|
|
74
|
+
*/
|
|
75
|
+
private generateTempId;
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ConversationAttachmentService, never>;
|
|
77
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ConversationAttachmentService>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=conversation-attachment.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-attachment.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-attachment.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACL,kCAAkC,EAEnC,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;;AAGnF;;;GAGG;AACH,qBAGa,6BAA6B;;IAGxC;;;OAGG;IACG,0BAA0B,CAC9B,qBAAqB,EAAE,MAAM,EAAE,EAC/B,WAAW,CAAC,EAAE,QAAQ,GACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAqC5C;;OAEG;IACG,yBAAyB,CAC7B,oBAAoB,EAAE,MAAM,EAC5B,WAAW,CAAC,EAAE,QAAQ,GACrB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK/B;;;;;;;OAOG;IACG,eAAe,CACnB,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,WAAW,CAAC,EAAE,QAAQ,GACrB,OAAO,CAAC,kCAAkC,EAAE,CAAC;IA+ChD;;;OAGG;IACH,0BAA0B,CAAC,WAAW,EAAE,kCAAkC,EAAE,GAAG,MAAM;IAoBrF;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAiClC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAYrC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;;OAGG;IACG,eAAe,CACnB,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,MAAY,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+CzB;;OAEG;IACG,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAqBvF;;;OAGG;IACG,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BzD;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,cAAc;yCApWX,6BAA6B;6CAA7B,6BAA6B;CAuWzC"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { RunView, Metadata } from '@memberjunction/core';
|
|
3
|
+
import { ConversationUtility } from '@memberjunction/ai-core-plus';
|
|
4
|
+
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Service for managing conversation attachments.
|
|
8
|
+
* Handles loading, saving, and converting attachments between different formats.
|
|
9
|
+
*/
|
|
10
|
+
export class ConversationAttachmentService {
|
|
11
|
+
constructor() { }
|
|
12
|
+
/**
|
|
13
|
+
* Load all attachments for a list of conversation detail IDs.
|
|
14
|
+
* Returns a map of ConversationDetailID -> MessageAttachment[]
|
|
15
|
+
*/
|
|
16
|
+
async loadAttachmentsForMessages(conversationDetailIds, contextUser) {
|
|
17
|
+
const result = new Map();
|
|
18
|
+
if (!conversationDetailIds || conversationDetailIds.length === 0) {
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const rv = new RunView();
|
|
23
|
+
const idList = conversationDetailIds.map(id => `'${id}'`).join(',');
|
|
24
|
+
const attachmentResult = await rv.RunView({
|
|
25
|
+
EntityName: 'MJ: Conversation Detail Attachments',
|
|
26
|
+
ExtraFilter: `ConversationDetailID IN (${idList})`,
|
|
27
|
+
OrderBy: 'DisplayOrder ASC, __mj_CreatedAt ASC',
|
|
28
|
+
ResultType: 'entity_object'
|
|
29
|
+
}, contextUser);
|
|
30
|
+
if (attachmentResult.Success && attachmentResult.Results) {
|
|
31
|
+
for (const attachment of attachmentResult.Results) {
|
|
32
|
+
const detailId = attachment.ConversationDetailID;
|
|
33
|
+
if (!result.has(detailId)) {
|
|
34
|
+
result.set(detailId, []);
|
|
35
|
+
}
|
|
36
|
+
const messageAttachment = this.convertToMessageAttachment(attachment);
|
|
37
|
+
result.get(detailId).push(messageAttachment);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('Error loading attachments:', error);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load attachments for a single message
|
|
48
|
+
*/
|
|
49
|
+
async loadAttachmentsForMessage(conversationDetailId, contextUser) {
|
|
50
|
+
const map = await this.loadAttachmentsForMessages([conversationDetailId], contextUser);
|
|
51
|
+
return map.get(conversationDetailId) || [];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Save pending attachments to the database.
|
|
55
|
+
* Returns the saved attachment entities.
|
|
56
|
+
*
|
|
57
|
+
* @param conversationDetailId - ID of the conversation detail to attach to
|
|
58
|
+
* @param pendingAttachments - Array of pending attachments from the mention editor
|
|
59
|
+
* @param contextUser - User context for the operation
|
|
60
|
+
*/
|
|
61
|
+
async saveAttachments(conversationDetailId, pendingAttachments, contextUser) {
|
|
62
|
+
const savedAttachments = [];
|
|
63
|
+
const md = new Metadata();
|
|
64
|
+
for (let i = 0; i < pendingAttachments.length; i++) {
|
|
65
|
+
const pending = pendingAttachments[i];
|
|
66
|
+
try {
|
|
67
|
+
const attachment = await md.GetEntityObject('MJ: Conversation Detail Attachments', contextUser);
|
|
68
|
+
// Determine attachment type from MIME type
|
|
69
|
+
const attachmentType = ConversationUtility.GetAttachmentTypeFromMime(pending.mimeType);
|
|
70
|
+
attachment.ConversationDetailID = conversationDetailId;
|
|
71
|
+
attachment.ModalityID = this.getModalityIdForType(attachmentType);
|
|
72
|
+
attachment.MimeType = pending.mimeType;
|
|
73
|
+
attachment.FileName = pending.fileName;
|
|
74
|
+
attachment.FileSizeBytes = pending.sizeBytes;
|
|
75
|
+
attachment.Width = pending.width ?? null;
|
|
76
|
+
attachment.Height = pending.height ?? null;
|
|
77
|
+
attachment.DurationSeconds = null; // PendingAttachment doesn't have duration
|
|
78
|
+
attachment.DisplayOrder = i;
|
|
79
|
+
attachment.ThumbnailBase64 = pending.thumbnailUrl ?? null;
|
|
80
|
+
// Store inline data - extract base64 from data URL
|
|
81
|
+
if (pending.dataUrl) {
|
|
82
|
+
const base64Data = this.extractBase64FromDataUrl(pending.dataUrl);
|
|
83
|
+
attachment.InlineData = base64Data;
|
|
84
|
+
}
|
|
85
|
+
const saved = await attachment.Save();
|
|
86
|
+
if (saved) {
|
|
87
|
+
savedAttachments.push(attachment);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error('Failed to save attachment:', attachment.LatestResult);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('Error saving attachment:', error);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return savedAttachments;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create attachment reference tokens for message text.
|
|
101
|
+
* These tokens are stored in the Message field to reference attachments.
|
|
102
|
+
*/
|
|
103
|
+
createAttachmentReferences(attachments) {
|
|
104
|
+
return attachments
|
|
105
|
+
.map(att => {
|
|
106
|
+
const content = {
|
|
107
|
+
_mode: 'attachment',
|
|
108
|
+
id: att.ID,
|
|
109
|
+
type: this.getAttachmentTypeFromModality(att.ModalityID),
|
|
110
|
+
mimeType: att.MimeType,
|
|
111
|
+
fileName: att.FileName ?? undefined,
|
|
112
|
+
sizeBytes: att.FileSizeBytes,
|
|
113
|
+
width: att.Width ?? undefined,
|
|
114
|
+
height: att.Height ?? undefined,
|
|
115
|
+
durationSeconds: att.DurationSeconds ?? undefined,
|
|
116
|
+
thumbnailBase64: att.ThumbnailBase64 ?? undefined
|
|
117
|
+
};
|
|
118
|
+
return ConversationUtility.CreateAttachmentReference(content);
|
|
119
|
+
})
|
|
120
|
+
.join(' ');
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Convert a database entity to a MessageAttachment for display
|
|
124
|
+
*/
|
|
125
|
+
convertToMessageAttachment(entity) {
|
|
126
|
+
// Determine content URL
|
|
127
|
+
let contentUrl;
|
|
128
|
+
let thumbnailUrl;
|
|
129
|
+
if (entity.InlineData) {
|
|
130
|
+
// Create data URL from inline data
|
|
131
|
+
contentUrl = `data:${entity.MimeType};base64,${entity.InlineData}`;
|
|
132
|
+
}
|
|
133
|
+
else if (entity.FileID) {
|
|
134
|
+
// TODO: Integrate with MJStorage to get pre-authenticated URL
|
|
135
|
+
contentUrl = undefined; // Will need to be loaded separately
|
|
136
|
+
}
|
|
137
|
+
// Use thumbnail if available
|
|
138
|
+
if (entity.ThumbnailBase64) {
|
|
139
|
+
thumbnailUrl = entity.ThumbnailBase64.startsWith('data:')
|
|
140
|
+
? entity.ThumbnailBase64
|
|
141
|
+
: `data:image/jpeg;base64,${entity.ThumbnailBase64}`;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
id: entity.ID,
|
|
145
|
+
type: this.getAttachmentTypeFromModality(entity.ModalityID),
|
|
146
|
+
mimeType: entity.MimeType,
|
|
147
|
+
fileName: entity.FileName,
|
|
148
|
+
sizeBytes: entity.FileSizeBytes,
|
|
149
|
+
width: entity.Width ?? undefined,
|
|
150
|
+
height: entity.Height ?? undefined,
|
|
151
|
+
thumbnailUrl: thumbnailUrl,
|
|
152
|
+
contentUrl: contentUrl
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the AttachmentType from a modality ID
|
|
157
|
+
*/
|
|
158
|
+
getAttachmentTypeFromModality(modalityId) {
|
|
159
|
+
const modality = AIEngineBase.Instance.Modalities.find(m => m.ID === modalityId);
|
|
160
|
+
const name = modality?.Name?.toLowerCase() || '';
|
|
161
|
+
if (name === 'image')
|
|
162
|
+
return 'Image';
|
|
163
|
+
if (name === 'video')
|
|
164
|
+
return 'Video';
|
|
165
|
+
if (name === 'audio')
|
|
166
|
+
return 'Audio';
|
|
167
|
+
return 'Document';
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get the modality ID for an attachment type
|
|
171
|
+
*/
|
|
172
|
+
getModalityIdForType(type) {
|
|
173
|
+
// Map AttachmentType to modality name
|
|
174
|
+
// AttachmentType is 'Image' | 'Video' | 'Audio' | 'Document'
|
|
175
|
+
// Modality names are 'Image', 'Audio', 'Video', 'File'
|
|
176
|
+
let modalityName = type.toLowerCase().trim();
|
|
177
|
+
if (modalityName === 'document') {
|
|
178
|
+
modalityName = 'file';
|
|
179
|
+
}
|
|
180
|
+
const modality = AIEngineBase.Instance.Modalities.find(m => m.Name?.trim().toLowerCase() === modalityName);
|
|
181
|
+
if (modality) {
|
|
182
|
+
return modality.ID;
|
|
183
|
+
}
|
|
184
|
+
// Fallback to 'file' modality if specific type not found
|
|
185
|
+
// recursive call, so long as the current modality isn't file as that
|
|
186
|
+
// would cause infinite recursion/stack overflow
|
|
187
|
+
if (modalityName !== 'file') {
|
|
188
|
+
return this.getModalityIdForType('Document');
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return '';
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Extract base64 data from a data URL
|
|
196
|
+
*/
|
|
197
|
+
extractBase64FromDataUrl(dataUrl) {
|
|
198
|
+
const matches = dataUrl.match(/^data:[^;]+;base64,(.+)$/);
|
|
199
|
+
return matches ? matches[1] : dataUrl;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Create a thumbnail from an image file.
|
|
203
|
+
* Returns a base64 data URL of the thumbnail.
|
|
204
|
+
*/
|
|
205
|
+
async createThumbnail(file, maxSize = 200) {
|
|
206
|
+
return new Promise((resolve) => {
|
|
207
|
+
if (!file.type.startsWith('image/')) {
|
|
208
|
+
resolve(null);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const reader = new FileReader();
|
|
212
|
+
reader.onload = (e) => {
|
|
213
|
+
const img = new Image();
|
|
214
|
+
img.onload = () => {
|
|
215
|
+
const canvas = document.createElement('canvas');
|
|
216
|
+
let width = img.width;
|
|
217
|
+
let height = img.height;
|
|
218
|
+
// Scale down to maxSize
|
|
219
|
+
if (width > height) {
|
|
220
|
+
if (width > maxSize) {
|
|
221
|
+
height = Math.round((height * maxSize) / width);
|
|
222
|
+
width = maxSize;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
if (height > maxSize) {
|
|
227
|
+
width = Math.round((width * maxSize) / height);
|
|
228
|
+
height = maxSize;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
canvas.width = width;
|
|
232
|
+
canvas.height = height;
|
|
233
|
+
const ctx = canvas.getContext('2d');
|
|
234
|
+
if (ctx) {
|
|
235
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
236
|
+
resolve(canvas.toDataURL('image/jpeg', 0.7));
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
resolve(null);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
img.onerror = () => resolve(null);
|
|
243
|
+
img.src = e.target?.result;
|
|
244
|
+
};
|
|
245
|
+
reader.onerror = () => resolve(null);
|
|
246
|
+
reader.readAsDataURL(file);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get image dimensions from a file
|
|
251
|
+
*/
|
|
252
|
+
async getImageDimensions(file) {
|
|
253
|
+
return new Promise((resolve) => {
|
|
254
|
+
if (!file.type.startsWith('image/')) {
|
|
255
|
+
resolve(null);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const reader = new FileReader();
|
|
259
|
+
reader.onload = (e) => {
|
|
260
|
+
const img = new Image();
|
|
261
|
+
img.onload = () => {
|
|
262
|
+
resolve({ width: img.width, height: img.height });
|
|
263
|
+
};
|
|
264
|
+
img.onerror = () => resolve(null);
|
|
265
|
+
img.src = e.target?.result;
|
|
266
|
+
};
|
|
267
|
+
reader.onerror = () => resolve(null);
|
|
268
|
+
reader.readAsDataURL(file);
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Process a file and create a PendingAttachment.
|
|
273
|
+
* This creates the data structure needed for the mention editor component.
|
|
274
|
+
*/
|
|
275
|
+
async processFile(file) {
|
|
276
|
+
// Read file data URL
|
|
277
|
+
const dataUrl = await this.fileToDataUrl(file);
|
|
278
|
+
const pending = {
|
|
279
|
+
id: this.generateTempId(),
|
|
280
|
+
file: file,
|
|
281
|
+
dataUrl: dataUrl,
|
|
282
|
+
mimeType: file.type,
|
|
283
|
+
fileName: file.name,
|
|
284
|
+
sizeBytes: file.size
|
|
285
|
+
};
|
|
286
|
+
// Get image dimensions and create thumbnail
|
|
287
|
+
const type = ConversationUtility.GetAttachmentTypeFromMime(file.type);
|
|
288
|
+
if (type === 'Image') {
|
|
289
|
+
const dimensions = await this.getImageDimensions(file);
|
|
290
|
+
if (dimensions) {
|
|
291
|
+
pending.width = dimensions.width;
|
|
292
|
+
pending.height = dimensions.height;
|
|
293
|
+
}
|
|
294
|
+
const thumbnail = await this.createThumbnail(file);
|
|
295
|
+
if (thumbnail) {
|
|
296
|
+
pending.thumbnailUrl = thumbnail;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return pending;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Convert a file to a data URL
|
|
303
|
+
*/
|
|
304
|
+
fileToDataUrl(file) {
|
|
305
|
+
return new Promise((resolve, reject) => {
|
|
306
|
+
const reader = new FileReader();
|
|
307
|
+
reader.onload = () => resolve(reader.result);
|
|
308
|
+
reader.onerror = () => reject(reader.error);
|
|
309
|
+
reader.readAsDataURL(file);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Generate a temporary ID for pending attachments
|
|
314
|
+
*/
|
|
315
|
+
generateTempId() {
|
|
316
|
+
return `temp-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
317
|
+
}
|
|
318
|
+
static ɵfac = function ConversationAttachmentService_Factory(t) { return new (t || ConversationAttachmentService)(); };
|
|
319
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ConversationAttachmentService, factory: ConversationAttachmentService.ɵfac, providedIn: 'root' });
|
|
320
|
+
}
|
|
321
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationAttachmentService, [{
|
|
322
|
+
type: Injectable,
|
|
323
|
+
args: [{
|
|
324
|
+
providedIn: 'root'
|
|
325
|
+
}]
|
|
326
|
+
}], () => [], null); })();
|
|
327
|
+
//# sourceMappingURL=conversation-attachment.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-attachment.service.js","sourceRoot":"","sources":["../../../src/lib/services/conversation-attachment.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,11 +58,25 @@ export declare class ConversationDataService {
|
|
|
58
58
|
*/
|
|
59
59
|
removeConversation(id: string): void;
|
|
60
60
|
/**
|
|
61
|
-
* Loads conversations from the database
|
|
61
|
+
* Loads conversations from the database.
|
|
62
|
+
* Skips if already loaded to prevent redundant DB calls.
|
|
62
63
|
* @param environmentId The environment ID to filter by
|
|
63
64
|
* @param currentUser The current user context
|
|
64
65
|
*/
|
|
65
66
|
loadConversations(environmentId: string, currentUser: UserInfo): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Force refresh conversations from the database, ignoring cache.
|
|
69
|
+
* Use this when user explicitly requests a refresh.
|
|
70
|
+
* @param environmentId The environment ID to filter by
|
|
71
|
+
* @param currentUser The current user context
|
|
72
|
+
*/
|
|
73
|
+
refreshConversations(environmentId: string, currentUser: UserInfo): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Internal method to fetch conversations from the database.
|
|
76
|
+
* @param environmentId The environment ID to filter by
|
|
77
|
+
* @param currentUser The current user context
|
|
78
|
+
*/
|
|
79
|
+
private fetchConversations;
|
|
66
80
|
/**
|
|
67
81
|
* Creates a new conversation
|
|
68
82
|
* @param name The conversation name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-data.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-data.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAEnE;;;;;;;GAOG;AACH,qBAGa,uBAAuB;IAE3B,aAAa,EAAE,kBAAkB,EAAE,CAAM;IAGhD,OAAO,CAAC,eAAe,CAAiD;IACxE,SAAgB,cAAc,kDAAuC;IAG9D,WAAW,EAAE,MAAM,CAAM;IAGzB,SAAS,EAAE,OAAO,CAAS;;IAIlC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAI1D;;OAEG;IACH,IAAI,qBAAqB,IAAI,kBAAkB,EAAE,CAShD;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,kBAAkB,EAAE,CAE9C;IAED;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;;OAGG;IACH,eAAe,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAKvD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IASjF;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpC
|
|
1
|
+
{"version":3,"file":"conversation-data.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-data.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAEnE;;;;;;;GAOG;AACH,qBAGa,uBAAuB;IAE3B,aAAa,EAAE,kBAAkB,EAAE,CAAM;IAGhD,OAAO,CAAC,eAAe,CAAiD;IACxE,SAAgB,cAAc,kDAAuC;IAG9D,WAAW,EAAE,MAAM,CAAM;IAGzB,SAAS,EAAE,OAAO,CAAS;;IAIlC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAI1D;;OAEG;IACH,IAAI,qBAAqB,IAAI,kBAAkB,EAAE,CAShD;IAED;;OAEG;IACH,IAAI,mBAAmB,IAAI,kBAAkB,EAAE,CAE9C;IAED;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;;OAGG;IACH,eAAe,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI;IAKvD;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IASjF;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpC;;;;;OAKG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpF;;;;;OAKG;IACG,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvF;;;;OAIG;YACW,kBAAkB;IAiChC;;;;;;;;OAQG;IACG,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,QAAQ,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAmB9B;;;;;OAKG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB7E;;;;;OAKG;IACG,2BAA2B,CAC/B,GAAG,EAAE,MAAM,EAAE,EACb,WAAW,EAAE,QAAQ,GACpB,OAAO,CAAC;QACT,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5D,CAAC;IA4BF;;;;;;OAMG;IACG,gBAAgB,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACpC,WAAW,EAAE,QAAQ,GACpB,OAAO,CAAC,OAAO,CAAC;IAsBnB;;;;OAIG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE;;;;OAIG;IACG,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;yCAjThE,uBAAuB;6CAAvB,uBAAuB;CAoTnC"}
|
|
@@ -91,11 +91,33 @@ export class ConversationDataService {
|
|
|
91
91
|
this._conversations$.next(this.conversations);
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
|
-
* Loads conversations from the database
|
|
94
|
+
* Loads conversations from the database.
|
|
95
|
+
* Skips if already loaded to prevent redundant DB calls.
|
|
95
96
|
* @param environmentId The environment ID to filter by
|
|
96
97
|
* @param currentUser The current user context
|
|
97
98
|
*/
|
|
98
99
|
async loadConversations(environmentId, currentUser) {
|
|
100
|
+
// Skip if already loaded - prevents redundant DB calls when multiple components initialize
|
|
101
|
+
if (this.conversations.length > 0) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await this.fetchConversations(environmentId, currentUser);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Force refresh conversations from the database, ignoring cache.
|
|
108
|
+
* Use this when user explicitly requests a refresh.
|
|
109
|
+
* @param environmentId The environment ID to filter by
|
|
110
|
+
* @param currentUser The current user context
|
|
111
|
+
*/
|
|
112
|
+
async refreshConversations(environmentId, currentUser) {
|
|
113
|
+
await this.fetchConversations(environmentId, currentUser);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Internal method to fetch conversations from the database.
|
|
117
|
+
* @param environmentId The environment ID to filter by
|
|
118
|
+
* @param currentUser The current user context
|
|
119
|
+
*/
|
|
120
|
+
async fetchConversations(environmentId, currentUser) {
|
|
99
121
|
this.isLoading = true;
|
|
100
122
|
try {
|
|
101
123
|
const rv = new RunView();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-data.service.js","sourceRoot":"","sources":["../../../src/lib/services/conversation-data.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;;AAEnE;;;;;;;GAOG;AAIH,MAAM,OAAO,uBAAuB;IAClC,2DAA2D;IACpD,aAAa,GAAyB,EAAE,CAAC;IAEhD,uFAAuF;IAC/E,eAAe,GAAG,IAAI,eAAe,CAAuB,EAAE,CAAC,CAAC;IACxD,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;IAErE,sDAAsD;IAC/C,WAAW,GAAW,EAAE,CAAC;IAEhC,gBAAgB;IACT,SAAS,GAAY,KAAK,CAAC;IAElC,gBAAe,CAAC;IAEhB;;;;OAIG;IACH,mBAAmB,CAAC,EAAU;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,IAAI,qBAAqB;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,KAAa;QAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,YAAgC;QAC9C,IAAI,CAAC,aAAa,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,yBAAyB,CAAC,EAAU,EAAE,OAAoC;QACxE,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrC,8CAA8C;YAC9C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,EAAU;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"conversation-data.service.js","sourceRoot":"","sources":["../../../src/lib/services/conversation-data.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
2
3
|
import { ActiveTasksService } from './active-tasks.service';
|
|
3
4
|
import { DataCacheService } from './data-cache.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Metadata structure for message progress updates
|
|
8
|
+
*/
|
|
9
|
+
export interface MessageProgressMetadata {
|
|
10
|
+
/** Progress details (from RunAIAgentResolver) */
|
|
11
|
+
progress?: {
|
|
12
|
+
hierarchicalStep?: string;
|
|
13
|
+
percentage?: number;
|
|
14
|
+
message?: string;
|
|
15
|
+
stepCount?: number;
|
|
16
|
+
agentName?: string;
|
|
17
|
+
agentType?: string;
|
|
18
|
+
};
|
|
19
|
+
/** Agent run information (from RunAIAgentResolver) */
|
|
20
|
+
agentRun?: {
|
|
21
|
+
Agent?: string;
|
|
22
|
+
ConversationDetailID?: string;
|
|
23
|
+
ID?: string;
|
|
24
|
+
};
|
|
25
|
+
/** Agent run ID (alternative to agentRun.ID) */
|
|
26
|
+
agentRunId?: string;
|
|
27
|
+
}
|
|
5
28
|
/**
|
|
6
29
|
* Message progress update structure
|
|
7
30
|
*/
|
|
@@ -10,8 +33,10 @@ export interface MessageProgressUpdate {
|
|
|
10
33
|
percentComplete?: number;
|
|
11
34
|
taskName?: string;
|
|
12
35
|
conversationDetailId: string;
|
|
13
|
-
metadata?:
|
|
36
|
+
metadata?: MessageProgressMetadata;
|
|
14
37
|
stepCount?: number;
|
|
38
|
+
/** Identifies which backend resolver published this update */
|
|
39
|
+
resolver?: 'TaskOrchestrator' | 'RunAIAgentResolver' | string;
|
|
15
40
|
}
|
|
16
41
|
/**
|
|
17
42
|
* Callback type for message progress updates
|
|
@@ -33,6 +58,12 @@ export declare class ConversationStreamingService implements OnDestroy {
|
|
|
33
58
|
private dataCache;
|
|
34
59
|
private pushStatusSubscription?;
|
|
35
60
|
private callbackRegistry;
|
|
61
|
+
private recentCompletions;
|
|
62
|
+
completionEvents$: Subject<{
|
|
63
|
+
conversationDetailId: string;
|
|
64
|
+
agentRunId: string;
|
|
65
|
+
}>;
|
|
66
|
+
private agentRunIdToDetailId;
|
|
36
67
|
private connectionStatus$;
|
|
37
68
|
private initialized;
|
|
38
69
|
private reconnectionTimeout?;
|
|
@@ -86,8 +117,26 @@ export declare class ConversationStreamingService implements OnDestroy {
|
|
|
86
117
|
/**
|
|
87
118
|
* Route agent progress updates (from RunAIAgentResolver) to registered callbacks.
|
|
88
119
|
* Uses conversationDetailID from agentRun data for direct routing.
|
|
120
|
+
* Also handles completion messages to remove tasks from ActiveTasksService.
|
|
89
121
|
*/
|
|
90
122
|
private routeAgentProgress;
|
|
123
|
+
/**
|
|
124
|
+
* Get a recent completion event for a message (used when component initializes after completion)
|
|
125
|
+
* @param conversationDetailId - The message ID to check
|
|
126
|
+
* @returns Completion info if found, undefined otherwise
|
|
127
|
+
*/
|
|
128
|
+
getRecentCompletion(conversationDetailId: string): {
|
|
129
|
+
agentRunId: string;
|
|
130
|
+
} | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Clear a recent completion after it has been handled
|
|
133
|
+
* @param conversationDetailId - The message ID to clear
|
|
134
|
+
*/
|
|
135
|
+
clearRecentCompletion(conversationDetailId: string): void;
|
|
136
|
+
/**
|
|
137
|
+
* Cleanup completions older than 5 minutes to prevent memory leak
|
|
138
|
+
*/
|
|
139
|
+
private cleanupOldCompletions;
|
|
91
140
|
/**
|
|
92
141
|
* Schedule a reconnection attempt after a delay
|
|
93
142
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-streaming.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-streaming.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-streaming.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-streaming.service.ts"],"names":[],"mappings":"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"}
|