@minded-ai/mindedjs 1.0.95-beta-3 → 1.0.96-beta-1

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 (86) hide show
  1. package/dist/agent.d.ts +1 -4
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +41 -75
  4. package/dist/agent.js.map +1 -1
  5. package/dist/cli/index.js +12 -12
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/edges/createDirectEdge.js +1 -1
  8. package/dist/edges/createDirectEdge.js.map +1 -1
  9. package/dist/edges/createLogicalRouter.d.ts.map +1 -1
  10. package/dist/edges/createLogicalRouter.js +7 -7
  11. package/dist/edges/createLogicalRouter.js.map +1 -1
  12. package/dist/edges/createPromptRouter.d.ts.map +1 -1
  13. package/dist/edges/createPromptRouter.js +3 -4
  14. package/dist/edges/createPromptRouter.js.map +1 -1
  15. package/dist/edges/edgeFactory.js +2 -2
  16. package/dist/edges/edgeFactory.js.map +1 -1
  17. package/dist/nodes/addAppToolNode.js +3 -3
  18. package/dist/nodes/addAppToolNode.js.map +1 -1
  19. package/dist/nodes/addHumanInTheLoopNode.d.ts.map +1 -1
  20. package/dist/nodes/addHumanInTheLoopNode.js +2 -3
  21. package/dist/nodes/addHumanInTheLoopNode.js.map +1 -1
  22. package/dist/nodes/addJumpToNode.js +1 -1
  23. package/dist/nodes/addJumpToNode.js.map +1 -1
  24. package/dist/nodes/addPromptNode.d.ts.map +1 -1
  25. package/dist/nodes/addPromptNode.js +1 -45
  26. package/dist/nodes/addPromptNode.js.map +1 -1
  27. package/dist/nodes/addToolNode.d.ts.map +1 -1
  28. package/dist/nodes/addToolNode.js +1 -4
  29. package/dist/nodes/addToolNode.js.map +1 -1
  30. package/dist/nodes/addToolRunNode.d.ts.map +1 -1
  31. package/dist/nodes/addToolRunNode.js +0 -1
  32. package/dist/nodes/addToolRunNode.js.map +1 -1
  33. package/dist/nodes/addTriggerNode.js +1 -1
  34. package/dist/nodes/addTriggerNode.js.map +1 -1
  35. package/dist/platform/mindedConnection.d.ts.map +1 -1
  36. package/dist/platform/mindedConnection.js +12 -12
  37. package/dist/platform/mindedConnection.js.map +1 -1
  38. package/dist/platform/mindedConnectionTypes.d.ts +1 -151
  39. package/dist/platform/mindedConnectionTypes.d.ts.map +1 -1
  40. package/dist/platform/mindedConnectionTypes.js +0 -9
  41. package/dist/platform/mindedConnectionTypes.js.map +1 -1
  42. package/dist/playbooks/playbooks.js +4 -4
  43. package/dist/playbooks/playbooks.js.map +1 -1
  44. package/dist/types/Agent.types.d.ts +0 -2
  45. package/dist/types/Agent.types.d.ts.map +1 -1
  46. package/dist/types/Agent.types.js.map +1 -1
  47. package/dist/types/Flows.types.d.ts +2 -1
  48. package/dist/types/Flows.types.d.ts.map +1 -1
  49. package/dist/types/Flows.types.js +1 -0
  50. package/dist/types/Flows.types.js.map +1 -1
  51. package/dist/types/LangGraph.types.d.ts +4 -2
  52. package/dist/types/LangGraph.types.d.ts.map +1 -1
  53. package/dist/types/LangGraph.types.js +5 -3
  54. package/dist/types/LangGraph.types.js.map +1 -1
  55. package/dist/utils/logger.d.ts.map +1 -1
  56. package/dist/utils/logger.js +0 -1
  57. package/dist/utils/logger.js.map +1 -1
  58. package/dist/voice/voiceSession.d.ts.map +1 -1
  59. package/dist/voice/voiceSession.js +3 -2
  60. package/dist/voice/voiceSession.js.map +1 -1
  61. package/package.json +1 -1
  62. package/src/agent.ts +45 -93
  63. package/src/cli/index.ts +12 -12
  64. package/src/edges/createDirectEdge.ts +1 -1
  65. package/src/edges/createLogicalRouter.ts +8 -7
  66. package/src/edges/createPromptRouter.ts +3 -4
  67. package/src/edges/edgeFactory.ts +2 -2
  68. package/src/nodes/addAppToolNode.ts +3 -3
  69. package/src/nodes/addHumanInTheLoopNode.ts +3 -3
  70. package/src/nodes/addJumpToNode.ts +1 -1
  71. package/src/nodes/addPromptNode.ts +6 -50
  72. package/src/nodes/addToolNode.ts +2 -4
  73. package/src/nodes/addToolRunNode.ts +1 -1
  74. package/src/nodes/addTriggerNode.ts +1 -1
  75. package/src/platform/mindedConnection.ts +25 -15
  76. package/src/platform/mindedConnectionTypes.ts +1 -188
  77. package/src/playbooks/playbooks.ts +4 -4
  78. package/src/types/Agent.types.ts +0 -2
  79. package/src/types/Flows.types.ts +1 -0
  80. package/src/types/LangGraph.types.ts +5 -3
  81. package/src/utils/logger.ts +0 -1
  82. package/src/voice/voiceSession.ts +4 -7
  83. package/src/interrupts/BaseInterruptSessionManager.ts +0 -94
  84. package/src/interrupts/MemoryInterruptSessionManager.ts +0 -57
  85. package/src/interrupts/MindedInterruptSessionManager.ts +0 -155
  86. package/src/interrupts/interruptSessionManagerFactory.ts +0 -20
