@minded-ai/mindedjs 1.0.141 → 1.0.142-beta-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,17 @@
1
1
  import * as mindedConnection from '../platform/mindedConnection';
2
2
  import { mindedConnectionSocketMessageType, TimerResetResponse, TimerCancelResponse } from '../platform/mindedConnectionTypes';
3
3
 
4
- // Store timer handlers by timer name
4
+ // Store timer handlers by timer name (one handler per timer name)
5
5
  export const timerHandlers = new Map<
6
6
  string,
7
- Array<{
7
+ {
8
8
  handler: (params: { sessionId: string; payload: Record<string, any> }) => void | Promise<void>;
9
- }>
9
+ }
10
10
  >();
11
11
 
12
12
  /**
13
13
  * Reset or set a timer for a specific session.
14
- * When the timer expires, all registered timer handlers will be called.
14
+ * When the timer expires, the registered timer handler will be called.
15
15
  *
16
16
  * @param params - The timer configuration
17
17
  * @param params.sessionId - The session ID to associate the timer with
@@ -85,6 +85,9 @@ export async function cancelTimer(sessionId: string, timerName: string): Promise
85
85
  * Register a handler for timer trigger events for a specific timer name.
86
86
  * The handler will be called when the specified timer expires for any session.
87
87
  *
88
+ * Note: Only one handler per timer name is supported. Calling this function multiple times
89
+ * with the same timer name will replace the previous handler.
90
+ *
88
91
  * @param params - The configuration for the timer handler
89
92
  * @param params.timerName - The name of the timer to handle
90
93
  * @param params.handler - Function to call when the timer triggers
@@ -116,23 +119,17 @@ export function onTimer({
116
119
  timerName: string;
117
120
  handler: (params: { sessionId: string; payload: Record<string, any> }) => void | Promise<void>;
118
121
  }): void {
119
- // Initialize handlers array for this timer name if it doesn't exist
120
- if (!timerHandlers.has(timerName)) {
121
- timerHandlers.set(timerName, []);
122
- }
123
-
124
- // Add the handler to the array for this timer name
125
- const handlers = timerHandlers.get(timerName)!;
126
- handlers.push({ handler });
122
+ // Set the handler for this timer name (replaces any existing handler)
123
+ timerHandlers.set(timerName, { handler });
127
124
  }
128
125
 
129
126
  mindedConnection.on(mindedConnectionSocketMessageType.TIMER_TRIGGER, async (timerTriggerMessage) => {
130
- // Get handlers for the specific timer name
131
- const handlers = timerHandlers.get(timerTriggerMessage.timerName) || [];
127
+ // Get handler for the specific timer name
128
+ const handlerEntry = timerHandlers.get(timerTriggerMessage.timerName);
132
129
 
133
- // Call all handlers registered for this timer name
134
- for (const { handler } of handlers) {
135
- await handler({
130
+ // Call the handler if it exists
131
+ if (handlerEntry) {
132
+ await handlerEntry.handler({
136
133
  sessionId: timerTriggerMessage.sessionId,
137
134
  payload: timerTriggerMessage.eventArgs,
138
135
  });
@@ -141,12 +141,16 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
141
141
  };
142
142
  }
143
143
 
144
+ // Model text response
144
145
  state.goto = null;
145
- state.messages.push(result);
146
- let stateUpdate: any = { goto: null, messages: state.messages };
146
+ //update state so AI_MESSAGE will get the latest state
147
+ const stateForAIMessage = structuredClone(state);
148
+ stateForAIMessage.goto = null;
149
+ stateForAIMessage.messages.push(result);
150
+ let stateUpdate: any = { goto: null, messages: [result] };
147
151
  if (result.getType() === 'ai') {
148
152
  logger.info({ msg: `[Model] Response`, content: result.content });
149
- const results = await emit(AgentEvents.AI_MESSAGE, { message: result.content as string, state });
153
+ const results = await emit(AgentEvents.AI_MESSAGE, { message: result.content as string, state: stateForAIMessage });
150
154
  const handlerResult = results.find((r) => r !== undefined);
151
155
  if (handlerResult && handlerResult.state) {
152
156
  stateUpdate = { ...stateUpdate, ...handlerResult.state };