@memberjunction/ng-conversations 2.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +197 -0
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +20 -0
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -0
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +125 -0
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -0
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +48 -0
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -0
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +199 -0
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -0
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +30 -0
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -0
  12. package/dist/lib/components/agent/agent-process-panel.component.js +333 -0
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -0
  14. package/dist/lib/components/artifact/artifact-panel.component.d.ts +22 -0
  15. package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +1 -0
  16. package/dist/lib/components/artifact/artifact-panel.component.js +237 -0
  17. package/dist/lib/components/artifact/artifact-panel.component.js.map +1 -0
  18. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +39 -0
  19. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +1 -0
  20. package/dist/lib/components/artifact/artifact-upload-modal.component.js +384 -0
  21. package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +1 -0
  22. package/dist/lib/components/artifact/artifact-version-history.component.d.ts +28 -0
  23. package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +1 -0
  24. package/dist/lib/components/artifact/artifact-version-history.component.js +280 -0
  25. package/dist/lib/components/artifact/artifact-version-history.component.js.map +1 -0
  26. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +22 -0
  27. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +1 -0
  28. package/dist/lib/components/artifact/artifact-viewer-panel.component.js +182 -0
  29. package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +1 -0
  30. package/dist/lib/components/artifact/artifact-viewer.component.d.ts +27 -0
  31. package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +1 -0
  32. package/dist/lib/components/artifact/artifact-viewer.component.js +266 -0
  33. package/dist/lib/components/artifact/artifact-viewer.component.js.map +1 -0
  34. package/dist/lib/components/artifact/inline-artifact.component.d.ts +46 -0
  35. package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +1 -0
  36. package/dist/lib/components/artifact/inline-artifact.component.js +447 -0
  37. package/dist/lib/components/artifact/inline-artifact.component.js.map +1 -0
  38. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +18 -0
  39. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -0
  40. package/dist/lib/components/collection/collection-artifact-card.component.js +147 -0
  41. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -0
  42. package/dist/lib/components/collection/collection-form-modal.component.d.ts +33 -0
  43. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -0
  44. package/dist/lib/components/collection/collection-form-modal.component.js +245 -0
  45. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -0
  46. package/dist/lib/components/collection/collection-tree.component.d.ts +42 -0
  47. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -0
  48. package/dist/lib/components/collection/collection-tree.component.js +482 -0
  49. package/dist/lib/components/collection/collection-tree.component.js.map +1 -0
  50. package/dist/lib/components/collection/collection-view.component.d.ts +31 -0
  51. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -0
  52. package/dist/lib/components/collection/collection-view.component.js +254 -0
  53. package/dist/lib/components/collection/collection-view.component.js.map +1 -0
  54. package/dist/lib/components/collection/collections-full-view.component.d.ts +55 -0
  55. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -0
  56. package/dist/lib/components/collection/collections-full-view.component.js +578 -0
  57. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -0
  58. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +160 -0
  59. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -0
  60. package/dist/lib/components/conversation/conversation-chat-area.component.js +891 -0
  61. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -0
  62. package/dist/lib/components/conversation/conversation-list.component.d.ts +29 -0
  63. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -0
  64. package/dist/lib/components/conversation/conversation-list.component.js +255 -0
  65. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -0
  66. package/dist/lib/components/dialogs/input-dialog.component.d.ts +17 -0
  67. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -0
  68. package/dist/lib/components/dialogs/input-dialog.component.js +122 -0
  69. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -0
  70. package/dist/lib/components/export/export-modal.component.d.ts +37 -0
  71. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -0
  72. package/dist/lib/components/export/export-modal.component.js +414 -0
  73. package/dist/lib/components/export/export-modal.component.js.map +1 -0
  74. package/dist/lib/components/library/library-full-view.component.d.ts +36 -0
  75. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -0
  76. package/dist/lib/components/library/library-full-view.component.js +270 -0
  77. package/dist/lib/components/library/library-full-view.component.js.map +1 -0
  78. package/dist/lib/components/members/members-modal.component.d.ts +42 -0
  79. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -0
  80. package/dist/lib/components/members/members-modal.component.js +352 -0
  81. package/dist/lib/components/members/members-modal.component.js.map +1 -0
  82. package/dist/lib/components/mention/mention-dropdown.component.d.ts +44 -0
  83. package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -0
  84. package/dist/lib/components/mention/mention-dropdown.component.js +194 -0
  85. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -0
  86. package/dist/lib/components/message/message-input.component.d.ts +137 -0
  87. package/dist/lib/components/message/message-input.component.d.ts.map +1 -0
  88. package/dist/lib/components/message/message-input.component.js +1159 -0
  89. package/dist/lib/components/message/message-input.component.js.map +1 -0
  90. package/dist/lib/components/message/message-item.component.d.ts +140 -0
  91. package/dist/lib/components/message/message-item.component.d.ts.map +1 -0
  92. package/dist/lib/components/message/message-item.component.js +817 -0
  93. package/dist/lib/components/message/message-item.component.js.map +1 -0
  94. package/dist/lib/components/message/message-list.component.d.ts +77 -0
  95. package/dist/lib/components/message/message-list.component.d.ts.map +1 -0
  96. package/dist/lib/components/message/message-list.component.js +316 -0
  97. package/dist/lib/components/message/message-list.component.js.map +1 -0
  98. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +13 -0
  99. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -0
  100. package/dist/lib/components/navigation/conversation-navigation.component.js +88 -0
  101. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -0
  102. package/dist/lib/components/notification/activity-indicator.component.d.ts +11 -0
  103. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -0
  104. package/dist/lib/components/notification/activity-indicator.component.js +56 -0
  105. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -0
  106. package/dist/lib/components/notification/notification-badge.component.d.ts +27 -0
  107. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -0
  108. package/dist/lib/components/notification/notification-badge.component.js +160 -0
  109. package/dist/lib/components/notification/notification-badge.component.js.map +1 -0
  110. package/dist/lib/components/project/project-form-modal.component.d.ts +34 -0
  111. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -0
  112. package/dist/lib/components/project/project-form-modal.component.js +357 -0
  113. package/dist/lib/components/project/project-form-modal.component.js.map +1 -0
  114. package/dist/lib/components/project/project-selector.component.d.ts +36 -0
  115. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -0
  116. package/dist/lib/components/project/project-selector.component.js +317 -0
  117. package/dist/lib/components/project/project-selector.component.js.map +1 -0
  118. package/dist/lib/components/search/search-panel.component.d.ts +120 -0
  119. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -0
  120. package/dist/lib/components/search/search-panel.component.js +714 -0
  121. package/dist/lib/components/search/search-panel.component.js.map +1 -0
  122. package/dist/lib/components/share/share-modal.component.d.ts +46 -0
  123. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -0
  124. package/dist/lib/components/share/share-modal.component.js +431 -0
  125. package/dist/lib/components/share/share-modal.component.js.map +1 -0
  126. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +18 -0
  127. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -0
  128. package/dist/lib/components/sidebar/conversation-sidebar.component.js +81 -0
  129. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -0
  130. package/dist/lib/components/task/task-form-modal.component.d.ts +42 -0
  131. package/dist/lib/components/task/task-form-modal.component.d.ts.map +1 -0
  132. package/dist/lib/components/task/task-form-modal.component.js +329 -0
  133. package/dist/lib/components/task/task-form-modal.component.js.map +1 -0
  134. package/dist/lib/components/task/task-item.component.d.ts +22 -0
  135. package/dist/lib/components/task/task-item.component.d.ts.map +1 -0
  136. package/dist/lib/components/task/task-item.component.js +234 -0
  137. package/dist/lib/components/task/task-item.component.js.map +1 -0
  138. package/dist/lib/components/task/task-list.component.d.ts +32 -0
  139. package/dist/lib/components/task/task-list.component.d.ts.map +1 -0
  140. package/dist/lib/components/task/task-list.component.js +290 -0
  141. package/dist/lib/components/task/task-list.component.js.map +1 -0
  142. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +27 -0
  143. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -0
  144. package/dist/lib/components/tasks/tasks-dropdown.component.js +254 -0
  145. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -0
  146. package/dist/lib/components/thread/thread-panel.component.d.ts +65 -0
  147. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -0
  148. package/dist/lib/components/thread/thread-panel.component.js +325 -0
  149. package/dist/lib/components/thread/thread-panel.component.js.map +1 -0
  150. package/dist/lib/components/toast/toast.component.d.ts +26 -0
  151. package/dist/lib/components/toast/toast.component.d.ts.map +1 -0
  152. package/dist/lib/components/toast/toast.component.js +108 -0
  153. package/dist/lib/components/toast/toast.component.js.map +1 -0
  154. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +75 -0
  155. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -0
  156. package/dist/lib/components/workspace/conversation-workspace.component.js +299 -0
  157. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -0
  158. package/dist/lib/conversations.module.d.ts +62 -0
  159. package/dist/lib/conversations.module.d.ts.map +1 -0
  160. package/dist/lib/conversations.module.js +248 -0
  161. package/dist/lib/conversations.module.js.map +1 -0
  162. package/dist/lib/directives/search-shortcut.directive.d.ts +17 -0
  163. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -0
  164. package/dist/lib/directives/search-shortcut.directive.js +39 -0
  165. package/dist/lib/directives/search-shortcut.directive.js.map +1 -0
  166. package/dist/lib/models/conversation-state.model.d.ts +72 -0
  167. package/dist/lib/models/conversation-state.model.d.ts.map +1 -0
  168. package/dist/lib/models/conversation-state.model.js +2 -0
  169. package/dist/lib/models/conversation-state.model.js.map +1 -0
  170. package/dist/lib/models/notification.model.d.ts +89 -0
  171. package/dist/lib/models/notification.model.d.ts.map +1 -0
  172. package/dist/lib/models/notification.model.js +11 -0
  173. package/dist/lib/models/notification.model.js.map +1 -0
  174. package/dist/lib/services/active-tasks.service.d.ts +65 -0
  175. package/dist/lib/services/active-tasks.service.d.ts.map +1 -0
  176. package/dist/lib/services/active-tasks.service.js +95 -0
  177. package/dist/lib/services/active-tasks.service.js.map +1 -0
  178. package/dist/lib/services/agent-state.service.d.ts +78 -0
  179. package/dist/lib/services/agent-state.service.d.ts.map +1 -0
  180. package/dist/lib/services/agent-state.service.js +213 -0
  181. package/dist/lib/services/agent-state.service.js.map +1 -0
  182. package/dist/lib/services/artifact-state.service.d.ts +114 -0
  183. package/dist/lib/services/artifact-state.service.d.ts.map +1 -0
  184. package/dist/lib/services/artifact-state.service.js +288 -0
  185. package/dist/lib/services/artifact-state.service.js.map +1 -0
  186. package/dist/lib/services/conversation-agent.service.d.ts +79 -0
  187. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -0
  188. package/dist/lib/services/conversation-agent.service.js +259 -0
  189. package/dist/lib/services/conversation-agent.service.js.map +1 -0
  190. package/dist/lib/services/conversation-state.service.d.ts +122 -0
  191. package/dist/lib/services/conversation-state.service.d.ts.map +1 -0
  192. package/dist/lib/services/conversation-state.service.js +255 -0
  193. package/dist/lib/services/conversation-state.service.js.map +1 -0
  194. package/dist/lib/services/dialog.service.d.ts +54 -0
  195. package/dist/lib/services/dialog.service.d.ts.map +1 -0
  196. package/dist/lib/services/dialog.service.js +157 -0
  197. package/dist/lib/services/dialog.service.js.map +1 -0
  198. package/dist/lib/services/export.service.d.ts +25 -0
  199. package/dist/lib/services/export.service.d.ts.map +1 -0
  200. package/dist/lib/services/export.service.js +237 -0
  201. package/dist/lib/services/export.service.js.map +1 -0
  202. package/dist/lib/services/mention-autocomplete.service.d.ts +59 -0
  203. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -0
  204. package/dist/lib/services/mention-autocomplete.service.js +160 -0
  205. package/dist/lib/services/mention-autocomplete.service.js.map +1 -0
  206. package/dist/lib/services/mention-parser.service.d.ts +46 -0
  207. package/dist/lib/services/mention-parser.service.d.ts.map +1 -0
  208. package/dist/lib/services/mention-parser.service.js +156 -0
  209. package/dist/lib/services/mention-parser.service.js.map +1 -0
  210. package/dist/lib/services/notification.service.d.ts +108 -0
  211. package/dist/lib/services/notification.service.d.ts.map +1 -0
  212. package/dist/lib/services/notification.service.js +431 -0
  213. package/dist/lib/services/notification.service.js.map +1 -0
  214. package/dist/lib/services/search.service.d.ts +144 -0
  215. package/dist/lib/services/search.service.d.ts.map +1 -0
  216. package/dist/lib/services/search.service.js +370 -0
  217. package/dist/lib/services/search.service.js.map +1 -0
  218. package/dist/lib/services/toast.service.d.ts +46 -0
  219. package/dist/lib/services/toast.service.d.ts.map +1 -0
  220. package/dist/lib/services/toast.service.js +76 -0
  221. package/dist/lib/services/toast.service.js.map +1 -0
  222. package/dist/public-api.d.ts +42 -0
  223. package/dist/public-api.d.ts.map +1 -0
  224. package/dist/public-api.js +49 -0
  225. package/dist/public-api.js.map +1 -0
  226. package/package.json +54 -0