@@ -33,15 +33,6 @@ export enum mindedConnectionSocketMessageType {
33
33
  TIMER_RESET = 'timer-reset',
34
34
  TIMER_CANCEL = 'timer-cancel',
35
35
  TIMER_TRIGGER = 'timer-trigger',
36
- // Interrupt Session Management
37
- INTERRUPT_SESSION_IS_PROCESSED = 'interrupt-session-is-processed',
38
- INTERRUPT_SESSION_LOCK = 'interrupt-session-lock',
39
- INTERRUPT_SESSION_RELEASE = 'interrupt-session-release',
40
- INTERRUPT_SESSION_ENQUEUE = 'interrupt-session-enqueue',
41
- INTERRUPT_SESSION_DEQUEUE_ALL = 'interrupt-session-dequeue-all',
42
- INTERRUPT_SESSION_DEQUEUE = 'interrupt-session-dequeue',
43
- INTERRUPT_SESSION_HAS_MESSAGES = 'interrupt-session-has-messages',
44
- INTERRUPT_SESSION_GET_MESSAGES = 'interrupt-session-get-messages',
45
36
  }
46
37
 
47
38
  export type mindedConnectionSocketMessageTypeMap = {
@@ -66,15 +57,6 @@ export type mindedConnectionSocketMessageTypeMap = {
66
57
  [mindedConnectionSocketMessageType.TIMER_CANCEL]: TimerCancelRequest;
67
58
  [mindedConnectionSocketMessageType.TIMER_TRIGGER]: TimerTriggerRequest;
68
59
  [mindedConnectionSocketMessageType.RESTORE_CHECKPOINT]: RestoreCheckpointRequest;
69
- // Interrupt Session Management
70
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_IS_PROCESSED]: InterruptSessionIsProcessedRequest;
71
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_LOCK]: InterruptSessionLockRequest;
72
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_RELEASE]: InterruptSessionReleaseRequest;
73
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_ENQUEUE]: InterruptSessionEnqueueRequest;
74
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE_ALL]: InterruptSessionDequeueAllRequest;
75
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE]: InterruptSessionDequeueRequest;
76
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_HAS_MESSAGES]: InterruptSessionHasMessagesRequest;
77
- [mindedConnectionSocketMessageType.INTERRUPT_SESSION_GET_MESSAGES]: InterruptSessionGetMessagesRequest;
78
60
  };
