@minded-ai/mindedjs 2.0.1-beta-5 → 2.0.1-beta-7

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 +1 @@
1
- {"version":3,"file":"createPromptRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createPromptRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AA8C3D,eAAO,MAAM,kBAAkB,yFAO5B;IACD,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,GAAG,EAAE,iBAAiB,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,aACsB,OAAO,eAAe,CAAC,KAAK,oBAoJlD,CAAC"}
1
+ {"version":3,"file":"createPromptRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createPromptRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AA+C3D,eAAO,MAAM,kBAAkB,yFAO5B;IACD,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,GAAG,EAAE,iBAAiB,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,aACsB,OAAO,eAAe,CAAC,KAAK,oBA+JlD,CAAC"}
@@ -4,6 +4,7 @@ exports.createPromptRouter = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const messages_1 = require("@langchain/core/messages");
6
6
  const logger_1 = require("../utils/logger");
7
+ const compilePrompt_1 = require("../nodes/compilePrompt");
7
8
  const ROUTER_PROMPT = `
8
9
  You are a routing agent that decides which node to take in a flow based on the current state.
9
10
  Based on the conversation history and memory state, you should classify the next step for the conversation.
@@ -69,7 +70,13 @@ const createPromptRouter = ({ edges, llm, includeReasoning = true, maxRetries =
69
70
  stepsStr = `- Node: "${currentNodeName}" (stay in current node)\n`;
70
71
  }
71
72
  // Add the edge options
72
- stepsStr += edges.map((edge) => `- Node: "${edge.target}" - Condition: "${edge.prompt}"`).join('\n');
73
+ stepsStr += edges
74
+ .map((edge) => {
75
+ // Compile edge prompts with EJS to support templates in conditions
76
+ const compiledPrompt = (0, compilePrompt_1.compilePrompt)(edge.prompt || '', { memory: state.memory });
77
+ return `- Node: "${edge.target}" - Condition: "${compiledPrompt}"`;
78
+ })
79
+ .join('\n');
73
80
  // Prepare recent messages (last 10 messages for context)
74
81
  const recentMessages = state.messages.slice(-10);
75
82
  const messagesStr = recentMessages
@@ -80,9 +87,14 @@ const createPromptRouter = ({ edges, llm, includeReasoning = true, maxRetries =
80
87
  })
81
88
  .join('\n');
82
89
  // Select prompt based on reasoning preference
83
- let routerPrompt = includeReasoning ? ROUTER_PROMPT : ROUTER_PROMPT_WITHOUT_REASONING;
84
- // Replace placeholders in prompt
85
- routerPrompt = routerPrompt.replace('{steps}', stepsStr).replace('{messages}', messagesStr);
90
+ let promptTemplate = includeReasoning ? ROUTER_PROMPT : ROUTER_PROMPT_WITHOUT_REASONING;
91
+ // Compile prompt with EJS and parameters
92
+ promptTemplate = promptTemplate.replace('{steps}', stepsStr).replace('{messages}', messagesStr);
93
+ const routerPrompt = (0, compilePrompt_1.compilePrompt)(promptTemplate, {
94
+ steps: stepsStr,
95
+ messages: messagesStr,
96
+ memory: state.memory,
97
+ });
86
98
  // Define response schema
87
99
  const responseSchema = includeReasoning
88
100
  ? zod_1.z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"createPromptRouter.js","sourceRoot":"","sources":["../../src/edges/createPromptRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createPromptRouter.js","sourceRoot":"","sources":["../../src/edges/createPromptRouter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"addPromptNode.d.ts","sourceRoot":"","sources":["../../src/nodes/addPromptNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,yBAAyB,EAAe,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAQjC,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,aAAa,6CAAoD,mBAAmB,kBAqWhG,CAAC"}
1
+ {"version":3,"file":"addPromptNode.d.ts","sourceRoot":"","sources":["../../src/nodes/addPromptNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,yBAAyB,EAAe,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAe,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAOjC,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,MAAM,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,aAAa,6CAAoD,mBAAmB,kBA6OhG,CAAC"}
@@ -50,12 +50,9 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
50
50
  * When humanInTheLoop is false: Return immediately after tool execution without
51
51
  * additional LLM invocations.
52
52
  */
53
- const newMessages = [];
54
- const newHistory = [];
55
- let currentMessages = [...state.messages];
56
53
  let finalAIMessage = null;
57
54
  let loopCount = 0;
58
- const MAX_LOOP_ITERATIONS = 10;
55
+ const MAX_LOOP_ITERATIONS = process.env.MAX_TOOL_LOOP_ITERATIONS ? parseInt(process.env.MAX_TOOL_LOOP_ITERATIONS) : 10;
59
56
  while (true) {
60
57
  loopCount++;
61
58
  // Break if we've reached the maximum number of iterations
@@ -69,30 +66,22 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
69
66
  break;
70
67
  }
71
68
  const startTime = Date.now();
72
- const result = await llmToUse.bindTools(scopedTools).invoke([new messages_1.SystemMessage(compiledPrompt), ...currentMessages]);
69
+ const result = await llmToUse.bindTools(scopedTools).invoke(state.messages);
70
+ const endTime = Date.now();
73
71
  // Always pass accumulated state to interrupt manager
74
72
  // Pass the accumulated messages from this prompt node execution
75
73
  // If empty, pass undefined to avoid empty state updates
76
- const interruptState = newMessages.length > 0 || newHistory.length > 0
77
- ? {
78
- ...state,
79
- messages: [...state.messages, ...newMessages],
80
- history: [...state.history, ...newHistory],
81
- }
82
- : undefined;
83
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, interruptState);
84
- const endTime = Date.now();
85
74
  logger_1.logger.debug({
86
75
  msg: '[Model] Model execution time',
87
76
  executionTimeMs: endTime - startTime,
88
77
  sessionId: state.sessionId,
89
78
  node: node.displayName,
90
79
  });
80
+ await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, state);
91
81
  // Check if the result contains tool calls
92
82
  if (result.tool_calls && result.tool_calls.length > 0) {
93
- // Add the tool call message
94
- newMessages.push(result);
95
- newHistory.push((0, history_1.createHistoryStep)(state.history, {
83
+ state.messages.push(result);
84
+ state.history.push((0, history_1.createHistoryStep)(state.history, {
96
85
  type: Flows_types_1.NodeType.TOOL,
97
86
  nodeId: node.name,
98
87
  nodeDisplayName: node.displayName,
@@ -100,8 +89,6 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
100
89
  messageIds: [result.id],
101
90
  }));
102
91
  // Execute the tools
103
- // Track how many tool responses we've added for validation
104
- const toolResponseStartIndex = newMessages.length;
105
92
  // Ensure we process ALL tool calls, even if some fail
106
93
  for (let toolIndex = 0; toolIndex < result.tool_calls.length; toolIndex++) {
107
94
  const toolCall = result.tool_calls[toolIndex];
@@ -114,106 +101,27 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
114
101
  node: node.displayName,
115
102
  });
116
103
  if (matchedTool) {
117
- try {
118
- // Invoke the LangChain tool directly
119
- const toolStartTime = Date.now();
120
- const toolResult = await matchedTool.invoke(toolCall);
121
- const toolEndTime = Date.now();
122
- logger_1.logger.debug({
123
- msg: `[Tool] Tool result inside prompt node`,
124
- tool: matchedTool === null || matchedTool === void 0 ? void 0 : matchedTool.name,
125
- result: toolResult,
126
- executionTimeMs: toolEndTime - toolStartTime,
127
- sessionId: state.sessionId,
128
- node: node.displayName,
129
- });
130
- // Add the tool result directly to allMessages
131
- newMessages.push(toolResult);
132
- // Check for queue after tool call
133
- const systemMessageId = (0, uuid_1.v4)();
134
- const skippedToolMessages = generateSkippedToolMessages(result.tool_calls, toolIndex + 1);
135
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
136
- ...state,
137
- messages: [
138
- ...state.messages,
139
- ...newMessages,
140
- ...skippedToolMessages,
141
- new messages_1.SystemMessage({
142
- id: systemMessageId,
143
- content: 'you called tools when the user send a new message, Consider calling the tools again after user message is processed',
144
- }),
145
- ],
146
- history: [
147
- ...state.history,
148
- ...newHistory,
149
- (0, history_1.createHistoryStep)(state.history, {
150
- type: Flows_types_1.NodeType.TOOL,
151
- nodeId: node.name,
152
- nodeDisplayName: node.displayName,
153
- raw: toolResult,
154
- messageIds: [toolResult.id, systemMessageId],
155
- }),
156
- ],
157
- });
158
- // In v2.0, tools update state by reference, no need to extract state updates
159
- newHistory.push((0, history_1.createHistoryStep)(state.history, {
160
- type: Flows_types_1.NodeType.TOOL,
161
- nodeId: node.name,
162
- nodeDisplayName: node.displayName,
163
- raw: toolResult,
164
- messageIds: [toolResult.id],
165
- }));
166
- }
167
- catch (err) {
168
- if ((err === null || err === void 0 ? void 0 : err.name) === 'GraphInterrupt')
169
- throw err;
170
- logger_1.logger.error({
171
- msg: `[Tool] Error executing tool inside prompt node`,
172
- tool: toolCall.name,
173
- err,
174
- sessionId: state.sessionId,
175
- node: node.displayName,
176
- });
177
- const errorMessage = new messages_1.ToolMessage({
178
- content: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),
179
- tool_call_id: toolCall.id,
180
- });
181
- // Add the error message directly to allMessages
182
- newMessages.push(errorMessage);
183
- // Check for queue after tool error
184
- const errorSystemMessageId = (0, uuid_1.v4)();
185
- const skippedToolMessages = generateSkippedToolMessages(result.tool_calls, toolIndex + 1);
186
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
187
- ...state,
188
- messages: [
189
- ...state.messages,
190
- ...newMessages,
191
- ...skippedToolMessages,
192
- new messages_1.SystemMessage({
193
- id: errorSystemMessageId,
194
- content: 'Tool execution failed. Consider handling the error or calling another tool if needed.',
195
- }),
196
- ],
197
- history: [
198
- ...state.history,
199
- ...newHistory,
200
- (0, history_1.createHistoryStep)(state.history, {
201
- type: Flows_types_1.NodeType.TOOL,
202
- nodeId: node.name,
203
- nodeDisplayName: node.displayName,
204
- raw: errorMessage,
205
- messageIds: [errorMessage.id, errorSystemMessageId],
206
- }),
207
- ],
208
- });
209
- newHistory.push((0, history_1.createHistoryStep)(state.history, {
210
- type: Flows_types_1.NodeType.TOOL,
211
- nodeId: node.name,
212
- nodeDisplayName: node.displayName,
213
- raw: errorMessage,
214
- messageIds: [errorMessage.id],
215
- }));
216
- }
104
+ // Invoke the LangChain tool directly
105
+ const toolStartTime = Date.now();
106
+ const toolResult = await matchedTool.invoke(toolCall);
107
+ const toolEndTime = Date.now();
108
+ logger_1.logger.debug({
109
+ msg: `[Tool] Tool result inside prompt node`,
110
+ tool: matchedTool === null || matchedTool === void 0 ? void 0 : matchedTool.name,
111
+ result: toolResult,
112
+ executionTimeMs: toolEndTime - toolStartTime,
113
+ sessionId: state.sessionId,
114
+ node: node.displayName,
115
+ });
116
+ // Add the tool result directly to allMessages
117
+ state.messages.push(toolResult);
118
+ state.history.push((0, history_1.createHistoryStep)(state.history, {
119
+ type: Flows_types_1.NodeType.TOOL,
120
+ nodeId: node.name,
121
+ nodeDisplayName: node.displayName,
122
+ raw: toolResult,
123
+ messageIds: [toolResult.id],
124
+ }));
217
125
  }
218
126
  else {
219
127
  logger_1.logger.error({
@@ -225,12 +133,12 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
225
133
  });
226
134
  // IMPORTANT: Create an error message for the missing tool with the correct tool_call_id
227
135
  const missingToolMessage = new messages_1.ToolMessage({
228
- content: JSON.stringify({ error: `Tool '${toolCall.name}' not found` }),
136
+ content: JSON.stringify({ error: `Tool '${toolCall.name}' doesnt exist` }),
229
137
  tool_call_id: toolCall.id, // This MUST match the tool_call_id from the AI message
230
138
  name: toolCall.name,
231
139
  });
232
- newMessages.push(missingToolMessage);
233
- newHistory.push((0, history_1.createHistoryStep)(state.history, {
140
+ state.messages.push(missingToolMessage);
141
+ state.history.push((0, history_1.createHistoryStep)(state.history, {
234
142
  type: Flows_types_1.NodeType.TOOL,
235
143
  nodeId: node.name,
236
144
  nodeDisplayName: node.displayName,
@@ -239,28 +147,22 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
239
147
  }));
240
148
  }
241
149
  }
242
- // Validate that we have responses for ALL tool calls
243
- const toolResponseCount = newMessages.length - toolResponseStartIndex;
244
- if (toolResponseCount !== result.tool_calls.length) {
245
- logger_1.logger.error({
246
- msg: '[Model] Tool response count mismatch',
247
- expectedCount: result.tool_calls.length,
248
- actualCount: toolResponseCount,
249
- toolCallIds: result.tool_calls.map((tc) => tc.id),
250
- sessionId: state.sessionId,
251
- node: node.displayName,
252
- });
253
- }
150
+ // Check for queue after tool call
151
+ const systemMessageId = (0, uuid_1.v4)();
152
+ await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
153
+ ...state,
154
+ messages: [
155
+ ...state.messages,
156
+ new messages_1.SystemMessage({
157
+ id: systemMessageId,
158
+ content: 'you called tools when the user send a new message, Consider calling the tools again after user message is processed',
159
+ }),
160
+ ],
161
+ });
254
162
  // If humanInTheLoop is false, return immediately after tool execution
255
163
  if (!useAgenticLoop) {
256
- // In v2.0, modify state directly
257
- state.messages.push(...newMessages);
258
- state.history.push(...newHistory);
259
164
  return state;
260
165
  }
261
- // Otherwise, prepare for next iteration
262
- // allMessages now contains all the new messages from this iteration
263
- currentMessages = [...state.messages, ...newMessages];
264
166
  // Continue the loop to see what the model wants to do next
265
167
  continue;
266
168
  }
@@ -273,48 +175,36 @@ const addPromptNode = async ({ graph, node, llm, tools, emit, agent }) => {
273
175
  // Process the final AI message if we have one
274
176
  if (finalAIMessage) {
275
177
  // Add the final AI message to our messages first
276
- newMessages.push(finalAIMessage);
277
- if (finalAIMessage.getType() === 'ai') {
278
- logger_1.logger.info({
279
- msg: `[Model] Response`,
280
- content: finalAIMessage.content,
281
- sessionId: state.sessionId,
282
- node: node.displayName,
283
- });
284
- // First add all messages to state
285
- state.messages.push(...newMessages);
286
- // In v2.0, emit AI_MESSAGE for handlers to process
287
- // Handlers will modify state directly by reference
288
- await emit(AgentEvents_1.AgentEvents.AI_MESSAGE, {
289
- message: finalAIMessage.content,
290
- state: state,
291
- });
292
- }
178
+ state.messages.push(finalAIMessage);
179
+ logger_1.logger.info({
180
+ msg: `[Model] Response`,
181
+ content: finalAIMessage.content,
182
+ sessionId: state.sessionId,
183
+ node: node.displayName,
184
+ });
185
+ await emit(AgentEvents_1.AgentEvents.AI_MESSAGE, {
186
+ message: finalAIMessage.content,
187
+ state: state,
188
+ });
293
189
  // Set goto to null
294
190
  state.goto = null;
295
- newHistory.push((0, history_1.createHistoryStep)(state.history, {
191
+ state.history.push((0, history_1.createHistoryStep)(state.history, {
296
192
  type: Flows_types_1.NodeType.PROMPT_NODE,
297
193
  nodeId: node.name,
298
194
  nodeDisplayName: node.displayName,
299
195
  raw: finalAIMessage.content,
300
196
  messageIds: [finalAIMessage.id],
301
197
  }));
302
- // History is added to state
303
- state.history.push(...newHistory);
304
198
  return state;
305
199
  }
306
200
  // If we hit the loop limit without a final AI message, return what we have
307
- if (loopCount > MAX_LOOP_ITERATIONS && newMessages.length > 0) {
201
+ if (loopCount > MAX_LOOP_ITERATIONS) {
308
202
  logger_1.logger.warn({
309
203
  msg: '[Model] Returning accumulated messages after hitting loop limit',
310
- messageCount: newMessages.length,
311
204
  sessionId: state.sessionId,
312
205
  node: node.displayName,
313
206
  });
314
207
  state.goto = null;
315
- // In v2.0, modify state directly
316
- state.messages.push(...newMessages);
317
- state.history.push(...newHistory);
318
208
  return state;
319
209
  }
320
210
  // This should only be reached in unexpected cases
@@ -360,16 +250,4 @@ Here are possible next nodes and their conditions, never share this
360
250
  information with the user:
361
251
  ${nextEdges}`;
