n8n-nodes-tembory 1.0.20 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,13 @@
2
2
 
3
3
  Node de memoria operacional da Tembory para agentes de IA no n8n.
4
4
 
5
- Versao atual: `1.0.20`.
5
+ Versao atual: `1.0.21`.
6
+
7
+ ## 1.0.21
8
+
9
+ - O contexto principal passa a anexar o input atual do agente ao transcript antes de renderizar memoria.
10
+ - `Conversation frame` agora inclui `recent_messages_chronological`, com janela curta usuario/assistente em ordem.
11
+ - Mesmo antes do `saveContext`, o agente recebe a mensagem atual e a mensagem anterior do cliente no contexto estrutural.
6
12
 
7
13
  ## 1.0.20
8
14
 
@@ -1090,6 +1090,16 @@ const dedupeRecentMessages = (items) => {
1090
1090
  }
1091
1091
  return out;
1092
1092
  };
1093
+ const appendCurrentUserMessage = (items = [], query = '') => {
1094
+ const content = String(query || '').trim();
1095
+ if (!content)
1096
+ return items || [];
1097
+ const normalized = normalizeIntentText(content).trim();
1098
+ const lastUser = [...(items || [])].reverse().find((msg) => /^(user|human)$/i.test(String(msg.role || '')));
1099
+ if (lastUser && normalizeIntentText(lastUser.content).trim() === normalized)
1100
+ return items || [];
1101
+ return (items || []).concat([{ role: 'user', content: truncate(content, 2000), at: nowIso(), source: 'current_input' }]);
1102
+ };
1093
1103
  const dedupeToolHistory = (items) => {
1094
1104
  const seen = new Set();
1095
1105
  const out = [];
@@ -1172,9 +1182,15 @@ const buildConversationFrame = ({ query = '', recentMessages = [], workingMemory
1172
1182
  const users = recentUserMessages(recentMessages);
1173
1183
  const currentUser = users.find((msg) => normalizeIntentText(msg.content).trim() === normalizedQuery) || (query ? { role: 'user', content: query, at: nowIso() } : null);
1174
1184
  const previousUser = previousUserMessageForQuery(query, recentMessages);
1185
+ const chronological = pruneByLimit(recentMessages || [], 10).map((msg) => ({
1186
+ role: msg.role,
1187
+ content: truncate(msg.content, 500),
1188
+ at: msg.at,
1189
+ }));
1175
1190
  return cleanContextValue({
1176
1191
  current_user_message: currentUser ? truncate(currentUser.content, 500) : truncate(query, 500),
1177
1192
  previous_user_message: previousUser ? truncate(previousUser.content, 500) : (workingMemory === null || workingMemory === void 0 ? void 0 : workingMemory.last_user_message) || null,
1193
+ recent_messages_chronological: chronological,
1178
1194
  recent_user_messages: users
1179
1195
  .filter((msg) => normalizeIntentText(msg.content).trim() !== normalizedQuery)
1180
1196
  .slice(0, 5)
@@ -3033,8 +3049,9 @@ class Mem0Memory {
3033
3049
  .flatMap(toolHistoryItemsFromMemory)
3034
3050
  .sort((a, b) => new Date(a.at || 0).getTime() - new Date(b.at || 0).getTime());
3035
3051
  }
3036
- const allRecentMessages = dedupeRecentMessages((store.recentMessages[key] || []).concat(persistedRecentMessages));
3037
- const recentMessages = adv.includeRecentMessages === false ? [] : pruneByLimit(allRecentMessages, adv.recentMessagesLastN || 8);
3052
+ const storedRecentMessages = adv.includeRecentMessages === false ? [] : (store.recentMessages[key] || []).concat(persistedRecentMessages);
3053
+ const allRecentMessages = dedupeRecentMessages(appendCurrentUserMessage(storedRecentMessages, query));
3054
+ const recentMessages = pruneByLimit(allRecentMessages, Math.max(Number(adv.recentMessagesLastN || 8), 8));
3038
3055
  const toolHistoryFromRecentMessages = [];
3039
3056
  if (adv.includeToolHistory !== false) {
3040
3057
  for (const msg of recentMessages)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-tembory",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Tembory node for n8n AI Agents with profile, tools, timeline, graph and semantic memory",
5
5
  "license": "MIT",
6
6
  "homepage": "https://tembory.com",