79
61
 
80
62
  export interface BasemindedConnectionSocketMessage {
@@ -199,166 +181,6 @@ export interface TimerTriggerRequest extends BasemindedConnectionSocketMessage {
199
181
  eventArgs: Record<string, any>;
200
182
  }
201
183
 
202
- // Interrupt Session Management Interfaces
203
- export interface InterruptSessionIsProcessedRequest extends BasemindedConnectionSocketMessage {
204
- sessionId: string;
205
- }
206
-
207
- export interface InterruptSessionIsProcessedResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
208
- isProcessed?: boolean;
209
- }
210
-
211
- export interface InterruptSessionLockRequest extends BasemindedConnectionSocketMessage {
212
- sessionId: string;
213
- }
214
-
215
- export interface InterruptSessionLockResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
216
- lockAcquired?: boolean;
217
- }
218
-
219
- export interface InterruptSessionReleaseRequest extends BasemindedConnectionSocketMessage {
220
- sessionId: string;
221
- }
222
-
223
- export interface InterruptSessionReleaseResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
224
- success?: boolean;
225
- }
226
-
227
- export interface InterruptSessionEnqueueRequest extends BasemindedConnectionSocketMessage {
228
- sessionId: string;
229
- message: {
230
- triggerBody: any;
231
- triggerName: string;
232
- appName?: string;
233
- };
234
- }
235
-
236
- export interface InterruptSessionEnqueueResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
237
- success?: boolean;
238
- }
239
-
240
- export interface InterruptSessionDequeueAllRequest extends BasemindedConnectionSocketMessage {
241
- sessionId: string;
242
- }
243
-
244
- export interface InterruptSessionDequeueAllResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
245
- messages?: Array<{
246
- triggerBody: any;
247
- triggerName: string;
248
- appName?: string;
249
- }>;
250
- }
251
-
252
- export interface InterruptSessionDequeueRequest extends BasemindedConnectionSocketMessage {
253
- sessionId: string;
254
- }
255
-
256
- export interface InterruptSessionDequeueResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
257
- message?: {
258
- triggerBody: any;
259
- triggerName: string;
260
- appName?: string;
261
- } | null;
262
- }
263
-
264
- export interface InterruptSessionHasMessagesRequest extends BasemindedConnectionSocketMessage {
265
- sessionId: string;
266
- }
267
-
268
- export interface InterruptSessionHasMessagesResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
269
- hasMessages?: boolean;
270
- }
271
-
272
- export interface InterruptSessionGetMessagesRequest extends BasemindedConnectionSocketMessage {
273
- sessionId: string;
274
- }
275
-
276
- export interface InterruptSessionGetMessagesResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
277
- messages?: Array<{
278
- triggerBody: any;
279
- triggerName: string;
280
- appName?: string;
281
- }>;
282
- }
283
-
284
- // Interrupt Session Management Interfaces
285
- export interface InterruptSessionIsProcessedRequest extends BasemindedConnectionSocketMessage {
286
- sessionId: string;
287
- }
288
-
289
- export interface InterruptSessionIsProcessedResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
290
- isProcessed?: boolean;
291
- }
292
-
293
- export interface InterruptSessionLockRequest extends BasemindedConnectionSocketMessage {
294
- sessionId: string;
295
- }
296
-
297
- export interface InterruptSessionReleaseRequest extends BasemindedConnectionSocketMessage {
298
- sessionId: string;
299
- }
300
-
301
- export interface InterruptSessionReleaseResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
302
- success?: boolean;
303
- }
304
-
305
- export interface InterruptSessionEnqueueRequest extends BasemindedConnectionSocketMessage {
306
- sessionId: string;
307
- message: {
308
- triggerBody: any;
309
- triggerName: string;
310
- appName?: string;
311
- };
312
- }
313
-
314
- export interface InterruptSessionEnqueueResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
315
- success?: boolean;
316
- }
317
-
318
- export interface InterruptSessionDequeueAllRequest extends BasemindedConnectionSocketMessage {
319
- sessionId: string;
320
- }
321
-
322
- export interface InterruptSessionDequeueAllResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
323
- messages?: Array<{
324
- triggerBody: any;
325
- triggerName: string;
326
- appName?: string;
327
- }>;
328
- }
329
-
330
- export interface InterruptSessionDequeueRequest extends BasemindedConnectionSocketMessage {
331
- sessionId: string;
332
- }
333
-
334
- export interface InterruptSessionDequeueResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
335
- message?: {
336
- triggerBody: any;
337
- triggerName: string;
338
- appName?: string;
339
- } | null;
340
- }
341
-
342
- export interface InterruptSessionHasMessagesRequest extends BasemindedConnectionSocketMessage {
343
- sessionId: string;
344
- }
345
-
346
- export interface InterruptSessionHasMessagesResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
347
- hasMessages?: boolean;
348
- }
349
-
350
- export interface InterruptSessionGetMessagesRequest extends BasemindedConnectionSocketMessage {
351
- sessionId: string;
352
- }
353
-
354
- export interface InterruptSessionGetMessagesResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
355
- messages?: Array<{
356
- triggerBody: any;
357
- triggerName: string;
358
- appName?: string;
359
- }>;
360
- }
361
-
362
184
  export interface RestoreCheckpointRequest extends BasemindedConnectionSocketMessage {
363
185
  sessionId: string;
364
186
  checkpointId: string;
@@ -366,13 +188,4 @@ export interface RestoreCheckpointRequest extends BasemindedConnectionSocketMess
366
188
 
367
189
  export interface RestoreCheckpointResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
368
190
  success?: boolean;
369
- }
370
-
371
- export interface RestoreCheckpointRequest extends BasemindedConnectionSocketMessage {
372
- sessionId: string;
373
- checkpointId: string;
374
- }
375
-
376
- export interface RestoreCheckpointResponse extends BaseSdkConnectionSocketMessageResponseCallbackAck {
377
- success?: boolean;
378
- }
191
+ }
@@ -113,7 +113,7 @@ function loadPlaybooksFromDirectories(directories: string[]): Playbook[] {
113
113
 
114
114
  for (const directory of directories) {
115
115
  if (!fs.existsSync(directory)) {
116
- logger.info({ message: `Playbooks directory does not exist: ${directory}` });
116
+ logger.info(`Playbooks directory does not exist: ${directory}`);
117
117
  continue;
118
118
  }
119
119
 
@@ -126,12 +126,12 @@ function loadPlaybooksFromDirectories(directories: string[]): Playbook[] {
126
126
 
127
127
  if (playbook && playbook.name && playbook.blocks) {
128
128
  playbooks.push(playbook);
129
- logger.info({ message: `Loaded playbook: ${playbook.name} from ${file}` });
129
+ logger.info(`Loaded playbook: ${playbook.name} from ${file}`);
130
130
  } else {
131
- logger.warn({ message: `Invalid playbook structure in ${file}` });
131
+ logger.warn(`Invalid playbook structure in ${file}`);
132
132
  }
133
133
  } catch (error) {
134
- logger.error({ message: `Failed to load playbook file ${file}: ${error}` });
134
+ logger.error(`Failed to load playbook file ${file}: ${error}`);
135
135
  }
136
136
  }
137
137
  }