@@ -0,0 +1,213 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, interval } from 'rxjs';
3
+ import { map, shareReplay, switchMap } from 'rxjs/operators';
4
+ import { RunView } from '@memberjunction/core';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Manages agent state and provides real-time updates for active agents
8
+ * Polls for agent status changes and provides reactive streams
9
+ */
10
+ export class AgentStateService {
11
+ _activeAgents$ = new BehaviorSubject([]);
12
+ pollSubscription;
13
+ currentUser;
14
+ pollInterval = 30000; // Poll every 30 seconds (reduced from 3s to minimize DB load)
15
+ // Public observable streams
16
+ activeAgents$ = this._activeAgents$.asObservable();
17
+ constructor() { }
18
+ ngOnDestroy() {
19
+ this.stopPolling();
20
+ }
21
+ /**
22
+ * Starts polling for active agents
23
+ * @param currentUser The current user context
24
+ * @param conversationId Optional conversation ID to filter by
25
+ */
26
+ startPolling(currentUser, conversationId) {
27
+ this.currentUser = currentUser;
28
+ this.stopPolling();
29
+ // Initial load
30
+ this.loadActiveAgents(conversationId);
31
+ // Start polling
32
+ this.pollSubscription = interval(this.pollInterval)
33
+ .pipe(switchMap(() => this.loadActiveAgents(conversationId)))
34
+ .subscribe();
35
+ }
36
+ /**
37
+ * Stops polling for active agents
38
+ */
39
+ stopPolling() {
40
+ if (this.pollSubscription) {
41
+ this.pollSubscription.unsubscribe();
42
+ this.pollSubscription = undefined;
43
+ }
44
+ }
45
+ /**
46
+ * Gets active agents as an observable
47
+ * @param conversationId Optional conversation ID to filter by
48
+ */
49
+ getActiveAgents(conversationId) {
50
+ if (conversationId) {
51
+ return this.activeAgents$.pipe(map(agents => agents.filter(a => a.run.ConversationID === conversationId)), shareReplay(1));
52
+ }
53
+ return this.activeAgents$;
54
+ }
55
+ /**
56
+ * Gets a specific agent by ID
57
+ * @param agentRunId The agent run ID
58
+ */
59
+ getAgent(agentRunId) {
60
+ return this._activeAgents$.value.find(a => a.run.ID === agentRunId);
61
+ }
62
+ /**
63
+ * Manually refreshes active agents
64
+ * @param conversationId Optional conversation ID to filter by
65
+ */
66
+ async refresh(conversationId) {
67
+ await this.loadActiveAgents(conversationId);
68
+ }
69
+ /**
70
+ * Loads active agents from the database
71
+ */
72
+ async loadActiveAgents(conversationId) {
73
+ if (!this.currentUser) {
74
+ return;
75
+ }
76
+ try {
77
+ const rv = new RunView();
78
+ // Valid statuses: Running, Completed, Paused, Failed, Cancelled
79
+ let filter = `Status IN ('Running', 'Paused')`;
80
+ if (conversationId) {
81
+ filter += ` AND ConversationID='${conversationId}'`;
82
+ }
83
+ const result = await rv.RunView({
84
+ EntityName: 'MJ: AI Agent Runs',
85
+ ExtraFilter: filter,
86
+ OrderBy: 'StartedAt DESC',
87
+ MaxRows: 50,
88
+ ResultType: 'entity_object'
89
+ }, this.currentUser);
90
+ if (result.Success) {
91
+ const runs = result.Results || [];
92
+ const agentsWithStatus = runs.map(run => this.mapRunToAgentWithStatus(run));
93
+ this._activeAgents$.next(agentsWithStatus);
94
+ // Stop polling if no active agents (optimization to reduce DB load)
95
+ if (runs.length === 0 && this.pollSubscription) {
96
+ this.stopPolling();
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ console.error('Failed to load active agents:', error);
102
+ }
103
+ }
104
+ /**
105
+ * Maps an agent run to include status and confidence information
106
+ */
107
+ mapRunToAgentWithStatus(run) {
108
+ const status = this.determineAgentStatus(run);
109
+ const confidence = this.extractConfidence(run);
110
+ return {
111
+ run,
112
+ status,
113
+ confidence
114
+ };
115
+ }
116
+ /**
117
+ * Determines the agent status based on the run entity
118
+ */
119
+ determineAgentStatus(run) {
120
+ const status = run.Status?.toLowerCase() || 'running';
121
+ // Check for errors
122
+ if (status === 'error' || status === 'failed') {
123
+ return 'error';
124
+ }
125
+ // Check for completion
126
+ if (status === 'completed' || status === 'complete' || status === 'success') {
127
+ return 'completed';
128
+ }
129
+ // Determine stage based on progress or elapsed time
130
+ if (run.StartedAt) {
131
+ const elapsed = Date.now() - new Date(run.StartedAt).getTime();
132
+ const seconds = elapsed / 1000;
133
+ // First 5 seconds: acknowledging
134
+ if (seconds < 5) {
135
+ return 'acknowledging';
136
+ }
137
+ // Check if nearing completion (has results or output)
138
+ if (run.Result || run.Status === 'Completed') {
139
+ // If there's output, likely completing
140
+ return 'completing';
141
+ }
142
+ // Otherwise, working
143
+ return 'working';
144
+ }
145
+ // Default to acknowledging if just started
146
+ return 'acknowledging';
147
+ }
148
+ /**
149
+ * Extracts confidence score from agent run if available
150
+ */
151
+ extractConfidence(run) {
152
+ // Try to parse confidence from Result or other fields
153
+ // This is a placeholder - adjust based on actual data structure
154
+ try {
155
+ if (run.Result) {
156
+ const result = typeof run.Result === 'string' ? JSON.parse(run.Result) : run.Result;
157
+ if (result.confidence != null) {
158
+ return parseFloat(result.confidence);
159
+ }
160
+ }
161
+ }
162
+ catch {
163
+ // Ignore parse errors
164
+ }
165
+ return null;
166
+ }
167
+ /**
168
+ * Cancels an agent run
169
+ * @param agentRunId The agent run ID to cancel
170
+ */
171
+ async cancelAgent(agentRunId) {
172
+ if (!this.currentUser) {
173
+ return false;
174
+ }
175
+ try {
176
+ const agent = this.getAgent(agentRunId);
177
+ if (!agent) {
178
+ return false;
179
+ }
180
+ agent.run.Status = 'Cancelled';
181
+ const saved = await agent.run.Save();
182
+ if (saved) {
183
+ // Refresh the active agents list
184
+ await this.refresh();
185
+ return true;
186
+ }
187
+ }
188
+ catch (error) {
189
+ console.error('Failed to cancel agent:', error);
190
+ }
191
+ return false;
192
+ }
193
+ /**
194
+ * Updates the poll interval
195
+ * @param milliseconds The new poll interval in milliseconds
196
+ */
197
+ setPollInterval(milliseconds) {
198
+ this.pollInterval = milliseconds;
199
+ // Restart polling if currently active
200
+ if (this.pollSubscription && this.currentUser) {
201
+ this.startPolling(this.currentUser);
202
+ }
203
+ }
204
+ static ɵfac = function AgentStateService_Factory(t) { return new (t || AgentStateService)(); };
205
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AgentStateService, factory: AgentStateService.ɵfac, providedIn: 'root' });
206
+ }
207
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentStateService, [{
208
+ type: Injectable,
209
+ args: [{
210
+ providedIn: 'root'
211
+ }]
212
+ }], () => [], null); })();
213
+ //# sourceMappingURL=agent-state.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-state.service.js","sourceRoot":"","sources":["../../../src/lib/services/agent-state.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ArtifactEntity } from '@memberjunction/core-entities';
3
+ import { UserInfo } from '@memberjunction/core';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * State management for artifacts and the artifact panel
7
+ * Handles artifact CRUD operations and caching
8
+ */
9
+ export declare class ArtifactStateService {
10
+ private _activeArtifactId$;
11
+ private _activeVersionNumber$;
12
+ private _artifacts$;
13
+ private _isPanelOpen$;
14
+ private _panelMode$;
15
+ readonly activeArtifactId$: Observable<string | null>;
16
+ readonly activeVersionNumber$: Observable<number | null>;
17
+ readonly isPanelOpen$: Observable<boolean>;
18
+ readonly panelMode$: Observable<"view" | "edit">;
19
+ readonly activeArtifact$: Observable<ArtifactEntity | null>;
20
+ constructor();
21
+ /**
22
+ * Opens an artifact in the panel
23
+ * @param id The artifact ID
24
+ * @param versionNumber Optional specific version number
25
+ */
26
+ openArtifact(id: string, versionNumber?: number): void;
27
+ /**
28
+ * Closes the artifact panel
29
+ */
30
+ closeArtifact(): void;
31
+ /**
32
+ * Toggles the panel open/closed state
33
+ */
34
+ togglePanel(): void;
35
+ /**
36
+ * Sets the panel mode
37
+ * @param mode The mode ('view' or 'edit')
38
+ */
39
+ setPanelMode(mode: 'view' | 'edit'): void;
40
+ /**
41
+ * Caches an artifact in memory
42
+ * @param artifact The artifact to cache
43
+ */
44
+ cacheArtifact(artifact: ArtifactEntity): void;
45
+ /**
46
+ * Removes an artifact from cache
47
+ * @param id The artifact ID
48
+ */
49
+ removeCachedArtifact(id: string): void;
50
+ /**
51
+ * Clears all cached artifacts
52
+ */
53
+ clearCache(): void;
54
+ /**
55
+ * Loads artifacts for a conversation
56
+ * @param conversationId The conversation ID
57
+ * @param currentUser The current user context
58
+ * @returns Array of artifacts
59
+ */
60
+ loadArtifactsForConversation(conversationId: string, currentUser: UserInfo): Promise<ArtifactEntity[]>;
61
+ /**
62
+ * Loads artifacts for a collection
63
+ * @param collectionId The collection ID
64
+ * @param currentUser The current user context
65
+ * @returns Array of artifacts
66
+ */
67
+ loadArtifactsForCollection(collectionId: string, currentUser: UserInfo): Promise<ArtifactEntity[]>;
68
+ /**
69
+ * Loads a single artifact by ID
70
+ * @param id The artifact ID
71
+ * @param currentUser The current user context
72
+ * @returns The artifact entity or null
73
+ */
74
+ loadArtifact(id: string, currentUser: UserInfo): Promise<ArtifactEntity | null>;
75
+ /**
76
+ * Creates a new artifact
77
+ * @param data Artifact data
78
+ * @param currentUser The current user context
79
+ * @returns The created artifact
80
+ */
81
+ createArtifact(data: Partial<ArtifactEntity>, currentUser: UserInfo): Promise<ArtifactEntity>;
82
+ /**
83
+ * Updates an artifact
84
+ * @param id The artifact ID
85
+ * @param updates The fields to update
86
+ * @param currentUser The current user context
87
+ * @returns True if successful
88
+ */
89
+ updateArtifact(id: string, updates: Partial<ArtifactEntity>, currentUser: UserInfo): Promise<boolean>;
90
+ /**
91
+ * Deletes an artifact
92
+ * @param id The artifact ID
93
+ * @param currentUser The current user context
94
+ * @returns True if successful
95
+ */
96
+ deleteArtifact(id: string, currentUser: UserInfo): Promise<boolean>;
97
+ /**
98
+ * Adds an artifact to a collection
99
+ * @param artifactId The artifact ID
100
+ * @param collectionId The collection ID
101
+ * @param currentUser The current user context
102
+ */
103
+ addToCollection(artifactId: string, collectionId: string, currentUser: UserInfo): Promise<void>;
104
+ /**
105
+ * Removes an artifact from a collection
106
+ * @param artifactId The artifact ID
107
+ * @param collectionId The collection ID
108
+ * @param currentUser The current user context
109
+ */
110
+ removeFromCollection(artifactId: string, collectionId: string, currentUser: UserInfo): Promise<void>;
111
+ static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactStateService, never>;
112
+ static ɵprov: i0.ɵɵInjectableDeclaration<ArtifactStateService>;
113
+ }
114
+ //# sourceMappingURL=artifact-state.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-state.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/artifact-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAiB,MAAM,MAAM,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAqB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAEnE;;;GAGG;AACH,qBAGa,oBAAoB;IAC/B,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,qBAAqB,CAA4C;IACzE,OAAO,CAAC,WAAW,CAA+D;IAClF,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,WAAW,CAAgD;IAGnE,SAAgB,iBAAiB,4BAA0C;IAC3E,SAAgB,oBAAoB,4BAA6C;IACjF,SAAgB,YAAY,sBAAqC;IACjE,SAAgB,UAAU,8BAAmC;IAG7D,SAAgB,eAAe,EAAE,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,CAMhE;;IAIF;;;;OAIG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMtD;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzC;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAM7C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMtC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;;;OAKG;IACG,4BAA4B,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA0B5G;;;;;OAKG;IACG,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA0CxG;;;;;OAKG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAiBrF;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAenG;;;;;;OAMG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB3G;;;;;OAKG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBzE;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAarG;;;;;OAKG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;yCAlS/F,oBAAoB;6CAApB,oBAAoB;CAsThC"}
@@ -0,0 +1,288 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest } from 'rxjs';
3
+ import { map, shareReplay } from 'rxjs/operators';
4
+ import { Metadata, RunView } from '@memberjunction/core';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * State management for artifacts and the artifact panel
8
+ * Handles artifact CRUD operations and caching
9
+ */
10
+ export class ArtifactStateService {
11
+ _activeArtifactId$ = new BehaviorSubject(null);
12
+ _activeVersionNumber$ = new BehaviorSubject(null);
13
+ _artifacts$ = new BehaviorSubject(new Map());
14
+ _isPanelOpen$ = new BehaviorSubject(false);
15
+ _panelMode$ = new BehaviorSubject('view');
16
+ // Public observable streams
17
+ activeArtifactId$ = this._activeArtifactId$.asObservable();
18
+ activeVersionNumber$ = this._activeVersionNumber$.asObservable();
19
+ isPanelOpen$ = this._isPanelOpen$.asObservable();
20
+ panelMode$ = this._panelMode$.asObservable();
21
+ // Derived observable for active artifact
22
+ activeArtifact$ = combineLatest([
23
+ this.activeArtifactId$,
24
+ this._artifacts$
25
+ ]).pipe(map(([id, artifacts]) => id ? artifacts.get(id) || null : null), shareReplay(1));
26
+ constructor() { }
27
+ /**
28
+ * Opens an artifact in the panel
29
+ * @param id The artifact ID
30
+ * @param versionNumber Optional specific version number
31
+ */
32
+ openArtifact(id, versionNumber) {
33
+ this._activeArtifactId$.next(id);
34
+ this._activeVersionNumber$.next(versionNumber || null);
35
+ this._isPanelOpen$.next(true);
36
+ }
37
+ /**
38
+ * Closes the artifact panel
39
+ */
40
+ closeArtifact() {
41
+ this._activeArtifactId$.next(null);
42
+ this._activeVersionNumber$.next(null);
43
+ this._isPanelOpen$.next(false);
44
+ this._panelMode$.next('view');
45
+ }
46
+ /**
47
+ * Toggles the panel open/closed state
48
+ */
49
+ togglePanel() {
50
+ this._isPanelOpen$.next(!this._isPanelOpen$.value);
51
+ }
52
+ /**
53
+ * Sets the panel mode
54
+ * @param mode The mode ('view' or 'edit')
55
+ */
56
+ setPanelMode(mode) {
57
+ this._panelMode$.next(mode);
58
+ }
59
+ /**
60
+ * Caches an artifact in memory
61
+ * @param artifact The artifact to cache
62
+ */
63
+ cacheArtifact(artifact) {
64
+ const current = this._artifacts$.value;
65
+ current.set(artifact.ID, artifact);
66
+ this._artifacts$.next(new Map(current));
67
+ }
68
+ /**
69
+ * Removes an artifact from cache
70
+ * @param id The artifact ID
71
+ */
72
+ removeCachedArtifact(id) {
73
+ const current = this._artifacts$.value;
74
+ current.delete(id);
75
+ this._artifacts$.next(new Map(current));
76
+ }
77
+ /**
78
+ * Clears all cached artifacts
79
+ */
80
+ clearCache() {
81
+ this._artifacts$.next(new Map());
82
+ }
83
+ /**
84
+ * Loads artifacts for a conversation
85
+ * @param conversationId The conversation ID
86
+ * @param currentUser The current user context
87
+ * @returns Array of artifacts
88
+ */
89
+ async loadArtifactsForConversation(conversationId, currentUser) {
90
+ try {
91
+ const rv = new RunView();
92
+ const result = await rv.RunView({
93
+ EntityName: 'MJ: Artifacts',
94
+ ExtraFilter: `ConversationID='${conversationId}'`,
95
+ OrderBy: '__mj_CreatedAt DESC',
96
+ MaxRows: 1000,
97
+ ResultType: 'entity_object'
98
+ }, currentUser);
99
+ if (result.Success && result.Results) {
100
+ // Cache all artifacts
101
+ result.Results.forEach(artifact => this.cacheArtifact(artifact));
102
+ return result.Results;
103
+ }
104
+ return [];
105
+ }
106
+ catch (error) {
107
+ console.error('Error loading artifacts:', error);
108
+ return [];
109
+ }
110
+ }
111
+ /**
112
+ * Loads artifacts for a collection
113
+ * @param collectionId The collection ID
114
+ * @param currentUser The current user context
115
+ * @returns Array of artifacts
116
+ */
117
+ async loadArtifactsForCollection(collectionId, currentUser) {
118
+ try {
119
+ const rv = new RunView();
120
+ // Need to load through Collection Artifacts junction table
121
+ const result = await rv.RunView({
122
+ EntityName: 'MJ: Collection Artifacts',
123
+ ExtraFilter: `CollectionID='${collectionId}'`,
124
+ OrderBy: '__mj_CreatedAt DESC',
125
+ MaxRows: 1000,
126
+ ResultType: 'entity_object'
127
+ }, currentUser);
128
+ if (result.Success && result.Results) {
129
+ // Load full artifact entities
130
+ const artifactIds = result.Results.map((ca) => ca.ArtifactID);
131
+ if (artifactIds.length === 0)
132
+ return [];
133
+ const artifactsResult = await rv.RunView({
134
+ EntityName: 'MJ: Artifacts',
135
+ ExtraFilter: `ID IN ('${artifactIds.join("','")}')`,
136
+ OrderBy: '__mj_CreatedAt DESC',
137
+ ResultType: 'entity_object'
138
+ }, currentUser);
139
+ if (artifactsResult.Success && artifactsResult.Results) {
140
+ artifactsResult.Results.forEach(artifact => this.cacheArtifact(artifact));
141
+ return artifactsResult.Results;
142
+ }
143
+ }
144
+ return [];
145
+ }
146
+ catch (error) {
147
+ console.error('Error loading collection artifacts:', error);
148
+ return [];
149
+ }
150
+ }
151
+ /**
152
+ * Loads a single artifact by ID
153
+ * @param id The artifact ID
154
+ * @param currentUser The current user context
155
+ * @returns The artifact entity or null
156
+ */
157
+ async loadArtifact(id, currentUser) {
158
+ try {
159
+ const md = new Metadata();
160
+ const artifact = await md.GetEntityObject('MJ: Artifacts', currentUser);
161
+ const loaded = await artifact.Load(id);
162
+ if (loaded) {
163
+ this.cacheArtifact(artifact);
164
+ return artifact;
165
+ }
166
+ return null;
167
+ }
168
+ catch (error) {
169
+ console.error('Error loading artifact:', error);
170
+ return null;
171
+ }
172
+ }
173
+ /**
174
+ * Creates a new artifact
175
+ * @param data Artifact data
176
+ * @param currentUser The current user context
177
+ * @returns The created artifact
178
+ */
179
+ async createArtifact(data, currentUser) {
180
+ const md = new Metadata();
181
+ const artifact = await md.GetEntityObject('Artifacts', currentUser);
182
+ Object.assign(artifact, data);
183
+ const saved = await artifact.Save();
184
+ if (saved) {
185
+ this.cacheArtifact(artifact);
186
+ return artifact;
187
+ }
188
+ else {
189
+ throw new Error(artifact.LatestResult?.Message || 'Failed to create artifact');
190
+ }
191
+ }
192
+ /**
193
+ * Updates an artifact
194
+ * @param id The artifact ID
195
+ * @param updates The fields to update
196
+ * @param currentUser The current user context
197
+ * @returns True if successful
198
+ */
199
+ async updateArtifact(id, updates, currentUser) {
200
+ const md = new Metadata();
201
+ const artifact = await md.GetEntityObject('Artifacts', currentUser);
202
+ const loaded = await artifact.Load(id);
203
+ if (!loaded) {
204
+ throw new Error('Artifact not found');
205
+ }
206
+ Object.assign(artifact, updates);
207
+ const saved = await artifact.Save();
208
+ if (saved) {
209
+ this.cacheArtifact(artifact);
210
+ return true;
211
+ }
212
+ else {
213
+ throw new Error(artifact.LatestResult?.Message || 'Failed to update artifact');
214
+ }
215
+ }
216
+ /**
217
+ * Deletes an artifact
218
+ * @param id The artifact ID
219
+ * @param currentUser The current user context
220
+ * @returns True if successful
221
+ */
222
+ async deleteArtifact(id, currentUser) {
223
+ const md = new Metadata();
224
+ const artifact = await md.GetEntityObject('Artifacts', currentUser);
225
+ const loaded = await artifact.Load(id);
226
+ if (!loaded) {
227
+ throw new Error('Artifact not found');
228
+ }
229
+ const deleted = await artifact.Delete();
230
+ if (deleted) {
231
+ this.removeCachedArtifact(id);
232
+ if (this._activeArtifactId$.value === id) {
233
+ this.closeArtifact();
234
+ }
235
+ return true;
236
+ }
237
+ else {
238
+ throw new Error(artifact.LatestResult?.Message || 'Failed to delete artifact');
239
+ }
240
+ }
241
+ /**
242
+ * Adds an artifact to a collection
243
+ * @param artifactId The artifact ID
244
+ * @param collectionId The collection ID
245
+ * @param currentUser The current user context
246
+ */
247
+ async addToCollection(artifactId, collectionId, currentUser) {
248
+ const md = new Metadata();
249
+ const collectionArtifact = await md.GetEntityObject('MJ: Collection Artifacts', currentUser);
250
+ collectionArtifact.CollectionID = collectionId;
251
+ collectionArtifact.ArtifactID = artifactId;
252
+ const saved = await collectionArtifact.Save();
253
+ if (!saved) {
254
+ throw new Error('Failed to add artifact to collection');
255
+ }
256
+ }
257
+ /**
258
+ * Removes an artifact from a collection
259
+ * @param artifactId The artifact ID
260
+ * @param collectionId The collection ID
261
+ * @param currentUser The current user context
262
+ */
263
+ async removeFromCollection(artifactId, collectionId, currentUser) {
264
+ const rv = new RunView();
265
+ const result = await rv.RunView({
266
+ EntityName: 'MJ: Collection Artifacts',
267
+ ExtraFilter: `CollectionID='${collectionId}' AND ArtifactID='${artifactId}'`,
268
+ MaxRows: 1,
269
+ ResultType: 'entity_object'
270
+ }, currentUser);
271
+ if (result.Success && result.Results && result.Results.length > 0) {
272
+ const collectionArtifact = result.Results[0];
273
+ const deleted = await collectionArtifact.Delete();
274
+ if (!deleted) {
275
+ throw new Error('Failed to remove artifact from collection');
276
+ }
277
+ }
278
+ }
279
+ static ɵfac = function ArtifactStateService_Factory(t) { return new (t || ArtifactStateService)(); };
280
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ArtifactStateService, factory: ArtifactStateService.ɵfac, providedIn: 'root' });
281
+ }
282
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArtifactStateService, [{
283
+ type: Injectable,
284
+ args: [{
285
+ providedIn: 'root'
286
+ }]
287
+ }], () => [], null); })();
288
+ //# sourceMappingURL=artifact-state.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-state.service.js","sourceRoot":"","sources":["../../../src/lib/services/artifact-state.service.ts"],"names":[],"mappings":"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"}