n8n-nodes-tembory 1.1.31 → 1.1.32
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 +21 -2
- package/dist/nodes/Tembory/TemboryMemory.node.js +84 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
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.32`.
|
|
6
|
+
|
|
7
|
+
## 1.1.32
|
|
8
|
+
|
|
9
|
+
- Adiciona `Modo de Configuracao` com `Simples Recomendado` e `Avancado`.
|
|
10
|
+
- O modo simples usa os defaults validados nos testes reais: contexto estruturado, resumo por contexto ativo, tool history/results/action ledger, backend persistente e diagnostico pesado desligado.
|
|
11
|
+
- O modo avancado continua exibindo todas as opcoes existentes, sem remover nenhum controle.
|
|
12
|
+
- Atualiza a expressao padrao de `Consulta` para ler tambem `$json.body.chatInput`.
|
|
6
13
|
|
|
7
14
|
## 1.1.31
|
|
8
15
|
|
|
@@ -75,10 +82,22 @@ O campo `Preset Operacional` preenche defaults de producao:
|
|
|
75
82
|
|
|
76
83
|
Recomendacao pratica:
|
|
77
84
|
|
|
78
|
-
- Use `
|
|
85
|
+
- Use `Modo Simples Recomendado` em producao normal.
|
|
79
86
|
- Use `Producao Balanceada` quando o agente precisar comparar mais historico.
|
|
80
87
|
- Use `Auditoria` ou `Diagnostico Completo` apenas enquanto estiver depurando.
|
|
81
88
|
|
|
89
|
+
No modo simples, o node aplica automaticamente:
|
|
90
|
+
|
|
91
|
+
- `Modo de Recuperacao`: operacional estruturado.
|
|
92
|
+
- `Formato do Contexto`: producao estruturado.
|
|
93
|
+
- `Preset Operacional`: producao rapida.
|
|
94
|
+
- `Fonte do Resumo do SLM`: contexto ativo.
|
|
95
|
+
- Tool history, resultados de tools, action ledger, working memory, decision state, operational state e memory compression ligados.
|
|
96
|
+
- Persistencia no backend e active summary ligados.
|
|
97
|
+
- Diagnostico pesado, scores, semantic fallback e tool facts desligados.
|
|
98
|
+
- TTL de tool history em 36000 segundos.
|
|
99
|
+
- Ultimas tools mantidas no contexto compacto: 50.
|
|
100
|
+
|
|
82
101
|
## Uso com `$fromAI()`
|
|
83
102
|
|
|
84
103
|
Em tools conectadas ao AI Agent, o n8n permite que o modelo preencha parametros dinamicamente com `$fromAI()`. Isso e responsabilidade do Agent e da tool do n8n. O Tembory apenas fornece contexto operacional para o Agent, incluindo conversa, tools anteriores, inputs, outputs e timestamps.
|
|
@@ -1276,8 +1276,44 @@ const mergeRemoteThreadState = (store, key, state) => {
|
|
|
1276
1276
|
if (typeof state.activeSummary === 'string' && state.activeSummary)
|
|
1277
1277
|
store.activeSummary[key] = state.activeSummary;
|
|
1278
1278
|
};
|
|
1279
|
+
const SIMPLE_MODE_OVERRIDES = {
|
|
1280
|
+
operationPreset: 'productionFast',
|
|
1281
|
+
summarySource: 'activeContext',
|
|
1282
|
+
includeContextHeader: true,
|
|
1283
|
+
compactStateSections: true,
|
|
1284
|
+
includeSummary: true,
|
|
1285
|
+
includeToolHistory: true,
|
|
1286
|
+
includeToolResults: true,
|
|
1287
|
+
includeProfileFacts: true,
|
|
1288
|
+
includeOperationalState: true,
|
|
1289
|
+
includeActionLedger: true,
|
|
1290
|
+
includeWorkingMemory: true,
|
|
1291
|
+
includeDecisionState: true,
|
|
1292
|
+
includeMemoryCompression: true,
|
|
1293
|
+
includeRecentMessages: true,
|
|
1294
|
+
includeRecentHighlights: false,
|
|
1295
|
+
includeEntityTimeline: false,
|
|
1296
|
+
persistBackendMemories: true,
|
|
1297
|
+
persistActiveSummary: true,
|
|
1298
|
+
includeActiveSummary: true,
|
|
1299
|
+
enableTransientSummaryCache: true,
|
|
1300
|
+
includeScores: false,
|
|
1301
|
+
includeDiagnostics: false,
|
|
1302
|
+
persistToolFactsToTembory: false,
|
|
1303
|
+
includeToolHistorySemanticFallback: false,
|
|
1304
|
+
contextMaxChars: 10000,
|
|
1305
|
+
toolHistoryLastN: 50,
|
|
1306
|
+
toolHistoryTTLSeconds: 36000,
|
|
1307
|
+
recentMessagesLastN: 50,
|
|
1308
|
+
connectedModelSummaryInputMaxChars: 4200,
|
|
1309
|
+
connectedModelSummaryMaxChars: 1200,
|
|
1310
|
+
activeSummaryMaxChars: 1800,
|
|
1311
|
+
activeSummaryRetentionDays: 30,
|
|
1312
|
+
};
|
|
1279
1313
|
const applyOperationalPreset = (advanced = {}) => {
|
|
1280
|
-
const
|
|
1314
|
+
const configurationMode = String(advanced.configurationMode || 'advanced');
|
|
1315
|
+
const simpleOverrides = configurationMode === 'simple' ? SIMPLE_MODE_OVERRIDES : {};
|
|
1316
|
+
const preset = String(simpleOverrides.operationPreset || advanced.operationPreset || 'productionFast');
|
|
1281
1317
|
const presets = {
|
|
1282
1318
|
productionFast: {
|
|
1283
1319
|
summarySource: 'activeContext',
|
|
@@ -1491,7 +1527,7 @@ const applyOperationalPreset = (advanced = {}) => {
|
|
|
1491
1527
|
},
|
|
1492
1528
|
};
|
|
1493
1529
|
const presetKey = preset === 'lab' ? 'diagnostic' : preset;
|
|
1494
|
-
const resolved = { ...(presets[presetKey] || {}), ...advanced };
|
|
1530
|
+
const resolved = { ...(presets[presetKey] || {}), ...advanced, ...simpleOverrides, configurationMode };
|
|
1495
1531
|
if (/^production/i.test(presetKey)) {
|
|
1496
1532
|
resolved.compactForAgent = true;
|
|
1497
1533
|
resolved.compactStateSections = true;
|
|
@@ -1534,7 +1570,12 @@ const readAdvancedOptions = (ctx, itemIndex) => {
|
|
|
1534
1570
|
grouped = flattenAdvancedGroups(ctx.getNodeParameter('advancedGroups', itemIndex, {}) || {});
|
|
1535
1571
|
}
|
|
1536
1572
|
catch { }
|
|
1537
|
-
|
|
1573
|
+
let configurationMode = 'simple';
|
|
1574
|
+
try {
|
|
1575
|
+
configurationMode = String(ctx.getNodeParameter('configurationMode', itemIndex, 'simple') || 'simple');
|
|
1576
|
+
}
|
|
1577
|
+
catch { }
|
|
1578
|
+
return { ...legacy, ...grouped, configurationMode };
|
|
1538
1579
|
};
|
|
1539
1580
|
const pruneByLimit = (items, limit) => items.slice(Math.max(0, items.length - Math.max(1, Number(limit) || 1)));
|
|
1540
1581
|
const dedupeRecentMessages = (items) => {
|
|
@@ -3515,10 +3556,34 @@ class TemboryMemory {
|
|
|
3515
3556
|
default: '={{ $json.project || $json.projectId || $json.accountId || $json.body?.account?.id || "" }}',
|
|
3516
3557
|
description: 'Namespace operacional do workflow para separar clientes/workspaces. Nao e o Project ID da credencial; a API key do Tembory ja identifica o projeto comercial.',
|
|
3517
3558
|
},
|
|
3559
|
+
{
|
|
3560
|
+
displayName: 'Modo de Configuração',
|
|
3561
|
+
name: 'configurationMode',
|
|
3562
|
+
type: 'options',
|
|
3563
|
+
options: [
|
|
3564
|
+
{
|
|
3565
|
+
name: 'Simples Recomendado',
|
|
3566
|
+
value: 'simple',
|
|
3567
|
+
description: 'Usa os defaults validados em producao: contexto estruturado, SLM por contexto ativo, tool history/results/action ledger, backend persistente e diagnostico pesado desligado.',
|
|
3568
|
+
},
|
|
3569
|
+
{
|
|
3570
|
+
name: 'Avançado',
|
|
3571
|
+
value: 'advanced',
|
|
3572
|
+
description: 'Exibe todas as opcoes para ajuste fino de memoria, resumo, auditoria, TTL e payload.',
|
|
3573
|
+
},
|
|
3574
|
+
],
|
|
3575
|
+
default: 'simple',
|
|
3576
|
+
description: 'No modo simples o Tembory escolhe a configuracao recomendada. No modo avancado todos os campos continuam disponiveis.',
|
|
3577
|
+
},
|
|
3518
3578
|
{
|
|
3519
3579
|
displayName: 'Modo de Recuperação de Contexto',
|
|
3520
3580
|
name: 'retrievalMode',
|
|
3521
3581
|
type: 'options',
|
|
3582
|
+
displayOptions: {
|
|
3583
|
+
show: {
|
|
3584
|
+
configurationMode: ['advanced'],
|
|
3585
|
+
},
|
|
3586
|
+
},
|
|
3522
3587
|
options: [
|
|
3523
3588
|
{ name: 'Operacional Estruturado', value: 'basic', description: 'Usa estado da thread, histórico de tools, mensagens recentes e resumo ativo, sem busca vetorial' },
|
|
3524
3589
|
{ name: 'Resumo', value: 'summary', description: 'Retorna um resumo simples em texto' },
|
|
@@ -3530,13 +3595,18 @@ class TemboryMemory {
|
|
|
3530
3595
|
displayName: 'Consulta',
|
|
3531
3596
|
name: 'query',
|
|
3532
3597
|
type: 'string',
|
|
3533
|
-
default: '={{ $json.query || $json.lastUserMessage || $json.chatInput || $json.body?.consolidated_text || $json.body?.message || $json.body?.text || "" }}',
|
|
3598
|
+
default: '={{ $json.query || $json.lastUserMessage || $json.chatInput || $json.body?.chatInput || $json.body?.consolidated_text || $json.body?.message || $json.body?.text || "" }}',
|
|
3534
3599
|
description: 'Mensagem atual usada para montar o contexto operacional, inferir intenção e recuperar memórias relevantes. Em AI Agent, mantenha a expressão padrão para ler o chatInput do item.',
|
|
3535
3600
|
},
|
|
3536
3601
|
{
|
|
3537
3602
|
displayName: 'Chave de Memória',
|
|
3538
3603
|
name: 'memoryKey',
|
|
3539
3604
|
type: 'string',
|
|
3605
|
+
displayOptions: {
|
|
3606
|
+
show: {
|
|
3607
|
+
configurationMode: ['advanced'],
|
|
3608
|
+
},
|
|
3609
|
+
},
|
|
3540
3610
|
default: 'chat_history',
|
|
3541
3611
|
description: 'Chave sob a qual a memória será retornada',
|
|
3542
3612
|
},
|
|
@@ -3544,6 +3614,11 @@ class TemboryMemory {
|
|
|
3544
3614
|
displayName: 'Formato do Contexto',
|
|
3545
3615
|
name: 'payloadFormat',
|
|
3546
3616
|
type: 'options',
|
|
3617
|
+
displayOptions: {
|
|
3618
|
+
show: {
|
|
3619
|
+
configurationMode: ['advanced'],
|
|
3620
|
+
},
|
|
3621
|
+
},
|
|
3547
3622
|
options: [
|
|
3548
3623
|
{ name: 'Produção Estruturado', value: 'structured' },
|
|
3549
3624
|
{ name: 'Auditoria Texto', value: 'auditText' },
|
|
@@ -3558,6 +3633,11 @@ class TemboryMemory {
|
|
|
3558
3633
|
displayName: 'Configuração Tembory',
|
|
3559
3634
|
name: 'advancedGroups',
|
|
3560
3635
|
type: 'fixedCollection',
|
|
3636
|
+
displayOptions: {
|
|
3637
|
+
show: {
|
|
3638
|
+
configurationMode: ['advanced'],
|
|
3639
|
+
},
|
|
3640
|
+
},
|
|
3561
3641
|
placeholder: 'Adicionar Grupo',
|
|
3562
3642
|
default: '',
|
|
3563
3643
|
typeOptions: {
|
package/package.json
CHANGED