@@ -29,8 +29,6 @@ export interface AgentInvokeParams {
29
29
  sessionId?: string;
30
30
  /** Optional name of the application triggering the agent in case of an app trigger */
31
31
  appName?: string;
32
- /** Internal flag to bypass session processing check for recursive calls */
33
- bypassSessionCheck?: boolean;
34
32
  }
35
33
  export interface HistoryStep {
36
34
  type: NodeType;
@@ -11,6 +11,7 @@ export enum NodeType {
11
11
  APP_TOOL = 'appTool',
12
12
  PROMPT_NODE = 'promptNode',
13
13
  JUMP_TO_NODE = 'jumpToNode',
14
+ BROWSER_TASK = 'browserTask',
14
15
  }
15
16
 
16
17
  export enum EdgeType {
@@ -29,13 +29,15 @@ export const createStateAnnotation = <Memory = any>() =>
29
29
  default: () => [],
30
30
  reducer: (a, b) => a.concat(b),
31
31
  }),
32
- sessionId: Annotation<string>({
33
- reducer: (a, b) => b || a,
34
- }),
32
+ sessionId: Annotation<string>(),
35
33
  sessionType: Annotation<SessionType>({
36
34
  default: () => SessionType.TEXT,
37
35
  reducer: (a, b) => b || a,
38
36
  }),