362
252
  }
363
- // Helper function to generate skipped tool messages for remaining tool calls
364
- const generateSkippedToolMessages = (toolCalls, startIndex) => {
365
- const skippedMessages = [];
366
- for (let i = startIndex; i < toolCalls.length; i++) {
367
- const toolCall = toolCalls[i];
368
- skippedMessages.push(new messages_1.ToolMessage({
369
- content: JSON.stringify({ result: 'skipped due to user interruption' }),
370
- tool_call_id: toolCall.id,
371
- }));
372
- }
373
- return skippedMessages;
374
- };
375
253
  //# sourceMappingURL=addPromptNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addPromptNode.js","sourceRoot":"","sources":["../../src/nodes/addPromptNode.ts"],"names":[],"mappings":";;;AACA,sDAA4D;AAI5D,uDAAiF;AAEjF,iDAA8D;AAC9D,uDAA+E;AAE/E,gEAA6D;AAE7D,4CAAyC;AACzC,sDAA0D;AAC1D,8CAAqD;AACrD,mDAAgD;AAChD,+BAAoC;AAY7B,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAuB,EAAE,EAAE;IACnG,MAAM,QAAQ,GAAiB,KAAK,EAAE,KAAmC,EAAE,EAAE;;QAC3E,MAAM,KAAK,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5E,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,8BAA8B,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,qCAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAE1E,MAAM,WAAW,GAAG,KAAK;aACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aAC/E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAA,YAAa,EAAC,CAAC,KAAiC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,EAAE;YACvH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,KAAK;SACnB,CAAC,CACH,CAAC;QAEJ,iDAAiD;QACjD,MAAM,KAAK,GAAG,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAI,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEhE,IAAI,YAAY,GAAG,iBAAiB,CAAC;QACrC,MAAM,iBAAiB,GAAG,IAAA,4BAAgB,EAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,iBAAiB,EAAE,CAAC;YACtB,YAAY,GAAG,iBAAiB,GAAG,MAAM,GAAG,iBAAiB,CAAC;QAChE,CAAC;QACD,MAAM,cAAc,GAAG,IAAA,6BAAa,EAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,IAAI,wBAAa,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC5E,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QAED,6EAA6E;QAC7E,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;QAEpD;;;;;;WAMG;QACH,MAAM,WAAW,GAAU,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAU,EAAE,CAAC;QAC7B,IAAI,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,cAAc,GAAqB,IAAI,CAAC;QAC5C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAE/B,OAAO,IAAI,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YAEZ,0DAA0D;YAC1D,IAAI,SAAS,GAAG,mBAAmB,EAAE,CAAC;gBACpC,eAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,gEAAgE;oBACrE,SAAS;oBACT,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;iBACvB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,MAAM,MAAM,GAAc,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,wBAAa,CAAC,cAAc,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;YAChI,qDAAqD;YACrD,gEAAgE;YAChE,wDAAwD;YACxD,MAAM,cAAc,GAClB,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC;oBACE,GAAG,KAAK;oBACR,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC;oBAC7C,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;iBAC3C;gBACH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,KAAK,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE3B,eAAM,CAAC,KAAK,CAAC;gBACX,GAAG,EAAE,8BAA8B;gBACnC,eAAe,EAAE,OAAO,GAAG,SAAS;gBACpC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;aACvB,CAAC,CAAC;YAEH,0CAA0C;YAC1C,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,4BAA4B;gBAC5B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,UAAU,CAAC,IAAI,CACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;oBAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;oBACnB,MAAM,EAAE,IAAI,CAAC,IAAI;oBACjB,eAAe,EAAE,IAAI,CAAC,WAAW;oBACjC,GAAG,EAAE,MAAM;oBACX,UAAU,EAAE,CAAC,MAAM,CAAC,EAAG,CAAC;iBACzB,CAAC,CACH,CAAC;gBAEF,oBAAoB;gBACpB,2DAA2D;gBAC3D,MAAM,sBAAsB,GAAG,WAAW,CAAC,MAAM,CAAC;gBAElD,sDAAsD;gBACtD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;oBAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACtE,eAAM,CAAC,IAAI,CAAC;wBACV,GAAG,EAAE,yCAAyC;wBAC9C,IAAI,EAAE,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,KAAI,QAAQ,CAAC,IAAI;wBACxC,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;qBACvB,CAAC,CAAC;oBAEH,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC;4BACH,qCAAqC;4BACrC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BACjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACtD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAE/B,eAAM,CAAC,KAAK,CAAC;gCACX,GAAG,EAAE,uCAAuC;gCAC5C,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI;gCACvB,MAAM,EAAE,UAAU;gCAClB,eAAe,EAAE,WAAW,GAAG,aAAa;gCAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;gCAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;6BACvB,CAAC,CAAC;4BAEH,8CAA8C;4BAC9C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAE7B,kCAAkC;4BAClC,MAAM,eAAe,GAAG,IAAA,SAAM,GAAE,CAAC;4BACjC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;4BAC1F,MAAM,KAAK,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE;gCAC1E,GAAG,KAAK;gCACR,QAAQ,EAAE;oCACR,GAAG,KAAK,CAAC,QAAQ;oCACjB,GAAG,WAAW;oCACd,GAAG,mBAAmB;oCACtB,IAAI,wBAAa,CAAC;wCAChB,EAAE,EAAE,eAAe;wCACnB,OAAO,EACL,qHAAqH;qCACxH,CAAC;iCACH;gCACD,OAAO,EAAE;oCACP,GAAG,KAAK,CAAC,OAAO;oCAChB,GAAG,UAAU;oCACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;wCAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;wCACnB,MAAM,EAAE,IAAI,CAAC,IAAI;wCACjB,eAAe,EAAE,IAAI,CAAC,WAAW;wCACjC,GAAG,EAAE,UAAU;wCACf,UAAU,EAAE,CAAC,UAAU,CAAC,EAAG,EAAE,eAAe,CAAC;qCAC9C,CAAC;iCACH;6BACF,CAAC,CAAC;4BAEH,6EAA6E;4BAE7E,UAAU,CAAC,IAAI,CACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;gCAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;gCACnB,MAAM,EAAE,IAAI,CAAC,IAAI;gCACjB,eAAe,EAAE,IAAI,CAAC,WAAW;gCACjC,GAAG,EAAE,UAAU;gCACf,UAAU,EAAE,CAAC,UAAU,CAAC,EAAG,CAAC;6BAC7B,CAAC,CACH,CAAC;wBACJ,CAAC;wBAAC,OAAO,GAAQ,EAAE,CAAC;4BAClB,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,gBAAgB;gCAAE,MAAM,GAAG,CAAC;4BAC9C,eAAM,CAAC,KAAK,CAAC;gCACX,GAAG,EAAE,gDAAgD;gCACrD,IAAI,EAAE,QAAQ,CAAC,IAAI;gCACnB,GAAG;gCACH,SAAS,EAAE,KAAK,CAAC,SAAS;gCAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;6BACvB,CAAC,CAAC;4BACH,MAAM,YAAY,GAAG,IAAI,sBAAW,CAAC;gCACnC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gCACpF,YAAY,EAAE,QAAQ,CAAC,EAAG;6BAC3B,CAAC,CAAC;4BAEH,gDAAgD;4BAChD,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;4BAE/B,mCAAmC;4BACnC,MAAM,oBAAoB,GAAG,IAAA,SAAM,GAAE,CAAC;4BACtC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;4BAC1F,MAAM,KAAK,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE;gCAC1E,GAAG,KAAK;gCACR,QAAQ,EAAE;oCACR,GAAG,KAAK,CAAC,QAAQ;oCACjB,GAAG,WAAW;oCACd,GAAG,mBAAmB;oCACtB,IAAI,wBAAa,CAAC;wCAChB,EAAE,EAAE,oBAAoB;wCACxB,OAAO,EAAE,uFAAuF;qCACjG,CAAC;iCACH;gCACD,OAAO,EAAE;oCACP,GAAG,KAAK,CAAC,OAAO;oCAChB,GAAG,UAAU;oCACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;wCAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;wCACnB,MAAM,EAAE,IAAI,CAAC,IAAI;wCACjB,eAAe,EAAE,IAAI,CAAC,WAAW;wCACjC,GAAG,EAAE,YAAY;wCACjB,UAAU,EAAE,CAAC,YAAY,CAAC,EAAG,EAAE,oBAAoB,CAAC;qCACrD,CAAC;iCACH;6BACF,CAAC,CAAC;4BACH,UAAU,CAAC,IAAI,CACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;gCAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;gCACnB,MAAM,EAAE,IAAI,CAAC,IAAI;gCACjB,eAAe,EAAE,IAAI,CAAC,WAAW;gCACjC,GAAG,EAAE,YAAY;gCACjB,UAAU,EAAE,CAAC,YAAY,CAAC,EAAG,CAAC;6BAC/B,CAAC,CACH,CAAC;wBACJ,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CAAC;4BACX,GAAG,EAAE,kEAAkE;4BACvE,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,UAAU,EAAE,QAAQ,CAAC,EAAE;4BACvB,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;yBACvB,CAAC,CAAC;wBAEH,wFAAwF;wBACxF,MAAM,kBAAkB,GAAG,IAAI,sBAAW,CAAC;4BACzC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;4BACvE,YAAY,EAAE,QAAQ,CAAC,EAAG,EAAE,uDAAuD;4BACnF,IAAI,EAAE,QAAQ,CAAC,IAAI;yBACpB,CAAC,CAAC;wBAEH,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBACrC,UAAU,CAAC,IAAI,CACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;4BAC5C,IAAI,EAAE,sBAAQ,CAAC,IAAI;4BACnB,MAAM,EAAE,IAAI,CAAC,IAAI;4BACjB,eAAe,EAAE,IAAI,CAAC,WAAW;4BACjC,GAAG,EAAE,kBAAkB;4BACvB,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAG,CAAC;yBACrC,CAAC,CACH,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,qDAAqD;gBACrD,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,GAAG,sBAAsB,CAAC;gBACtE,IAAI,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;oBACnD,eAAM,CAAC,KAAK,CAAC;wBACX,GAAG,EAAE,sCAAsC;wBAC3C,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;wBACvC,WAAW,EAAE,iBAAiB;wBAC9B,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;wBACjD,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;qBACvB,CAAC,CAAC;gBACL,CAAC;gBAED,sEAAsE;gBACtE,IAAI,CAAC,cAAc,EAAE,CAAC;oBACpB,iCAAiC;oBACjC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;oBACpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;oBAClC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,wCAAwC;gBACxC,oEAAoE;gBACpE,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;gBAEtD,2DAA2D;gBAC3D,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,cAAc,GAAG,MAAM,CAAC;gBACxB,MAAM;YACR,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,cAAc,EAAE,CAAC;YACnB,iDAAiD;YACjD,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAEjC,IAAI,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;gBACtC,eAAM,CAAC,IAAI,CAAC;oBACV,GAAG,EAAE,kBAAkB;oBACvB,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;iBACvB,CAAC,CAAC;gBAEH,kCAAkC;gBAClC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAEpC,mDAAmD;gBACnD,mDAAmD;gBACnD,MAAM,IAAI,CAAC,yBAAW,CAAC,UAAU,EAAE;oBACjC,OAAO,EAAE,cAAc,CAAC,OAAiB;oBACzC,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YAED,mBAAmB;YACnB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAElB,UAAU,CAAC,IAAI,CACb,IAAA,2BAAiB,EAAc,KAAK,CAAC,OAAO,EAAE;gBAC5C,IAAI,EAAE,sBAAQ,CAAC,WAAW;gBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,eAAe,EAAE,IAAI,CAAC,WAAW;gBACjC,GAAG,EAAE,cAAc,CAAC,OAAO;gBAC3B,UAAU,EAAE,CAAC,cAAc,CAAC,EAAG,CAAC;aACjC,CAAC,CACH,CAAC;YAEF,4BAA4B;YAC5B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAElC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2EAA2E;QAC3E,IAAI,SAAS,GAAG,mBAAmB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,eAAM,CAAC,IAAI,CAAC;gBACV,GAAG,EAAE,iEAAiE;gBACtE,YAAY,EAAE,WAAW,CAAC,MAAM;gBAChC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,IAAI,EAAE,IAAI,CAAC,WAAW;aACvB,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,iCAAiC;YACjC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YACpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAElC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kDAAkD;QAClD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC,CAAC;AArWW,QAAA,aAAa,iBAqWxB;AAEF,SAAS,oBAAoB,CAAC,IAAgB,EAAE,SAAgB;IAC9D,2BAA2B;IAC3B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACjC,SAAS,GAAG,4CAA4C,IAAI,CAAC,WAAW,IAAI,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;IAC/F,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;QACzC,OAAO,EAAE,CAAC;QACV,SAAS,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,OAAO;;;;;;;;sBAQa,IAAI,CAAC,WAAW;;;EAGpC,IAAI,CAAC,MAAM;;;;;;;;;;;;EAYX,SAAS,EAAE,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,MAAM,2BAA2B,GAAG,CAAC,SAAqB,EAAE,UAAkB,EAAiB,EAAE;IAC/F,MAAM,eAAe,GAAkB,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,eAAe,CAAC,IAAI,CAClB,IAAI,sBAAW,CAAC;YACd,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;YACvE,YAAY,EAAE,QAAQ,CAAC,EAAG;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC"}
