n8n-nodes-tembory 1.1.35 → 1.1.36
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.1.
|
|
5
|
+
Versao atual: `1.1.36`.
|
|
6
|
+
|
|
7
|
+
## 1.1.36
|
|
8
|
+
|
|
9
|
+
- Mantem o comportamento funcional da `1.1.35`.
|
|
10
|
+
- Corrige o resumo visual do n8n para mensagens LangChain serializadas, incluindo objetos com `kwargs.content`.
|
|
11
|
+
- Evita o fallback pobre `{ action, messages }` quando o contexto foi carregado corretamente mas o output humano nao conseguiu parsear o `SystemMessage`.
|
|
6
12
|
|
|
7
13
|
## 1.1.35
|
|
8
14
|
|
|
@@ -933,8 +933,8 @@ const toolHistoryItemsFromMemory = (item) => {
|
|
|
933
933
|
return single ? [single] : [];
|
|
934
934
|
};
|
|
935
935
|
const toBaseMessage = (message) => {
|
|
936
|
-
const role = String((message === null || message === void 0 ? void 0 : message.role) || 'system').toLowerCase();
|
|
937
|
-
const content =
|
|
936
|
+
const role = String(messageTypeOf(message) || (message === null || message === void 0 ? void 0 : message.role) || 'system').toLowerCase();
|
|
937
|
+
const content = messageContentOf(message);
|
|
938
938
|
const MessageClass = role === 'human' || role === 'user'
|
|
939
939
|
? LangChainMessages.HumanMessage
|
|
940
940
|
: role === 'ai' || role === 'assistant'
|
|
@@ -1029,9 +1029,39 @@ const readDeep = (value, visitor, seen = new Set()) => {
|
|
|
1029
1029
|
const messageTypeOf = (message) => {
|
|
1030
1030
|
if (typeof (message === null || message === void 0 ? void 0 : message._getType) === 'function')
|
|
1031
1031
|
return String(message._getType() || '');
|
|
1032
|
-
|
|
1032
|
+
const serializedId = Array.isArray(message === null || message === void 0 ? void 0 : message.id) ? message.id.join('.') : '';
|
|
1033
|
+
if (/SystemMessage/i.test(serializedId))
|
|
1034
|
+
return 'system';
|
|
1035
|
+
if (/HumanMessage/i.test(serializedId))
|
|
1036
|
+
return 'human';
|
|
1037
|
+
if (/AIMessage/i.test(serializedId))
|
|
1038
|
+
return 'ai';
|
|
1039
|
+
return String((message === null || message === void 0 ? void 0 : message.role) || (message === null || message === void 0 ? void 0 : message.type) || (message === null || message === void 0 ? void 0 : message.kwargs && message.kwargs.type) || (message === null || message === void 0 ? void 0 : message.lc_kwargs && message.lc_kwargs.type) || '').toLowerCase();
|
|
1040
|
+
};
|
|
1041
|
+
const messageContentOf = (message) => {
|
|
1042
|
+
if (typeof message === 'string')
|
|
1043
|
+
return message;
|
|
1044
|
+
const content = (message === null || message === void 0 ? void 0 : message.content) !== undefined
|
|
1045
|
+
? message.content
|
|
1046
|
+
: (message === null || message === void 0 ? void 0 : message.kwargs && message.kwargs.content) !== undefined
|
|
1047
|
+
? message.kwargs.content
|
|
1048
|
+
: (message === null || message === void 0 ? void 0 : message.lc_kwargs && message.lc_kwargs.content) !== undefined
|
|
1049
|
+
? message.lc_kwargs.content
|
|
1050
|
+
: (message === null || message === void 0 ? void 0 : message.data && message.data.content) !== undefined
|
|
1051
|
+
? message.data.content
|
|
1052
|
+
: undefined;
|
|
1053
|
+
if (typeof content === 'string')
|
|
1054
|
+
return content;
|
|
1055
|
+
if (Array.isArray(content)) {
|
|
1056
|
+
const joined = content
|
|
1057
|
+
.map((part) => typeof part === 'string' ? part : (part && typeof part.text === 'string' ? part.text : safeStringify(part)))
|
|
1058
|
+
.filter(Boolean)
|
|
1059
|
+
.join('\n');
|
|
1060
|
+
if (joined)
|
|
1061
|
+
return joined;
|
|
1062
|
+
}
|
|
1063
|
+
return content === undefined ? '' : safeStringify(content);
|
|
1033
1064
|
};
|
|
1034
|
-
const messageContentOf = (message) => typeof (message === null || message === void 0 ? void 0 : message.content) === 'string' ? message.content : safeStringify(message === null || message === void 0 ? void 0 : message.content);
|
|
1035
1065
|
const extractToolCallsFromMessages = (messages = []) => {
|
|
1036
1066
|
const calls = [];
|
|
1037
1067
|
const toolCallById = new Map();
|
|
@@ -2985,7 +3015,18 @@ const summarizeMemoryMessagesForSideChannel = (messages = []) => {
|
|
|
2985
3015
|
if (!firstSystem)
|
|
2986
3016
|
return summary;
|
|
2987
3017
|
try {
|
|
2988
|
-
const
|
|
3018
|
+
const rawContent = messageContentOf(firstSystem);
|
|
3019
|
+
let parsed;
|
|
3020
|
+
try {
|
|
3021
|
+
parsed = JSON.parse(rawContent);
|
|
3022
|
+
}
|
|
3023
|
+
catch {
|
|
3024
|
+
const start = rawContent.indexOf('{');
|
|
3025
|
+
const end = rawContent.lastIndexOf('}');
|
|
3026
|
+
if (start < 0 || end <= start)
|
|
3027
|
+
throw new Error('Tembory visual summary could not find JSON context');
|
|
3028
|
+
parsed = JSON.parse(rawContent.slice(start, end + 1));
|
|
3029
|
+
}
|
|
2989
3030
|
const conversation = parsed.conversation || {};
|
|
2990
3031
|
const tools = parsed.tools || {};
|
|
2991
3032
|
const toolItems = Array.isArray(tools.items) ? tools.items : [];
|
|
@@ -3094,7 +3135,13 @@ const summarizeMemoryMessagesForSideChannel = (messages = []) => {
|
|
|
3094
3135
|
return Object.fromEntries(Object.entries(summary).filter(([, value]) => value !== undefined));
|
|
3095
3136
|
}
|
|
3096
3137
|
catch {
|
|
3097
|
-
|
|
3138
|
+
const content = messageContentOf(firstSystem);
|
|
3139
|
+
return cleanContextValue({
|
|
3140
|
+
...summary,
|
|
3141
|
+
contextChars: content.length || undefined,
|
|
3142
|
+
contextPreview: content ? truncate(content, 260) : undefined,
|
|
3143
|
+
visualSummaryStatus: 'unparsed',
|
|
3144
|
+
});
|
|
3098
3145
|
}
|
|
3099
3146
|
};
|
|
3100
3147
|
const contextSizeOfMessages = (messages = []) => {
|
package/package.json
CHANGED