37
+ overrideStartFromNodeId: Annotation<string | null>({
38
+ default: () => null,
39
+ reducer: (a, b) => b,
40
+ }),
39
41
  });
40
42
 
41
43
  // Default state annotation with any memory type
@@ -12,7 +12,6 @@ export const logger = pino({
12
12
  colorize: true,
13
13
  crlf: true,
14
14
  translateTime: 'SYS:standard',
15
- messageKey: 'message', // Use 'message' instead of default 'msg'
16
15
  },
17
16
  },
18
17
  formatters: {
@@ -235,13 +235,10 @@ export class VoiceSession {
235
235
  agentMessage.additional_kwargs = agentMessage.additional_kwargs || {};
236
236
  agentMessage.additional_kwargs.update = true;
237
237
  const currentNodeId = graphState.tasks[graphState.tasks.length - 1].name;
238
- await this.agent.compiledGraph.updateState(
239
- this.agent.getLangraphConfig(this.sessionId),
240
- {
241
- messages: [agentMessage],
242
- },
243
- currentNodeId,
244
- );
238
+ await this.agent.compiledGraph.updateState(graphState.config, {
239
+ messages: [agentMessage],
240
+ overrideStartFromNodeId: currentNodeId,
241
+ });
245
242
  } else {
246
243
  logger.warn({ message: 'Agent message not found for correction', sessionId: this.sessionId, originalAgentResponse });
247
244
  }
@@ -1,94 +0,0 @@
1
- import { State } from '../types/LangGraph.types';
2
- import { GraphInterrupt } from '@langchain/langgraph';
3
- import { logger } from '../utils/logger';
4
-
5
- export enum InterruptType {
6
- NEW_TRIGGERS = 'NEW_TRIGGERS',
7
- HUMAN_IN_THE_LOOP = 'HUMAN_IN_THE_LOOP',
8
- }
9
-
10
- export interface QueuedMessage {
11
- triggerBody: any;
12
- triggerName: string;
13
- appName?: string;
14
- }
15
-
16
- // export interface UpdateStateObject {
17
- // memory: any;
18
- // messages: any[];
19
- // history: any[];
20
- // sessionId: string;
21
- // sessionType: SessionType;
22
- // }
23
- export interface InterruptPayload {
24
- type: InterruptType.NEW_TRIGGERS;
25
- updateStateObject?: Partial<State>;
26
- id?: string;
27
- }
28
-
29
- export interface InterruptSessionManager {
30
- isProcessed(sessionId: string): boolean | Promise<boolean>;
31
- /**
32
- * Atomically attempts to acquire a lock for the given session.
33
- * This method should only succeed if the session is not already being processed.
34
- *
35
- * @param sessionId - The session ID to lock
36
- * @returns true if the lock was successfully acquired, false if the session is already locked
37
- */
38
- lock(sessionId: string): boolean | Promise<boolean>;
39
- release(sessionId: string): void | Promise<void>;
40
- enqueueMessage(sessionId: string, message: QueuedMessage): void | Promise<void>;
41
- dequeueAll(sessionId: string): QueuedMessage[] | Promise<QueuedMessage[]>;
42
- dequeue(sessionId: string): QueuedMessage | null | Promise<QueuedMessage | null>;
43
- checkQueueAndInterrupt(sessionId: string, updateStateObject?: Partial<State>): Promise<boolean>;
44
- }
45
-
46
- export abstract class BaseInterruptSessionManager implements InterruptSessionManager {
47
- // Abstract methods that subclasses must implement for queue management
48
- abstract isProcessed(sessionId: string): boolean | Promise<boolean>;
49
- /**
50
- * Atomically attempts to acquire a lock for the given session.
51
- * This method should only succeed if the session is not already being processed.
52
- * Implementations must ensure this operation is atomic to prevent race conditions.
53
- *
54
- * @param sessionId - The session ID to lock
55
- * @returns true if the lock was successfully acquired, false if the session is already locked
56
- */
57
- abstract lock(sessionId: string): boolean | Promise<boolean>;
58
- abstract release(sessionId: string): void | Promise<void>;
59
- abstract enqueueMessage(sessionId: string, message: QueuedMessage): void | Promise<void>;
60
- abstract dequeueAll(sessionId: string): QueuedMessage[] | Promise<QueuedMessage[]>;
61
- abstract dequeue(sessionId: string): QueuedMessage | null | Promise<QueuedMessage | null>;
62
-
63
- // Abstract method to check if queue has messages - this is the only queue-specific part
64
- protected abstract hasQueuedMessages(sessionId: string): boolean | Promise<boolean>;
65
- protected abstract getQueuedMessages(sessionId: string): QueuedMessage[] | Promise<QueuedMessage[]>;
66
-
67
- // Common implementation of checkQueueAndInterrupt
68
- async checkQueueAndInterrupt(sessionId: string, updateStateObject?: Partial<State>): Promise<boolean> {
69
- if (await this.hasQueuedMessages(sessionId)) {
70
- logger.trace({ message: 'graph has queued messagess, interrupting graph', sessionId });
71
-
72
- // Interrupt the graph with NEW_TRIGGERS flag and optional updateStateObject
73
- const interruptPayload: InterruptPayload = { type: InterruptType.NEW_TRIGGERS };
74
- if (updateStateObject) {
75
- interruptPayload.updateStateObject = {
76
- messages: updateStateObject.messages,
77
- memory: updateStateObject.memory,
78
- history: updateStateObject.history,
79
- sessionId: updateStateObject.sessionId,
80
- sessionType: updateStateObject.sessionType,
81
- };
82
- }
83
-
84
- throw new GraphInterrupt([
85
- {
86
- value: interruptPayload,
87
- when: 'during',
88
- resumable: true,
89
- },
90
- ]);
91
- }
92
- return false;
93
- }
94
- }
@@ -1,57 +0,0 @@
1
- import { BaseInterruptSessionManager, QueuedMessage } from './BaseInterruptSessionManager';
2
-
3
- export class MemoryInterruptSessionManager extends BaseInterruptSessionManager {
4
- private sessionProcessing: Map<string, boolean> = new Map();
5
- private sessionMessageQueues: Map<string, QueuedMessage[]> = new Map();
6
-
7
- isProcessed(sessionId: string): boolean {
8
- return this.sessionProcessing.get(sessionId) || false;
9
- }
10
-
11
- lock(sessionId: string): boolean {
12
- const isCurrentlyProcessed = this.sessionProcessing.get(sessionId) || false;
13
- if (isCurrentlyProcessed) {
14
- return false; // Could not acquire lock
15
- }
16
- this.sessionProcessing.set(sessionId, true);
17
- return true; // Successfully acquired lock
18
- }
19
-
20
- release(sessionId: string): void {
21
- this.sessionProcessing.set(sessionId, false);
22
- }
23
-
24
- enqueueMessage(sessionId: string, message: QueuedMessage): void {
25
- if (!this.sessionMessageQueues.has(sessionId)) {
26
- this.sessionMessageQueues.set(sessionId, []);
27
- }
28
- this.sessionMessageQueues.get(sessionId)!.push(message);
29
- }
30
-
31
- dequeueAll(sessionId: string): QueuedMessage[] {
32
- const messages = this.sessionMessageQueues.get(sessionId) || [];
33
- const result = [...messages];
34
- this.sessionMessageQueues.set(sessionId, []);
35
- return result;
36
- }
37
-
38
- dequeue(sessionId: string): QueuedMessage | null {
39
- const messages = this.sessionMessageQueues.get(sessionId) || [];
40
- if (messages.length === 0) {
41
- return null;
42
- }
43
- const firstMessage = messages.shift()!;
44
- this.sessionMessageQueues.set(sessionId, messages);
45
- return firstMessage;
46
- }
47
-
48
- // Implementation of abstract methods from BaseInterruptSessionManager
49
- protected hasQueuedMessages(sessionId: string): boolean {
50
- const queue = this.sessionMessageQueues.get(sessionId) || [];
51
- return queue.length > 0;
52
- }
53
-
54
- protected getQueuedMessages(sessionId: string): QueuedMessage[] {
55
- return this.sessionMessageQueues.get(sessionId) || [];
56
- }
57
- }
@@ -1,155 +0,0 @@
1
- import { BaseInterruptSessionManager, QueuedMessage } from './BaseInterruptSessionManager';
2
- import * as mindedConnection from '../platform/mindedConnection';
3
- import {
4
- mindedConnectionSocketMessageType,
5
- InterruptSessionIsProcessedRequest,
6
- InterruptSessionIsProcessedResponse,
7
- InterruptSessionLockRequest,
8
- InterruptSessionLockResponse,
9
- InterruptSessionReleaseRequest,
10
- InterruptSessionReleaseResponse,
11
- InterruptSessionEnqueueRequest,
12
- InterruptSessionEnqueueResponse,
13
- InterruptSessionDequeueAllRequest,
14
- InterruptSessionDequeueAllResponse,
15
- InterruptSessionDequeueRequest,
16
- InterruptSessionDequeueResponse,
17
- InterruptSessionHasMessagesRequest,
18
- InterruptSessionHasMessagesResponse,
19
- InterruptSessionGetMessagesRequest,
20
- InterruptSessionGetMessagesResponse,
21
- } from '../platform/mindedConnectionTypes';
22
-
23
- export class MindedInterruptSessionManager extends BaseInterruptSessionManager {
24
- constructor() {
25
- super();
26
- }
27
-
28
- async isProcessed(sessionId: string): Promise<boolean> {
29
- try {
30
- const response = await mindedConnection.awaitEmit<InterruptSessionIsProcessedRequest, InterruptSessionIsProcessedResponse>(
31
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_IS_PROCESSED,
32
- {
33
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_IS_PROCESSED,
34
- sessionId,
35
- },
36
- );
37
- return response.isProcessed ?? false;
38
- } catch (error) {
39
- console.error('Error checking if session is processed:', error);
40
- return false;
41
- }
42
- }
43
-
44
- async lock(sessionId: string): Promise<boolean> {
45
- try {
46
- const response = await mindedConnection.awaitEmit<InterruptSessionLockRequest, InterruptSessionLockResponse>(
47
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_LOCK,
48
- {
49
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_LOCK,
50
- sessionId,
51
- },
52
- );
53
- return response.lockAcquired ?? false;
54
- } catch (error) {
55
- console.error('Error locking session:', error);
56
- return false;
57
- }
58
- }
59
-
60
- async release(sessionId: string): Promise<void> {
61
- try {
62
- await mindedConnection.awaitEmit<InterruptSessionReleaseRequest, InterruptSessionReleaseResponse>(
63
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_RELEASE,
64
- {
65
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_RELEASE,
66
- sessionId,
67
- },
68
- );
69
- } catch (error) {
70
- console.error('Error releasing session:', error);
71
- throw error;
72
- }
73
- }
74
-
75
- async enqueueMessage(sessionId: string, message: QueuedMessage): Promise<void> {
76
- try {
77
- await mindedConnection.awaitEmit<InterruptSessionEnqueueRequest, InterruptSessionEnqueueResponse>(
78
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_ENQUEUE,
79
- {
80
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_ENQUEUE,
81
- sessionId,
82
- message,
83
- },
84
- );
85
- } catch (error) {
86
- console.error('Error enqueuing message:', error);
87
- throw error;
88
- }
89
- }
90
-
91
- async dequeueAll(sessionId: string): Promise<QueuedMessage[]> {
92
- try {
93
- const response = await mindedConnection.awaitEmit<InterruptSessionDequeueAllRequest, InterruptSessionDequeueAllResponse>(
94
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE_ALL,
95
- {
96
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE_ALL,
97
- sessionId,
98
- },
99
- );
100
- return response.messages ?? [];
101
- } catch (error) {
102
- console.error('Error dequeuing all messages:', error);
103
- return [];
104
- }
105
- }
106
-
107
- async dequeue(sessionId: string): Promise<QueuedMessage | null> {
108
- try {
109
- const response = await mindedConnection.awaitEmit<InterruptSessionDequeueRequest, InterruptSessionDequeueResponse>(
110
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE,
111
- {
112
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_DEQUEUE,
113
- sessionId,
114
- },
115
- );
116
- return response.message ?? null;
117
- } catch (error) {
118
- console.error('Error dequeuing message:', error);
119
- return null;
120
- }
121
- }
122
-
123
- // Implementation of abstract methods from BaseInterruptSessionManager
124
- protected async hasQueuedMessages(sessionId: string): Promise<boolean> {
125
- try {
126
- const response = await mindedConnection.awaitEmit<InterruptSessionHasMessagesRequest, InterruptSessionHasMessagesResponse>(
127
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_HAS_MESSAGES,
128
- {
129
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_HAS_MESSAGES,
130
- sessionId,
131
- },
132
- );
133
- return response.hasMessages ?? false;
134
- } catch (error) {
135
- console.error('Error checking if session has messages:', error);
136
- return false;
137
- }
138
- }
139
-
140
- protected async getQueuedMessages(sessionId: string): Promise<QueuedMessage[]> {
141
- try {
142
- const response = await mindedConnection.awaitEmit<InterruptSessionGetMessagesRequest, InterruptSessionGetMessagesResponse>(
143
- mindedConnectionSocketMessageType.INTERRUPT_SESSION_GET_MESSAGES,
144
- {
145
- type: mindedConnectionSocketMessageType.INTERRUPT_SESSION_GET_MESSAGES,
146
- sessionId,
147
- },
148
- );
149
- return response.messages ?? [];
150
- } catch (error) {
151
- console.error('Error getting queued messages:', error);
152
- return [];
153
- }
154
- }
155
- }
@@ -1,20 +0,0 @@
1
- import { InterruptSessionManager } from './BaseInterruptSessionManager';
2
- import { MemoryInterruptSessionManager } from './MemoryInterruptSessionManager';
3
- import { MindedInterruptSessionManager } from './MindedInterruptSessionManager';
4
- import * as mindedConnection from '../platform/mindedConnection';
5
- import { getConfig } from '../platform/config';
6
- import { logger } from '../utils/logger';
7
-
8
- export function createInterruptSessionManager(): InterruptSessionManager {
9
- const { runLocally } = getConfig();
10
- if (runLocally) {
11
- logger.info({ message: 'Using memory interrupt session manager' });
12
- return new MemoryInterruptSessionManager();
13
- } else {
14
- if (!mindedConnection.isConnected()) {
15
- throw new Error('MindedConnection is required for platform interrupt session manager');
16
- }
17
- logger.info({ message: 'Using Minded interrupt session manager' });
18
- return new MindedInterruptSessionManager();
19
- }
20
- }