1
+ {"version":3,"file":"addPromptNode.js","sourceRoot":"","sources":["../../src/nodes/addPromptNode.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minded-ai/mindedjs",
3
- "version": "2.0.1-beta-5",
3
+ "version": "2.0.1-beta-7",
4
4
  "description": "MindedJS is a TypeScript library for building agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -4,6 +4,7 @@ import { BaseLanguageModel } from '@langchain/core/language_models/base';
4
4
  import { SystemMessage } from '@langchain/core/messages';
5
5
  import { stateAnnotation } from '../types/LangGraph.types';
6
6
  import { logger } from '../utils/logger';
7
+ import { compilePrompt } from '../nodes/compilePrompt';
7
8
 
8
9
  const ROUTER_PROMPT = `
9
10
  You are a routing agent that decides which node to take in a flow based on the current state.
@@ -90,7 +91,13 @@ export const createPromptRouter = ({
90
91
  }
91
92
 
92
93
  // Add the edge options
93
- stepsStr += edges.map((edge) => `- Node: "${edge.target}" - Condition: "${edge.prompt}"`).join('\n');
94
+ stepsStr += edges
95
+ .map((edge) => {
96
+ // Compile edge prompts with EJS to support templates in conditions
97
+ const compiledPrompt = compilePrompt(edge.prompt || '', { memory: state.memory });
98
+ return `- Node: "${edge.target}" - Condition: "${compiledPrompt}"`;
99
+ })
100
+ .join('\n');
94
101
 
95
102
  // Prepare recent messages (last 10 messages for context)
96
103
  const recentMessages = state.messages.slice(-10);
@@ -103,10 +110,15 @@ export const createPromptRouter = ({
103
110
  .join('\n');
104
111
 
105
112
  // Select prompt based on reasoning preference
106
- let routerPrompt = includeReasoning ? ROUTER_PROMPT : ROUTER_PROMPT_WITHOUT_REASONING;
107
-
108
- // Replace placeholders in prompt
109
- routerPrompt = routerPrompt.replace('{steps}', stepsStr).replace('{messages}', messagesStr);
113
+ let promptTemplate = includeReasoning ? ROUTER_PROMPT : ROUTER_PROMPT_WITHOUT_REASONING;
114
+
115
+ // Compile prompt with EJS and parameters
116
+ promptTemplate = promptTemplate.replace('{steps}', stepsStr).replace('{messages}', messagesStr);
117
+ const routerPrompt = compilePrompt(promptTemplate, {
118
+ steps: stepsStr,
119
+ messages: messagesStr,
120
+ memory: state.memory,
121
+ });
110
122
 
111
123
  // Define response schema
112
124
  const responseSchema = includeReasoning
@@ -15,7 +15,6 @@ import { combinePlaybooks } from '../playbooks/playbooks';
15
15
  import { createHistoryStep } from '../utils/history';
16
16
  import { compilePrompt } from './compilePrompt';
17
17
  import { v4 as uuidv4 } from 'uuid';
18
- import { ToolCall } from '@langchain/core/dist/messages/tool';
19
18
 
20
19
  type AddPromptNodeParams = {
21
20
  graph: PreCompiledGraph;
@@ -70,12 +69,9 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
70
69
  * When humanInTheLoop is false: Return immediately after tool execution without
71
70
  * additional LLM invocations.
72
71
  */
73
- const newMessages: any[] = [];
74
- const newHistory: any[] = [];
75
- let currentMessages = [...state.messages];
76
72
  let finalAIMessage: AIMessage | null = null;
77
73
  let loopCount = 0;
78
- const MAX_LOOP_ITERATIONS = 10;
74
+ const MAX_LOOP_ITERATIONS = process.env.MAX_TOOL_LOOP_ITERATIONS ? parseInt(process.env.MAX_TOOL_LOOP_ITERATIONS) : 10;
79
75
 
80
76
  while (true) {
81
77
  loopCount++;
@@ -90,23 +86,14 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
90
86
  });
91
87
  break;
92
88
  }
89
+
93
90
  const startTime = Date.now();
91
+ const result: AIMessage = await llmToUse.bindTools(scopedTools).invoke(state.messages);
92
+ const endTime = Date.now();
94
93
 
95
- const result: AIMessage = await llmToUse.bindTools(scopedTools).invoke([new SystemMessage(compiledPrompt), ...currentMessages]);
96
94
  // Always pass accumulated state to interrupt manager
97
95
  // Pass the accumulated messages from this prompt node execution
98
96
  // If empty, pass undefined to avoid empty state updates
99
- const interruptState =
100
- newMessages.length > 0 || newHistory.length > 0
101
- ? {
102
- ...state,
103
- messages: [...state.messages, ...newMessages],
104
- history: [...state.history, ...newHistory],
105
- }
106
- : undefined;
107
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, interruptState);
108
-
109
- const endTime = Date.now();
110
97
 
111
98
  logger.debug({
112
99
  msg: '[Model] Model execution time',
@@ -115,11 +102,12 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
115
102
  node: node.displayName,
116
103
  });
117
104
 
105
+ await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, state);
106
+
118
107
  // Check if the result contains tool calls
119
108
  if (result.tool_calls && result.tool_calls.length > 0) {
120
- // Add the tool call message
121
- newMessages.push(result);
122
- newHistory.push(
109
+ state.messages.push(result);
110
+ state.history.push(
123
111
  createHistoryStep<HistoryStep>(state.history, {
124
112
  type: NodeType.TOOL,
125
113
  nodeId: node.name,
@@ -130,9 +118,6 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
130
118
  );
131
119
 
132
120
  // Execute the tools
133
- // Track how many tool responses we've added for validation
134
- const toolResponseStartIndex = newMessages.length;
135
-
136
121
  // Ensure we process ALL tool calls, even if some fail
137
122
  for (let toolIndex = 0; toolIndex < result.tool_calls.length; toolIndex++) {
138
123
  const toolCall = result.tool_calls[toolIndex];
@@ -146,116 +131,32 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
146
131
  });
147
132
 
148
133
  if (matchedTool) {
149
- try {
150
- // Invoke the LangChain tool directly
151
- const toolStartTime = Date.now();
152
- const toolResult = await matchedTool.invoke(toolCall);
153
- const toolEndTime = Date.now();
154
-
155
- logger.debug({
156
- msg: `[Tool] Tool result inside prompt node`,
157
- tool: matchedTool?.name,
158
- result: toolResult,
159
- executionTimeMs: toolEndTime - toolStartTime,
160
- sessionId: state.sessionId,
161
- node: node.displayName,
162
- });
163
-
164
- // Add the tool result directly to allMessages
165
- newMessages.push(toolResult);
166
-
167
- // Check for queue after tool call
168
- const systemMessageId = uuidv4();
169
- const skippedToolMessages = generateSkippedToolMessages(result.tool_calls, toolIndex + 1);
170
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
171
- ...state,
172
- messages: [
173
- ...state.messages,
174
- ...newMessages,
175
- ...skippedToolMessages,
176
- new SystemMessage({
177
- id: systemMessageId,
178
- content:
179
- 'you called tools when the user send a new message, Consider calling the tools again after user message is processed',
180
- }),
181
- ],
182
- history: [
183
- ...state.history,
184
- ...newHistory,
185
- createHistoryStep<HistoryStep>(state.history, {
186
- type: NodeType.TOOL,
187
- nodeId: node.name,
188
- nodeDisplayName: node.displayName,
189
- raw: toolResult,
190
- messageIds: [toolResult.id!, systemMessageId],
191
- }),
192
- ],
193
- });
194
-
195
- // In v2.0, tools update state by reference, no need to extract state updates
196
-
197
- newHistory.push(
198
- createHistoryStep<HistoryStep>(state.history, {
199
- type: NodeType.TOOL,
200
- nodeId: node.name,
201
- nodeDisplayName: node.displayName,
202
- raw: toolResult,
203
- messageIds: [toolResult.id!],
204
- }),
205
- );
206
- } catch (err: any) {
207
- if (err?.name === 'GraphInterrupt') throw err;
208
- logger.error({
209
- msg: `[Tool] Error executing tool inside prompt node`,
210
- tool: toolCall.name,
211
- err,
212
- sessionId: state.sessionId,
213
- node: node.displayName,
214
- });
215
- const errorMessage = new ToolMessage({
216
- content: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),
217
- tool_call_id: toolCall.id!,
218
- });
219
-
220
- // Add the error message directly to allMessages
221
- newMessages.push(errorMessage);
222
-
223
- // Check for queue after tool error
224
- const errorSystemMessageId = uuidv4();
225
- const skippedToolMessages = generateSkippedToolMessages(result.tool_calls, toolIndex + 1);
226
- await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
227
- ...state,
228
- messages: [
229
- ...state.messages,
230
- ...newMessages,
231
- ...skippedToolMessages,
232
- new SystemMessage({
233
- id: errorSystemMessageId,
234
- content: 'Tool execution failed. Consider handling the error or calling another tool if needed.',
235
- }),
236
- ],
237
- history: [
238
- ...state.history,
239
- ...newHistory,
240
- createHistoryStep<HistoryStep>(state.history, {
241
- type: NodeType.TOOL,
242
- nodeId: node.name,
243
- nodeDisplayName: node.displayName,
244
- raw: errorMessage,
245
- messageIds: [errorMessage.id!, errorSystemMessageId],
246
- }),
247
- ],
248
- });
249
- newHistory.push(
250
- createHistoryStep<HistoryStep>(state.history, {
251
- type: NodeType.TOOL,
252
- nodeId: node.name,
253
- nodeDisplayName: node.displayName,
254
- raw: errorMessage,
255
- messageIds: [errorMessage.id!],
256
- }),
257
- );
258
- }
134
+ // Invoke the LangChain tool directly
135
+ const toolStartTime = Date.now();
136
+ const toolResult = await matchedTool.invoke(toolCall);
137
+ const toolEndTime = Date.now();
138
+
139
+ logger.debug({
140
+ msg: `[Tool] Tool result inside prompt node`,
141
+ tool: matchedTool?.name,
142
+ result: toolResult,
143
+ executionTimeMs: toolEndTime - toolStartTime,
144
+ sessionId: state.sessionId,
145
+ node: node.displayName,
146
+ });
147
+
148
+ // Add the tool result directly to allMessages
149
+ state.messages.push(toolResult);
150
+
151
+ state.history.push(
152
+ createHistoryStep<HistoryStep>(state.history, {
153
+ type: NodeType.TOOL,
154
+ nodeId: node.name,
155
+ nodeDisplayName: node.displayName,
156
+ raw: toolResult,
157
+ messageIds: [toolResult.id!],
158
+ }),
159
+ );
259
160
  } else {
260
161
  logger.error({
261
162
  msg: `[Tool] Model called tool but it was not found inside prompt node`,
@@ -267,13 +168,13 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
267
168
 
268
169
  // IMPORTANT: Create an error message for the missing tool with the correct tool_call_id
269
170
  const missingToolMessage = new ToolMessage({
270
- content: JSON.stringify({ error: `Tool '${toolCall.name}' not found` }),
171
+ content: JSON.stringify({ error: `Tool '${toolCall.name}' doesnt exist` }),
271
172
  tool_call_id: toolCall.id!, // This MUST match the tool_call_id from the AI message
272
173
  name: toolCall.name,
273
174
  });
274
175
 
275
- newMessages.push(missingToolMessage);
276
- newHistory.push(
176
+ state.messages.push(missingToolMessage);
177
+ state.history.push(
277
178
  createHistoryStep<HistoryStep>(state.history, {
278
179
  type: NodeType.TOOL,
279
180
  nodeId: node.name,
@@ -284,32 +185,25 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
284
185
  );
285
186
  }
286
187
  }
287
-
288
- // Validate that we have responses for ALL tool calls
289
- const toolResponseCount = newMessages.length - toolResponseStartIndex;
290
- if (toolResponseCount !== result.tool_calls.length) {
291
- logger.error({
292
- msg: '[Model] Tool response count mismatch',
293
- expectedCount: result.tool_calls.length,
294
- actualCount: toolResponseCount,
295
- toolCallIds: result.tool_calls.map((tc) => tc.id),
296
- sessionId: state.sessionId,
297
- node: node.displayName,
298
- });
299
- }
188
+ // Check for queue after tool call
189
+ const systemMessageId = uuidv4();
190
+ await agent.interruptSessionManager.checkQueueAndInterrupt(state.sessionId, {
191
+ ...state,
192
+ messages: [
193
+ ...state.messages,
194
+ new SystemMessage({
195
+ id: systemMessageId,
196
+ content:
197
+ 'you called tools when the user send a new message, Consider calling the tools again after user message is processed',
198
+ }),
199
+ ],
200
+ });
300
201
 
301
202
  // If humanInTheLoop is false, return immediately after tool execution
302
203
  if (!useAgenticLoop) {
303
- // In v2.0, modify state directly
304
- state.messages.push(...newMessages);
305
- state.history.push(...newHistory);
306
204
  return state;
307
205
  }
308
206
 
309
- // Otherwise, prepare for next iteration
310
- // allMessages now contains all the new messages from this iteration
311
- currentMessages = [...state.messages, ...newMessages];
312
-
313
207
  // Continue the loop to see what the model wants to do next
314
208
  continue;
315
209
  } else {
@@ -322,31 +216,24 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
322
216
  // Process the final AI message if we have one
323
217
  if (finalAIMessage) {
324
218
  // Add the final AI message to our messages first
325
- newMessages.push(finalAIMessage);
326
-
327
- if (finalAIMessage.getType() === 'ai') {
328
- logger.info({
329
- msg: `[Model] Response`,
330
- content: finalAIMessage.content,
331
- sessionId: state.sessionId,
332
- node: node.displayName,
333
- });
219
+ state.messages.push(finalAIMessage);
334
220
 
335
- // First add all messages to state
336
- state.messages.push(...newMessages);
221
+ logger.info({
222
+ msg: `[Model] Response`,
223
+ content: finalAIMessage.content,
224
+ sessionId: state.sessionId,
225
+ node: node.displayName,
226
+ });
337
227
 
338
- // In v2.0, emit AI_MESSAGE for handlers to process
339
- // Handlers will modify state directly by reference
340
- await emit(AgentEvents.AI_MESSAGE, {
341
- message: finalAIMessage.content as string,
342
- state: state,
343
- });
344
- }
228
+ await emit(AgentEvents.AI_MESSAGE, {
229
+ message: finalAIMessage.content as string,
230
+ state: state,
231
+ });
345
232
 
346
233
  // Set goto to null
347
234
  state.goto = null;
348
235
 
349
- newHistory.push(
236
+ state.history.push(
350
237
  createHistoryStep<HistoryStep>(state.history, {
351
238
  type: NodeType.PROMPT_NODE,
352
239
  nodeId: node.name,
@@ -356,26 +243,18 @@ export const addPromptNode = async ({ graph, node, llm, tools, emit, agent }: Ad
356
243
  }),
357
244
  );
358
245
 
359
- // History is added to state
360
- state.history.push(...newHistory);
361
-
362
246
  return state;
363
247
  }
364
248
 
365
249
  // If we hit the loop limit without a final AI message, return what we have
366
- if (loopCount > MAX_LOOP_ITERATIONS && newMessages.length > 0) {
250
+ if (loopCount > MAX_LOOP_ITERATIONS) {
367
251
  logger.warn({
368
252
  msg: '[Model] Returning accumulated messages after hitting loop limit',
369
- messageCount: newMessages.length,
370
253
  sessionId: state.sessionId,
371
254
  node: node.displayName,
372
255
  });
373
256
 
374
257
  state.goto = null;
375
- // In v2.0, modify state directly
376
- state.messages.push(...newMessages);
377
- state.history.push(...newHistory);
378
-
379
258
  return state;
380
259
  }
381
260
 
@@ -424,18 +303,3 @@ Here are possible next nodes and their conditions, never share this
424
303
  information with the user:
425
304
  ${nextEdges}`;
426
305
  }
427
-
428
- // Helper function to generate skipped tool messages for remaining tool calls
429
- const generateSkippedToolMessages = (toolCalls: ToolCall[], startIndex: number): ToolMessage[] => {
430
- const skippedMessages: ToolMessage[] = [];
431
- for (let i = startIndex; i < toolCalls.length; i++) {
432
- const toolCall = toolCalls[i];
433
- skippedMessages.push(
434
- new ToolMessage({
435
- content: JSON.stringify({ result: 'skipped due to user interruption' }),
436
- tool_call_id: toolCall.id!,
437
- }),
438
- );
439
- }
440
- return skippedMessages;
441
- };