n8n-nodes-memory 0.5.1 → 0.6.0
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 +18 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +6 -4
- package/dist/nodes/Memory/{Memory.node.d.ts → MemoryApi.node.d.ts} +1 -1
- package/dist/nodes/Memory/MemoryApi.node.js +189 -0
- package/dist/nodes/Memory/MemoryWorkflow.node.d.ts +5 -0
- package/dist/nodes/Memory/MemoryWorkflow.node.js +161 -0
- package/package.json +3 -2
- package/dist/nodes/Memory/ApiMemoryHistory.d.ts +0 -18
- package/dist/nodes/Memory/ApiMemoryHistory.js +0 -113
- package/dist/nodes/Memory/Memory.node.js +0 -189
package/README.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# n8n-nodes-memory
|
|
2
2
|
|
|
3
|
-
Custom memory
|
|
3
|
+
Custom memory nodes for n8n AI Agent with workflow-based storage.
|
|
4
|
+
|
|
5
|
+
## Two Nodes
|
|
6
|
+
|
|
7
|
+
| Node | Use Case |
|
|
8
|
+
|------|----------|
|
|
9
|
+
| **Memory API** | External webhook/API as memory backend |
|
|
10
|
+
| **Memory Workflow** | Sub-workflow within n8n as memory backend |
|
|
4
11
|
|
|
5
12
|
## The Power: Memory as Workflows
|
|
6
13
|
|
|
@@ -81,6 +88,8 @@ Message types: `human` or `ai`
|
|
|
81
88
|
|
|
82
89
|
## Parameters
|
|
83
90
|
|
|
91
|
+
### Memory API
|
|
92
|
+
|
|
84
93
|
| Parameter | Description |
|
|
85
94
|
|-----------|-------------|
|
|
86
95
|
| API URL | Your memory webhook URL |
|
|
@@ -88,6 +97,14 @@ Message types: `human` or `ai`
|
|
|
88
97
|
| API Key | Optional Bearer token |
|
|
89
98
|
| Context Window Length | Messages to include (default: 10) |
|
|
90
99
|
|
|
100
|
+
### Memory Workflow
|
|
101
|
+
|
|
102
|
+
| Parameter | Description |
|
|
103
|
+
|-----------|-------------|
|
|
104
|
+
| Workflow ID | ID of the sub-workflow to execute |
|
|
105
|
+
| Session ID | Unique conversation identifier |
|
|
106
|
+
| Context Window Length | Messages to include (default: 10) |
|
|
107
|
+
|
|
91
108
|
## How It Works
|
|
92
109
|
|
|
93
110
|
Implements LangChain's `BaseListChatMessageHistory` with `BufferWindowMemory`. The AI Agent calls your workflows automatically during conversation.
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { MemoryApi } from './nodes/Memory/MemoryApi.node';
|
|
2
|
+
export { MemoryWorkflow } from './nodes/Memory/MemoryWorkflow.node';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var
|
|
5
|
-
Object.defineProperty(exports, "
|
|
6
|
-
|
|
3
|
+
exports.MemoryWorkflow = exports.MemoryApi = void 0;
|
|
4
|
+
var MemoryApi_node_1 = require("./nodes/Memory/MemoryApi.node");
|
|
5
|
+
Object.defineProperty(exports, "MemoryApi", { enumerable: true, get: function () { return MemoryApi_node_1.MemoryApi; } });
|
|
6
|
+
var MemoryWorkflow_node_1 = require("./nodes/Memory/MemoryWorkflow.node");
|
|
7
|
+
Object.defineProperty(exports, "MemoryWorkflow", { enumerable: true, get: function () { return MemoryWorkflow_node_1.MemoryWorkflow; } });
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0VBQTBEO0FBQWpELDJHQUFBLFNBQVMsT0FBQTtBQUNsQiwwRUFBb0U7QUFBM0QscUhBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTWVtb3J5QXBpIH0gZnJvbSAnLi9ub2Rlcy9NZW1vcnkvTWVtb3J5QXBpLm5vZGUnO1xuZXhwb3J0IHsgTWVtb3J5V29ya2Zsb3cgfSBmcm9tICcuL25vZGVzL01lbW9yeS9NZW1vcnlXb3JrZmxvdy5ub2RlJztcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class MemoryApi implements INodeType {
|
|
3
3
|
description: INodeTypeDescription;
|
|
4
4
|
supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;
|
|
5
5
|
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryApi = void 0;
|
|
4
|
+
const memory_1 = require("langchain/memory");
|
|
5
|
+
const chat_history_1 = require("@langchain/core/chat_history");
|
|
6
|
+
const messages_1 = require("@langchain/core/messages");
|
|
7
|
+
class ApiChatHistory extends chat_history_1.BaseListChatMessageHistory {
|
|
8
|
+
constructor(apiUrl, sessionId, apiKey) {
|
|
9
|
+
super();
|
|
10
|
+
this.apiUrl = apiUrl;
|
|
11
|
+
this.sessionId = sessionId;
|
|
12
|
+
this.apiKey = apiKey;
|
|
13
|
+
this.lc_namespace = ['langchain', 'stores', 'message', 'api'];
|
|
14
|
+
}
|
|
15
|
+
getHeaders() {
|
|
16
|
+
const headers = {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
};
|
|
19
|
+
if (this.apiKey) {
|
|
20
|
+
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
21
|
+
}
|
|
22
|
+
return headers;
|
|
23
|
+
}
|
|
24
|
+
async getMessages() {
|
|
25
|
+
console.log('[ApiChatHistory] getMessages called for session:', this.sessionId);
|
|
26
|
+
try {
|
|
27
|
+
console.log('[ApiChatHistory] Fetching from:', this.apiUrl);
|
|
28
|
+
const response = await fetch(this.apiUrl, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: this.getHeaders(),
|
|
31
|
+
body: JSON.stringify({
|
|
32
|
+
action: 'get',
|
|
33
|
+
sessionId: this.sessionId,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
console.error(`[ApiChatHistory] API error: ${response.status}`);
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const data = await response.json();
|
|
41
|
+
const messages = data?.messages ?? [];
|
|
42
|
+
console.log('[ApiChatHistory] Got messages:', messages.length);
|
|
43
|
+
return messages.map((m) => {
|
|
44
|
+
if (m.type === 'human') {
|
|
45
|
+
return new messages_1.HumanMessage(m.content);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return new messages_1.AIMessage(m.content);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error('[ApiChatHistory] getMessages error:', error);
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async addMessage(message) {
|
|
58
|
+
console.log('[ApiChatHistory] addMessage called for session:', this.sessionId);
|
|
59
|
+
try {
|
|
60
|
+
const type = message._getType() === 'human' ? 'human' : 'ai';
|
|
61
|
+
await fetch(this.apiUrl, {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: this.getHeaders(),
|
|
64
|
+
body: JSON.stringify({
|
|
65
|
+
action: 'add',
|
|
66
|
+
sessionId: this.sessionId,
|
|
67
|
+
message: {
|
|
68
|
+
type,
|
|
69
|
+
content: message.content,
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
console.log('[ApiChatHistory] Message added successfully');
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('[ApiChatHistory] addMessage error:', error);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async addMessages(messages) {
|
|
80
|
+
for (const message of messages) {
|
|
81
|
+
await this.addMessage(message);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async clear() {
|
|
85
|
+
console.log('[ApiChatHistory] clear called for session:', this.sessionId);
|
|
86
|
+
try {
|
|
87
|
+
await fetch(this.apiUrl, {
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: this.getHeaders(),
|
|
90
|
+
body: JSON.stringify({
|
|
91
|
+
action: 'clear',
|
|
92
|
+
sessionId: this.sessionId,
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('[ApiChatHistory] clear error:', error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
class MemoryApi {
|
|
102
|
+
constructor() {
|
|
103
|
+
this.description = {
|
|
104
|
+
displayName: 'Memory API',
|
|
105
|
+
name: 'memoryApi',
|
|
106
|
+
icon: 'fa:brain',
|
|
107
|
+
group: ['transform'],
|
|
108
|
+
version: 1,
|
|
109
|
+
subtitle: 'External API Memory',
|
|
110
|
+
description: 'Use an external API as chat memory storage',
|
|
111
|
+
defaults: {
|
|
112
|
+
name: 'Memory API',
|
|
113
|
+
},
|
|
114
|
+
codex: {
|
|
115
|
+
categories: ['AI'],
|
|
116
|
+
subcategories: {
|
|
117
|
+
AI: ['Memory'],
|
|
118
|
+
},
|
|
119
|
+
resources: {
|
|
120
|
+
primaryDocumentation: [
|
|
121
|
+
{
|
|
122
|
+
url: 'https://github.com/filipexyz/n8n-nodes-memory',
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
inputs: [],
|
|
128
|
+
outputs: ['ai_memory'],
|
|
129
|
+
outputNames: ['Memory'],
|
|
130
|
+
properties: [
|
|
131
|
+
{
|
|
132
|
+
displayName: 'API URL',
|
|
133
|
+
name: 'apiUrl',
|
|
134
|
+
type: 'string',
|
|
135
|
+
default: '',
|
|
136
|
+
required: true,
|
|
137
|
+
description: 'URL of the memory API (e.g., n8n webhook URL)',
|
|
138
|
+
placeholder: 'https://your-n8n.com/webhook/memory',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
displayName: 'Session ID',
|
|
142
|
+
name: 'sessionId',
|
|
143
|
+
type: 'string',
|
|
144
|
+
default: '={{ $json.sessionId }}',
|
|
145
|
+
required: true,
|
|
146
|
+
description: 'Unique identifier for the conversation session',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
displayName: 'API Key',
|
|
150
|
+
name: 'apiKey',
|
|
151
|
+
type: 'string',
|
|
152
|
+
typeOptions: {
|
|
153
|
+
password: true,
|
|
154
|
+
},
|
|
155
|
+
default: '',
|
|
156
|
+
description: 'Optional API key for authentication',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
displayName: 'Context Window Length',
|
|
160
|
+
name: 'contextWindowLength',
|
|
161
|
+
type: 'number',
|
|
162
|
+
default: 10,
|
|
163
|
+
description: 'Number of previous messages to include as context',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
async supplyData(itemIndex) {
|
|
169
|
+
const apiUrl = this.getNodeParameter('apiUrl', itemIndex);
|
|
170
|
+
const sessionId = this.getNodeParameter('sessionId', itemIndex);
|
|
171
|
+
const apiKey = this.getNodeParameter('apiKey', itemIndex, '') || undefined;
|
|
172
|
+
const contextWindowLength = this.getNodeParameter('contextWindowLength', itemIndex, 10);
|
|
173
|
+
console.log('[Memory API] Creating memory for session:', sessionId);
|
|
174
|
+
const chatHistory = new ApiChatHistory(apiUrl, sessionId, apiKey);
|
|
175
|
+
const memory = new memory_1.BufferWindowMemory({
|
|
176
|
+
memoryKey: 'chat_history',
|
|
177
|
+
chatHistory,
|
|
178
|
+
returnMessages: true,
|
|
179
|
+
inputKey: 'input',
|
|
180
|
+
outputKey: 'output',
|
|
181
|
+
k: contextWindowLength,
|
|
182
|
+
});
|
|
183
|
+
return {
|
|
184
|
+
response: memory,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.MemoryApi = MemoryApi;
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5QXBpLm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZXMvTWVtb3J5L01lbW9yeUFwaS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDZDQUFzRDtBQUN0RCwrREFBMEU7QUFDMUUsdURBSWtDO0FBRWxDLE1BQU0sY0FBZSxTQUFRLHlDQUEwQjtJQUdyRCxZQUNVLE1BQWMsRUFDZCxTQUFpQixFQUNqQixNQUFlO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBSkEsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUx6QixpQkFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFRekQsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDeEMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JB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LEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQztZQUNwQyxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXO1lBQ1gsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsQ0FBQyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVGRCw4QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElOb2RlVHlwZSxcbiAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gIElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICBTdXBwbHlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQnVmZmVyV2luZG93TWVtb3J5IH0gZnJvbSAnbGFuZ2NoYWluL21lbW9yeSc7XG5pbXBvcnQgeyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB9IGZyb20gJ0BsYW5nY2hhaW4vY29yZS9jaGF0X2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgQmFzZU1lc3NhZ2UsXG4gIEh1bWFuTWVzc2FnZSxcbiAgQUlNZXNzYWdlLFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvbWVzc2FnZXMnO1xuXG5jbGFzcyBBcGlDaGF0SGlzdG9yeSBleHRlbmRzIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5IHtcbiAgbGNfbmFtZXNwYWNlID0gWydsYW5nY2hhaW4nLCAnc3RvcmVzJywgJ21lc3NhZ2UnLCAnYXBpJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBGZXRjaGluZyBmcm9tOicsIHRoaXMuYXBpVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnZ2V0JyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtBcGlDaGF0SGlzdG9yeV0gQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgbWVzc2FnZXM/OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IH07XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGE/Lm1lc3NhZ2VzID8/IFtdO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gR290IG1lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5tYXAoKG06IHsgdHlwZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAobS50eXBlID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBIdW1hbk1lc3NhZ2UobS5jb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEFJTWVzc2FnZShtLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkTWVzc2FnZShtZXNzYWdlOiBCYXNlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGFkZE1lc3NhZ2UgY2FsbGVkIGZvciBzZXNzaW9uOicsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IG1lc3NhZ2UuX2dldFR5cGUoKSA9PT0gJ2h1bWFuJyA/ICdodW1hbicgOiAnYWknO1xuXG4gICAgICBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gTWVzc2FnZSBhZGRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBhZGRNZXNzYWdlIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGNhbGxlZCBmb3Igc2Vzc2lvbjonLCB0aGlzLnNlc3Npb25JZCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZldGNoKHRoaXMuYXBpVXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGFjdGlvbjogJ2NsZWFyJyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbW9yeUFwaSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gIGRlc2NyaXB0aW9uOiBJTm9kZVR5cGVEZXNjcmlwdGlvbiA9IHtcbiAgICBkaXNwbGF5TmFtZTogJ01lbW9yeSBBUEknLFxuICAgIG5hbWU6ICdtZW1vcnlBcGknLFxuICAgIGljb246ICdmYTpicmFpbicsXG4gICAgZ3JvdXA6IFsndHJhbnNmb3JtJ10sXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdWJ0aXRsZTogJ0V4dGVybmFsIEFQSSBNZW1vcnknLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlIGFuIGV4dGVybmFsIEFQSSBhcyBjaGF0IG1lbW9yeSBzdG9yYWdlJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgbmFtZTogJ01lbW9yeSBBUEknLFxuICAgIH0sXG4gICAgY29kZXg6IHtcbiAgICAgIGNhdGVnb3JpZXM6IFsnQUknXSxcbiAgICAgIHN1YmNhdGVnb3JpZXM6IHtcbiAgICAgICAgQUk6IFsnTWVtb3J5J10sXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgIHByaW1hcnlEb2N1bWVudGF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRodWIuY29tL2ZpbGlwZXh5ei9uOG4tbm9kZXMtbWVtb3J5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlucHV0czogW10sXG4gICAgb3V0cHV0czogWydhaV9tZW1vcnknIGFzIGNvbnN0XSxcbiAgICBvdXRwdXROYW1lczogWydNZW1vcnknXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQVBJIFVSTCcsXG4gICAgICAgIG5hbWU6ICdhcGlVcmwnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCBvZiB0aGUgbWVtb3J5IEFQSSAoZS5nLiwgbjhuIHdlYmhvb2sgVVJMKScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnaHR0cHM6Ly95b3VyLW44bi5jb20vd2ViaG9vay9tZW1vcnknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdTZXNzaW9uIElEJyxcbiAgICAgICAgbmFtZTogJ3Nlc3Npb25JZCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnPXt7ICRqc29uLnNlc3Npb25JZCB9fScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uIHNlc3Npb24nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdBUEkgS2V5JyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0NvbnRleHQgV2luZG93IExlbmd0aCcsXG4gICAgICAgIG5hbWU6ICdjb250ZXh0V2luZG93TGVuZ3RoJyxcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiBwcmV2aW91cyBtZXNzYWdlcyB0byBpbmNsdWRlIGFzIGNvbnRleHQnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGFzeW5jIHN1cHBseURhdGEoXG4gICAgdGhpczogSVN1cHBseURhdGFGdW5jdGlvbnMsXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxTdXBwbHlEYXRhPiB7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdhcGlVcmwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3Nlc3Npb25JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFwaUtleSA9ICh0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2FwaUtleScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRleHRXaW5kb3dMZW5ndGggPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2NvbnRleHRXaW5kb3dMZW5ndGgnLCBpdGVtSW5kZXgsIDEwKSBhcyBudW1iZXI7XG5cbiAgICBjb25zb2xlLmxvZygnW01lbW9yeSBBUEldIENyZWF0aW5nIG1lbW9yeSBmb3Igc2Vzc2lvbjonLCBzZXNzaW9uSWQpO1xuXG4gICAgY29uc3QgY2hhdEhpc3RvcnkgPSBuZXcgQXBpQ2hhdEhpc3RvcnkoYXBpVXJsLCBzZXNzaW9uSWQsIGFwaUtleSk7XG5cbiAgICBjb25zdCBtZW1vcnkgPSBuZXcgQnVmZmVyV2luZG93TWVtb3J5KHtcbiAgICAgIG1lbW9yeUtleTogJ2NoYXRfaGlzdG9yeScsXG4gICAgICBjaGF0SGlzdG9yeSxcbiAgICAgIHJldHVybk1lc3NhZ2VzOiB0cnVlLFxuICAgICAgaW5wdXRLZXk6ICdpbnB1dCcsXG4gICAgICBvdXRwdXRLZXk6ICdvdXRwdXQnLFxuICAgICAgazogY29udGV4dFdpbmRvd0xlbmd0aCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogbWVtb3J5LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
|
|
2
|
+
export declare class MemoryWorkflow implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryWorkflow = void 0;
|
|
4
|
+
const memory_1 = require("langchain/memory");
|
|
5
|
+
const chat_history_1 = require("@langchain/core/chat_history");
|
|
6
|
+
const messages_1 = require("@langchain/core/messages");
|
|
7
|
+
class WorkflowChatHistory extends chat_history_1.BaseListChatMessageHistory {
|
|
8
|
+
constructor(executeWorkflow, sessionId) {
|
|
9
|
+
super();
|
|
10
|
+
this.executeWorkflow = executeWorkflow;
|
|
11
|
+
this.sessionId = sessionId;
|
|
12
|
+
this.lc_namespace = ['langchain', 'stores', 'message', 'workflow'];
|
|
13
|
+
}
|
|
14
|
+
async getMessages() {
|
|
15
|
+
console.log('[WorkflowChatHistory] getMessages called for session:', this.sessionId);
|
|
16
|
+
try {
|
|
17
|
+
const result = await this.executeWorkflow({
|
|
18
|
+
action: 'get',
|
|
19
|
+
sessionId: this.sessionId,
|
|
20
|
+
});
|
|
21
|
+
const messages = result?.messages ?? [];
|
|
22
|
+
console.log('[WorkflowChatHistory] Got messages:', messages.length);
|
|
23
|
+
return messages.map((m) => {
|
|
24
|
+
if (m.type === 'human') {
|
|
25
|
+
return new messages_1.HumanMessage(m.content);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return new messages_1.AIMessage(m.content);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('[WorkflowChatHistory] getMessages error:', error);
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async addMessage(message) {
|
|
38
|
+
console.log('[WorkflowChatHistory] addMessage called for session:', this.sessionId);
|
|
39
|
+
try {
|
|
40
|
+
const type = message._getType() === 'human' ? 'human' : 'ai';
|
|
41
|
+
await this.executeWorkflow({
|
|
42
|
+
action: 'add',
|
|
43
|
+
sessionId: this.sessionId,
|
|
44
|
+
message: {
|
|
45
|
+
type,
|
|
46
|
+
content: message.content,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
console.log('[WorkflowChatHistory] Message added successfully');
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error('[WorkflowChatHistory] addMessage error:', error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async addMessages(messages) {
|
|
56
|
+
for (const message of messages) {
|
|
57
|
+
await this.addMessage(message);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async clear() {
|
|
61
|
+
console.log('[WorkflowChatHistory] clear called for session:', this.sessionId);
|
|
62
|
+
try {
|
|
63
|
+
await this.executeWorkflow({
|
|
64
|
+
action: 'clear',
|
|
65
|
+
sessionId: this.sessionId,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('[WorkflowChatHistory] clear error:', error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
class MemoryWorkflow {
|
|
74
|
+
constructor() {
|
|
75
|
+
this.description = {
|
|
76
|
+
displayName: 'Memory Workflow',
|
|
77
|
+
name: 'memoryWorkflow',
|
|
78
|
+
icon: 'fa:project-diagram',
|
|
79
|
+
group: ['transform'],
|
|
80
|
+
version: 1,
|
|
81
|
+
subtitle: 'Sub-Workflow Memory',
|
|
82
|
+
description: 'Use a sub-workflow as chat memory storage',
|
|
83
|
+
defaults: {
|
|
84
|
+
name: 'Memory Workflow',
|
|
85
|
+
},
|
|
86
|
+
codex: {
|
|
87
|
+
categories: ['AI'],
|
|
88
|
+
subcategories: {
|
|
89
|
+
AI: ['Memory'],
|
|
90
|
+
},
|
|
91
|
+
resources: {
|
|
92
|
+
primaryDocumentation: [
|
|
93
|
+
{
|
|
94
|
+
url: 'https://github.com/filipexyz/n8n-nodes-memory',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
inputs: [],
|
|
100
|
+
outputs: ['ai_memory'],
|
|
101
|
+
outputNames: ['Memory'],
|
|
102
|
+
properties: [
|
|
103
|
+
{
|
|
104
|
+
displayName: 'Workflow ID',
|
|
105
|
+
name: 'workflowId',
|
|
106
|
+
type: 'string',
|
|
107
|
+
default: '',
|
|
108
|
+
required: true,
|
|
109
|
+
description: 'ID of the workflow to execute for memory operations',
|
|
110
|
+
placeholder: 'abc123',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
displayName: 'Session ID',
|
|
114
|
+
name: 'sessionId',
|
|
115
|
+
type: 'string',
|
|
116
|
+
default: '={{ $json.sessionId }}',
|
|
117
|
+
required: true,
|
|
118
|
+
description: 'Unique identifier for the conversation session',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
displayName: 'Context Window Length',
|
|
122
|
+
name: 'contextWindowLength',
|
|
123
|
+
type: 'number',
|
|
124
|
+
default: 10,
|
|
125
|
+
description: 'Number of previous messages to include as context',
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
async supplyData(itemIndex) {
|
|
131
|
+
const workflowId = this.getNodeParameter('workflowId', itemIndex);
|
|
132
|
+
const sessionId = this.getNodeParameter('sessionId', itemIndex);
|
|
133
|
+
const contextWindowLength = this.getNodeParameter('contextWindowLength', itemIndex, 10);
|
|
134
|
+
console.log('[Memory Workflow] Creating memory for session:', sessionId);
|
|
135
|
+
const nodeContext = this;
|
|
136
|
+
const executeWorkflow = async (data) => {
|
|
137
|
+
const workflowInfo = {
|
|
138
|
+
id: workflowId,
|
|
139
|
+
};
|
|
140
|
+
const items = [{ json: data }];
|
|
141
|
+
const result = await nodeContext.executeWorkflow(workflowInfo, items);
|
|
142
|
+
// Get the output from the last node
|
|
143
|
+
const lastNodeData = result.data?.[0]?.[0]?.json;
|
|
144
|
+
return lastNodeData ?? {};
|
|
145
|
+
};
|
|
146
|
+
const chatHistory = new WorkflowChatHistory(executeWorkflow, sessionId);
|
|
147
|
+
const memory = new memory_1.BufferWindowMemory({
|
|
148
|
+
memoryKey: 'chat_history',
|
|
149
|
+
chatHistory,
|
|
150
|
+
returnMessages: true,
|
|
151
|
+
inputKey: 'input',
|
|
152
|
+
outputKey: 'output',
|
|
153
|
+
k: contextWindowLength,
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
response: memory,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.MemoryWorkflow = MemoryWorkflow;
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5V29ya2Zsb3cubm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2Rlcy9NZW1vcnkvTWVtb3J5V29ya2Zsb3cubm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSw2Q0FBc0Q7QUFDdEQsK0RBQTBFO0FBQzFFLHVEQUlrQztBQUlsQyxNQUFNLG1CQUFvQixTQUFRLHlDQUEwQjtJQUcxRCxZQUNVLGVBQWlDLEVBQ2pDLFNBQWlCO1FBRXpCLEtBQUssRUFBRSxDQUFDO1FBSEEsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFKM0IsaUJBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBTzlELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsdURBQXVELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sUUFBUSxHQUFJLE1BQU0sRUFBRSxRQUFxRCxJQUFJLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVwRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUN2QixPQUFPLElBQUksdUJBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7cUJBQU0sQ0FBQztv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TSxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV0RSxvQ0FBb0M7WUFDcEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ2pELE9BQU8sWUFBdUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQztZQUNwQyxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXO1lBQ1gsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsQ0FBQyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhHRCx3Q0FnR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElOb2RlVHlwZSxcbiAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gIElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICBTdXBwbHlEYXRhLFxuICBJRXhlY3V0ZVdvcmtmbG93SW5mbyxcbiAgSU5vZGVFeGVjdXRpb25EYXRhLFxuICBJRGF0YU9iamVjdCxcbn0gZnJvbSAnbjhuLXdvcmtmbG93JztcbmltcG9ydCB7IEJ1ZmZlcldpbmRvd01lbW9yeSB9IGZyb20gJ2xhbmdjaGFpbi9tZW1vcnknO1xuaW1wb3J0IHsgQmFzZUxpc3RDaGF0TWVzc2FnZUhpc3RvcnkgfSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvY2hhdF9oaXN0b3J5JztcbmltcG9ydCB7XG4gIEJhc2VNZXNzYWdlLFxuICBIdW1hbk1lc3NhZ2UsXG4gIEFJTWVzc2FnZSxcbn0gZnJvbSAnQGxhbmdjaGFpbi9jb3JlL21lc3NhZ2VzJztcblxudHlwZSBXb3JrZmxvd0V4ZWN1dG9yID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuY2xhc3MgV29ya2Zsb3dDaGF0SGlzdG9yeSBleHRlbmRzIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5IHtcbiAgbGNfbmFtZXNwYWNlID0gWydsYW5nY2hhaW4nLCAnc3RvcmVzJywgJ21lc3NhZ2UnLCAnd29ya2Zsb3cnXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV4ZWN1dGVXb3JrZmxvdzogV29ya2Zsb3dFeGVjdXRvcixcbiAgICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWVzc2FnZXMoKTogUHJvbWlzZTxCYXNlTWVzc2FnZVtdPiB7XG4gICAgY29uc29sZS5sb2coJ1tXb3JrZmxvd0NoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXb3JrZmxvdyh7XG4gICAgICAgIGFjdGlvbjogJ2dldCcsXG4gICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWVzc2FnZXMgPSAocmVzdWx0Py5tZXNzYWdlcyBhcyBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+KSA/PyBbXTtcbiAgICAgIGNvbnNvbGUubG9nKCdbV29ya2Zsb3dDaGF0SGlzdG9yeV0gR290IG1lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5tYXAoKG0pID0+IHtcbiAgICAgICAgaWYgKG0udHlwZSA9PT0gJ2h1bWFuJykge1xuICAgICAgICAgIHJldHVybiBuZXcgSHVtYW5NZXNzYWdlKG0uY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBSU1lc3NhZ2UobS5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXb3JrZmxvd0NoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkTWVzc2FnZShtZXNzYWdlOiBCYXNlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbV29ya2Zsb3dDaGF0SGlzdG9yeV0gYWRkTWVzc2FnZSBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eXBlID0gbWVzc2FnZS5fZ2V0VHlwZSgpID09PSAnaHVtYW4nID8gJ2h1bWFuJyA6ICdhaSc7XG5cbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVdvcmtmbG93KHtcbiAgICAgICAgYWN0aW9uOiAnYWRkJyxcbiAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY29udGVudDogbWVzc2FnZS5jb250ZW50LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZygnW1dvcmtmbG93Q2hhdEhpc3RvcnldIE1lc3NhZ2UgYWRkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXb3JrZmxvd0NoYXRIaXN0b3J5XSBhZGRNZXNzYWdlIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbV29ya2Zsb3dDaGF0SGlzdG9yeV0gY2xlYXIgY2FsbGVkIGZvciBzZXNzaW9uOicsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlV29ya2Zsb3coe1xuICAgICAgICBhY3Rpb246ICdjbGVhcicsXG4gICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW1dvcmtmbG93Q2hhdEhpc3RvcnldIGNsZWFyIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbW9yeVdvcmtmbG93IGltcGxlbWVudHMgSU5vZGVUeXBlIHtcbiAgZGVzY3JpcHRpb246IElOb2RlVHlwZURlc2NyaXB0aW9uID0ge1xuICAgIGRpc3BsYXlOYW1lOiAnTWVtb3J5IFdvcmtmbG93JyxcbiAgICBuYW1lOiAnbWVtb3J5V29ya2Zsb3cnLFxuICAgIGljb246ICdmYTpwcm9qZWN0LWRpYWdyYW0nLFxuICAgIGdyb3VwOiBbJ3RyYW5zZm9ybSddLFxuICAgIHZlcnNpb246IDEsXG4gICAgc3VidGl0bGU6ICdTdWItV29ya2Zsb3cgTWVtb3J5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1VzZSBhIHN1Yi13b3JrZmxvdyBhcyBjaGF0IG1lbW9yeSBzdG9yYWdlJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgbmFtZTogJ01lbW9yeSBXb3JrZmxvdycsXG4gICAgfSxcbiAgICBjb2RleDoge1xuICAgICAgY2F0ZWdvcmllczogWydBSSddLFxuICAgICAgc3ViY2F0ZWdvcmllczoge1xuICAgICAgICBBSTogWydNZW1vcnknXSxcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgcHJpbWFyeURvY3VtZW50YXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmw6ICdodHRwczovL2dpdGh1Yi5jb20vZmlsaXBleHl6L244bi1ub2Rlcy1tZW1vcnknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbJ2FpX21lbW9yeScgYXMgY29uc3RdLFxuICAgIG91dHB1dE5hbWVzOiBbJ01lbW9yeSddLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdXb3JrZmxvdyBJRCcsXG4gICAgICAgIG5hbWU6ICd3b3JrZmxvd0lkJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJRCBvZiB0aGUgd29ya2Zsb3cgdG8gZXhlY3V0ZSBmb3IgbWVtb3J5IG9wZXJhdGlvbnMnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJ2FiYzEyMycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Nlc3Npb24gSUQnLFxuICAgICAgICBuYW1lOiAnc2Vzc2lvbklkJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlZmF1bHQ6ICc9e3sgJGpzb24uc2Vzc2lvbklkIH19JyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gc2Vzc2lvbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0NvbnRleHQgV2luZG93IExlbmd0aCcsXG4gICAgICAgIG5hbWU6ICdjb250ZXh0V2luZG93TGVuZ3RoJyxcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiBwcmV2aW91cyBtZXNzYWdlcyB0byBpbmNsdWRlIGFzIGNvbnRleHQnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGFzeW5jIHN1cHBseURhdGEoXG4gICAgdGhpczogSVN1cHBseURhdGFGdW5jdGlvbnMsXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxTdXBwbHlEYXRhPiB7XG4gICAgY29uc3Qgd29ya2Zsb3dJZCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignd29ya2Zsb3dJZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignc2Vzc2lvbklkJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgY29udGV4dFdpbmRvd0xlbmd0aCA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcignY29udGV4dFdpbmRvd0xlbmd0aCcsIGl0ZW1JbmRleCwgMTApIGFzIG51bWJlcjtcblxuICAgIGNvbnNvbGUubG9nKCdbTWVtb3J5IFdvcmtmbG93XSBDcmVhdGluZyBtZW1vcnkgZm9yIHNlc3Npb246Jywgc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IG5vZGVDb250ZXh0ID0gdGhpcztcblxuICAgIGNvbnN0IGV4ZWN1dGVXb3JrZmxvdzogV29ya2Zsb3dFeGVjdXRvciA9IGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCB3b3JrZmxvd0luZm86IElFeGVjdXRlV29ya2Zsb3dJbmZvID0ge1xuICAgICAgICBpZDogd29ya2Zsb3dJZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGl0ZW1zOiBJTm9kZUV4ZWN1dGlvbkRhdGFbXSA9IFt7IGpzb246IGRhdGEgYXMgSURhdGFPYmplY3QgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBub2RlQ29udGV4dC5leGVjdXRlV29ya2Zsb3cod29ya2Zsb3dJbmZvLCBpdGVtcyk7XG5cbiAgICAgIC8vIEdldCB0aGUgb3V0cHV0IGZyb20gdGhlIGxhc3Qgbm9kZVxuICAgICAgY29uc3QgbGFzdE5vZGVEYXRhID0gcmVzdWx0LmRhdGE/LlswXT8uWzBdPy5qc29uO1xuICAgICAgcmV0dXJuIGxhc3ROb2RlRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA/PyB7fTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hhdEhpc3RvcnkgPSBuZXcgV29ya2Zsb3dDaGF0SGlzdG9yeShleGVjdXRlV29ya2Zsb3csIHNlc3Npb25JZCk7XG5cbiAgICBjb25zdCBtZW1vcnkgPSBuZXcgQnVmZmVyV2luZG93TWVtb3J5KHtcbiAgICAgIG1lbW9yeUtleTogJ2NoYXRfaGlzdG9yeScsXG4gICAgICBjaGF0SGlzdG9yeSxcbiAgICAgIHJldHVybk1lc3NhZ2VzOiB0cnVlLFxuICAgICAgaW5wdXRLZXk6ICdpbnB1dCcsXG4gICAgICBvdXRwdXRLZXk6ICdvdXRwdXQnLFxuICAgICAgazogY29udGV4dFdpbmRvd0xlbmd0aCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogbWVtb3J5LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n8n-nodes-memory",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Custom memory node for n8n AI Agent with external API support",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"n8n-community-node-package",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"n8n": {
|
|
29
29
|
"n8nNodesApiVersion": 1,
|
|
30
30
|
"nodes": [
|
|
31
|
-
"dist/nodes/Memory/
|
|
31
|
+
"dist/nodes/Memory/MemoryApi.node.js",
|
|
32
|
+
"dist/nodes/Memory/MemoryWorkflow.node.js"
|
|
32
33
|
],
|
|
33
34
|
"credentials": []
|
|
34
35
|
},
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BaseListChatMessageHistory } from '@langchain/core/chat_history';
|
|
2
|
-
import { BaseMessage } from '@langchain/core/messages';
|
|
3
|
-
export interface ApiMemoryHistoryConfig {
|
|
4
|
-
apiUrl: string;
|
|
5
|
-
sessionId: string;
|
|
6
|
-
apiKey?: string;
|
|
7
|
-
}
|
|
8
|
-
export declare class ApiMemoryHistory extends BaseListChatMessageHistory {
|
|
9
|
-
lc_namespace: string[];
|
|
10
|
-
private apiUrl;
|
|
11
|
-
private sessionId;
|
|
12
|
-
private apiKey?;
|
|
13
|
-
constructor(config: ApiMemoryHistoryConfig);
|
|
14
|
-
getMessages(): Promise<BaseMessage[]>;
|
|
15
|
-
addMessage(message: BaseMessage): Promise<void>;
|
|
16
|
-
addMessages(messages: BaseMessage[]): Promise<void>;
|
|
17
|
-
clear(): Promise<void>;
|
|
18
|
-
}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ApiMemoryHistory = void 0;
|
|
4
|
-
const chat_history_1 = require("@langchain/core/chat_history");
|
|
5
|
-
const messages_1 = require("@langchain/core/messages");
|
|
6
|
-
class ApiMemoryHistory extends chat_history_1.BaseListChatMessageHistory {
|
|
7
|
-
constructor(config) {
|
|
8
|
-
super();
|
|
9
|
-
this.lc_namespace = ['langchain', 'stores', 'message', 'api'];
|
|
10
|
-
this.apiUrl = config.apiUrl;
|
|
11
|
-
this.sessionId = config.sessionId;
|
|
12
|
-
this.apiKey = config.apiKey;
|
|
13
|
-
}
|
|
14
|
-
async getMessages() {
|
|
15
|
-
try {
|
|
16
|
-
const url = new URL(this.apiUrl);
|
|
17
|
-
url.searchParams.set('sessionId', this.sessionId);
|
|
18
|
-
url.searchParams.set('action', 'get');
|
|
19
|
-
const headers = {
|
|
20
|
-
'Content-Type': 'application/json',
|
|
21
|
-
};
|
|
22
|
-
if (this.apiKey) {
|
|
23
|
-
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
24
|
-
}
|
|
25
|
-
const response = await fetch(url.toString(), {
|
|
26
|
-
method: 'GET',
|
|
27
|
-
headers,
|
|
28
|
-
});
|
|
29
|
-
if (!response.ok) {
|
|
30
|
-
console.error(`Memory API error: ${response.status}`);
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
const data = await response.json();
|
|
34
|
-
const messages = data.messages || [];
|
|
35
|
-
return messages.map((msg) => {
|
|
36
|
-
switch (msg.type) {
|
|
37
|
-
case 'human':
|
|
38
|
-
return new messages_1.HumanMessage(msg.content);
|
|
39
|
-
case 'ai':
|
|
40
|
-
return new messages_1.AIMessage(msg.content);
|
|
41
|
-
case 'system':
|
|
42
|
-
return new messages_1.SystemMessage(msg.content);
|
|
43
|
-
default:
|
|
44
|
-
return new messages_1.HumanMessage(msg.content);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
console.error('Failed to get messages from API:', error);
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
async addMessage(message) {
|
|
54
|
-
try {
|
|
55
|
-
const headers = {
|
|
56
|
-
'Content-Type': 'application/json',
|
|
57
|
-
};
|
|
58
|
-
if (this.apiKey) {
|
|
59
|
-
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
60
|
-
}
|
|
61
|
-
let type = 'human';
|
|
62
|
-
if (message._getType() === 'ai') {
|
|
63
|
-
type = 'ai';
|
|
64
|
-
}
|
|
65
|
-
else if (message._getType() === 'system') {
|
|
66
|
-
type = 'system';
|
|
67
|
-
}
|
|
68
|
-
await fetch(this.apiUrl, {
|
|
69
|
-
method: 'POST',
|
|
70
|
-
headers,
|
|
71
|
-
body: JSON.stringify({
|
|
72
|
-
action: 'add',
|
|
73
|
-
sessionId: this.sessionId,
|
|
74
|
-
message: {
|
|
75
|
-
type,
|
|
76
|
-
content: message.content,
|
|
77
|
-
},
|
|
78
|
-
}),
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
console.error('Failed to add message to API:', error);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async addMessages(messages) {
|
|
86
|
-
for (const message of messages) {
|
|
87
|
-
await this.addMessage(message);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async clear() {
|
|
91
|
-
try {
|
|
92
|
-
const headers = {
|
|
93
|
-
'Content-Type': 'application/json',
|
|
94
|
-
};
|
|
95
|
-
if (this.apiKey) {
|
|
96
|
-
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
97
|
-
}
|
|
98
|
-
await fetch(this.apiUrl, {
|
|
99
|
-
method: 'POST',
|
|
100
|
-
headers,
|
|
101
|
-
body: JSON.stringify({
|
|
102
|
-
action: 'clear',
|
|
103
|
-
sessionId: this.sessionId,
|
|
104
|
-
}),
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
console.error('Failed to clear messages from API:', error);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
exports.ApiMemoryHistory = ApiMemoryHistory;
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpTWVtb3J5SGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2Rlcy9NZW1vcnkvQXBpTWVtb3J5SGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFFc0M7QUFDdEMsdURBS2tDO0FBaUJsQyxNQUFhLGdCQUFpQixTQUFRLHlDQUEwQjtJQU85RCxZQUFZLE1BQThCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBUFYsaUJBQVksR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBUXZELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV0QyxNQUFNLE9BQU8sR0FBMkI7Z0JBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkMsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUs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QkFBa0I7YUFDbkMsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU87Z0JBQ1AsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLE1BQU0sRUFBRSxPQUFPO29CQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDMUIsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdEhELDRDQXNIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5LFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvY2hhdF9oaXN0b3J5JztcbmltcG9ydCB7XG4gIEJhc2VNZXNzYWdlLFxuICBIdW1hbk1lc3NhZ2UsXG4gIEFJTWVzc2FnZSxcbiAgU3lzdGVtTWVzc2FnZSxcbn0gZnJvbSAnQGxhbmdjaGFpbi9jb3JlL21lc3NhZ2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBBcGlNZW1vcnlIaXN0b3J5Q29uZmlnIHtcbiAgYXBpVXJsOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBcGlNZXNzYWdlIHtcbiAgdHlwZTogJ2h1bWFuJyB8ICdhaScgfCAnc3lzdGVtJztcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBpUmVzcG9uc2Uge1xuICBtZXNzYWdlcz86IEFwaU1lc3NhZ2VbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaU1lbW9yeUhpc3RvcnkgZXh0ZW5kcyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB7XG4gIGxjX25hbWVzcGFjZSA9IFsnbGFuZ2NoYWluJywgJ3N0b3JlcycsICdtZXNzYWdlJywgJ2FwaSddO1xuXG4gIHByaXZhdGUgYXBpVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpTWVtb3J5SGlzdG9yeUNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcGlVcmwgPSBjb25maWcuYXBpVXJsO1xuICAgIHRoaXMuc2Vzc2lvbklkID0gY29uZmlnLnNlc3Npb25JZDtcbiAgICB0aGlzLmFwaUtleSA9IGNvbmZpZy5hcGlLZXk7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmFwaVVybCk7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2Vzc2lvbklkJywgdGhpcy5zZXNzaW9uSWQpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2FjdGlvbicsICdnZXQnKTtcblxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5hcGlLZXkpIHtcbiAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMuYXBpS2V5fWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1lbW9yeSBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQXBpUmVzcG9uc2U7XG4gICAgICBjb25zdCBtZXNzYWdlczogQXBpTWVzc2FnZVtdID0gZGF0YS5tZXNzYWdlcyB8fCBbXTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdodW1hbic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEh1bWFuTWVzc2FnZShtc2cuY29udGVudCk7XG4gICAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBSU1lc3NhZ2UobXNnLmNvbnRlbnQpO1xuICAgICAgICAgIGNhc2UgJ3N5c3RlbSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN5c3RlbU1lc3NhZ2UobXNnLmNvbnRlbnQpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEh1bWFuTWVzc2FnZShtc2cuY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gQVBJOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlKG1lc3NhZ2U6IEJhc2VNZXNzYWdlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0aGlzLmFwaUtleX1gO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHlwZTogJ2h1bWFuJyB8ICdhaScgfCAnc3lzdGVtJyA9ICdodW1hbic7XG4gICAgICBpZiAobWVzc2FnZS5fZ2V0VHlwZSgpID09PSAnYWknKSB7XG4gICAgICAgIHR5cGUgPSAnYWknO1xuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLl9nZXRUeXBlKCkgPT09ICdzeXN0ZW0nKSB7XG4gICAgICAgIHR5cGUgPSAnc3lzdGVtJztcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIG1lc3NhZ2UgdG8gQVBJOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmFwaUtleSkge1xuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdjbGVhcicsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNsZWFyIG1lc3NhZ2VzIGZyb20gQVBJOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Memory = void 0;
|
|
4
|
-
const memory_1 = require("langchain/memory");
|
|
5
|
-
const chat_history_1 = require("@langchain/core/chat_history");
|
|
6
|
-
const messages_1 = require("@langchain/core/messages");
|
|
7
|
-
class ApiChatHistory extends chat_history_1.BaseListChatMessageHistory {
|
|
8
|
-
constructor(apiUrl, sessionId, apiKey) {
|
|
9
|
-
super();
|
|
10
|
-
this.apiUrl = apiUrl;
|
|
11
|
-
this.sessionId = sessionId;
|
|
12
|
-
this.apiKey = apiKey;
|
|
13
|
-
this.lc_namespace = ['langchain', 'stores', 'message', 'api'];
|
|
14
|
-
}
|
|
15
|
-
getHeaders() {
|
|
16
|
-
const headers = {
|
|
17
|
-
'Content-Type': 'application/json',
|
|
18
|
-
};
|
|
19
|
-
if (this.apiKey) {
|
|
20
|
-
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
21
|
-
}
|
|
22
|
-
return headers;
|
|
23
|
-
}
|
|
24
|
-
async getMessages() {
|
|
25
|
-
console.log('[ApiChatHistory] getMessages called for session:', this.sessionId);
|
|
26
|
-
try {
|
|
27
|
-
console.log('[ApiChatHistory] Fetching from:', this.apiUrl);
|
|
28
|
-
const response = await fetch(this.apiUrl, {
|
|
29
|
-
method: 'POST',
|
|
30
|
-
headers: this.getHeaders(),
|
|
31
|
-
body: JSON.stringify({
|
|
32
|
-
action: 'get',
|
|
33
|
-
sessionId: this.sessionId,
|
|
34
|
-
}),
|
|
35
|
-
});
|
|
36
|
-
if (!response.ok) {
|
|
37
|
-
console.error(`[ApiChatHistory] API error: ${response.status}`);
|
|
38
|
-
return [];
|
|
39
|
-
}
|
|
40
|
-
const data = await response.json();
|
|
41
|
-
const messages = data?.messages ?? [];
|
|
42
|
-
console.log('[ApiChatHistory] Got messages:', messages.length);
|
|
43
|
-
return messages.map((m) => {
|
|
44
|
-
if (m.type === 'human') {
|
|
45
|
-
return new messages_1.HumanMessage(m.content);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return new messages_1.AIMessage(m.content);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
console.error('[ApiChatHistory] getMessages error:', error);
|
|
54
|
-
return [];
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
async addMessage(message) {
|
|
58
|
-
console.log('[ApiChatHistory] addMessage called for session:', this.sessionId);
|
|
59
|
-
try {
|
|
60
|
-
const type = message._getType() === 'human' ? 'human' : 'ai';
|
|
61
|
-
await fetch(this.apiUrl, {
|
|
62
|
-
method: 'POST',
|
|
63
|
-
headers: this.getHeaders(),
|
|
64
|
-
body: JSON.stringify({
|
|
65
|
-
action: 'add',
|
|
66
|
-
sessionId: this.sessionId,
|
|
67
|
-
message: {
|
|
68
|
-
type,
|
|
69
|
-
content: message.content,
|
|
70
|
-
},
|
|
71
|
-
}),
|
|
72
|
-
});
|
|
73
|
-
console.log('[ApiChatHistory] Message added successfully');
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
console.error('[ApiChatHistory] addMessage error:', error);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async addMessages(messages) {
|
|
80
|
-
for (const message of messages) {
|
|
81
|
-
await this.addMessage(message);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
async clear() {
|
|
85
|
-
console.log('[ApiChatHistory] clear called for session:', this.sessionId);
|
|
86
|
-
try {
|
|
87
|
-
await fetch(this.apiUrl, {
|
|
88
|
-
method: 'POST',
|
|
89
|
-
headers: this.getHeaders(),
|
|
90
|
-
body: JSON.stringify({
|
|
91
|
-
action: 'clear',
|
|
92
|
-
sessionId: this.sessionId,
|
|
93
|
-
}),
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error('[ApiChatHistory] clear error:', error);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
class Memory {
|
|
102
|
-
constructor() {
|
|
103
|
-
this.description = {
|
|
104
|
-
displayName: 'Memory API',
|
|
105
|
-
name: 'memoryApi',
|
|
106
|
-
icon: 'fa:brain',
|
|
107
|
-
group: ['transform'],
|
|
108
|
-
version: 1,
|
|
109
|
-
subtitle: 'External API Memory',
|
|
110
|
-
description: 'Use an external API as chat memory storage',
|
|
111
|
-
defaults: {
|
|
112
|
-
name: 'Memory API',
|
|
113
|
-
},
|
|
114
|
-
codex: {
|
|
115
|
-
categories: ['AI'],
|
|
116
|
-
subcategories: {
|
|
117
|
-
AI: ['Memory'],
|
|
118
|
-
},
|
|
119
|
-
resources: {
|
|
120
|
-
primaryDocumentation: [
|
|
121
|
-
{
|
|
122
|
-
url: 'https://github.com/filipexyz/n8n-nodes-memory',
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
inputs: [],
|
|
128
|
-
outputs: ['ai_memory'],
|
|
129
|
-
outputNames: ['Memory'],
|
|
130
|
-
properties: [
|
|
131
|
-
{
|
|
132
|
-
displayName: 'API URL',
|
|
133
|
-
name: 'apiUrl',
|
|
134
|
-
type: 'string',
|
|
135
|
-
default: '',
|
|
136
|
-
required: true,
|
|
137
|
-
description: 'URL of the memory API (e.g., n8n webhook URL)',
|
|
138
|
-
placeholder: 'https://your-n8n.com/webhook/memory',
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
displayName: 'Session ID',
|
|
142
|
-
name: 'sessionId',
|
|
143
|
-
type: 'string',
|
|
144
|
-
default: '={{ $json.sessionId }}',
|
|
145
|
-
required: true,
|
|
146
|
-
description: 'Unique identifier for the conversation session',
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
displayName: 'API Key',
|
|
150
|
-
name: 'apiKey',
|
|
151
|
-
type: 'string',
|
|
152
|
-
typeOptions: {
|
|
153
|
-
password: true,
|
|
154
|
-
},
|
|
155
|
-
default: '',
|
|
156
|
-
description: 'Optional API key for authentication',
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
displayName: 'Context Window Length',
|
|
160
|
-
name: 'contextWindowLength',
|
|
161
|
-
type: 'number',
|
|
162
|
-
default: 10,
|
|
163
|
-
description: 'Number of previous messages to include as context',
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
async supplyData(itemIndex) {
|
|
169
|
-
const apiUrl = this.getNodeParameter('apiUrl', itemIndex);
|
|
170
|
-
const sessionId = this.getNodeParameter('sessionId', itemIndex);
|
|
171
|
-
const apiKey = this.getNodeParameter('apiKey', itemIndex, '') || undefined;
|
|
172
|
-
const contextWindowLength = this.getNodeParameter('contextWindowLength', itemIndex, 10);
|
|
173
|
-
console.log('[Memory API] Creating memory for session:', sessionId);
|
|
174
|
-
const chatHistory = new ApiChatHistory(apiUrl, sessionId, apiKey);
|
|
175
|
-
const memory = new memory_1.BufferWindowMemory({
|
|
176
|
-
memoryKey: 'chat_history',
|
|
177
|
-
chatHistory,
|
|
178
|
-
returnMessages: true,
|
|
179
|
-
inputKey: 'input',
|
|
180
|
-
outputKey: 'output',
|
|
181
|
-
k: contextWindowLength,
|
|
182
|
-
});
|
|
183
|
-
return {
|
|
184
|
-
response: memory,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
exports.Memory = Memory;
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5Lm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZXMvTWVtb3J5L01lbW9yeS5ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDZDQUFzRDtBQUN0RCwrREFBMEU7QUFDMUUsdURBSWtDO0FBRWxDLE1BQU0sY0FBZSxTQUFRLHlDQUEwQjtJQUdyRCxZQUNVLE1BQWMsRUFDZCxTQUFpQixFQUNqQixNQUFlO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBSkEsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUztRQUx6QixpQkFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFRekQsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxPQUFPLEdBQTJCO1lBQ3RDLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkMsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDeEMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLElB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TUFBTSxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQztZQUNwQyxTQUFTLEVBQUUsY0FBYztZQUN6QixXQUFXO1lBQ1gsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsQ0FBQyxFQUFFLG1CQUFtQjtTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVGRCx3QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElOb2RlVHlwZSxcbiAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gIElTdXBwbHlEYXRhRnVuY3Rpb25zLFxuICBTdXBwbHlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQnVmZmVyV2luZG93TWVtb3J5IH0gZnJvbSAnbGFuZ2NoYWluL21lbW9yeSc7XG5pbXBvcnQgeyBCYXNlTGlzdENoYXRNZXNzYWdlSGlzdG9yeSB9IGZyb20gJ0BsYW5nY2hhaW4vY29yZS9jaGF0X2hpc3RvcnknO1xuaW1wb3J0IHtcbiAgQmFzZU1lc3NhZ2UsXG4gIEh1bWFuTWVzc2FnZSxcbiAgQUlNZXNzYWdlLFxufSBmcm9tICdAbGFuZ2NoYWluL2NvcmUvbWVzc2FnZXMnO1xuXG5jbGFzcyBBcGlDaGF0SGlzdG9yeSBleHRlbmRzIEJhc2VMaXN0Q2hhdE1lc3NhZ2VIaXN0b3J5IHtcbiAgbGNfbmFtZXNwYWNlID0gWydsYW5nY2hhaW4nLCAnc3RvcmVzJywgJ21lc3NhZ2UnLCAnYXBpJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHByaXZhdGUgYXBpS2V5Pzogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH07XG4gICAgaWYgKHRoaXMuYXBpS2V5KSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5hcGlLZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBhc3luYyBnZXRNZXNzYWdlcygpOiBQcm9taXNlPEJhc2VNZXNzYWdlW10+IHtcbiAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBjYWxsZWQgZm9yIHNlc3Npb246JywgdGhpcy5zZXNzaW9uSWQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZygnW0FwaUNoYXRIaXN0b3J5XSBGZXRjaGluZyBmcm9tOicsIHRoaXMuYXBpVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5hcGlVcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnZ2V0JyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtBcGlDaGF0SGlzdG9yeV0gQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgbWVzc2FnZXM/OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IH07XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGE/Lm1lc3NhZ2VzID8/IFtdO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gR290IG1lc3NhZ2VzOicsIG1lc3NhZ2VzLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5tYXAoKG06IHsgdHlwZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBpZiAobS50eXBlID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBIdW1hbk1lc3NhZ2UobS5jb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEFJTWVzc2FnZShtLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBnZXRNZXNzYWdlcyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkTWVzc2FnZShtZXNzYWdlOiBCYXNlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGFkZE1lc3NhZ2UgY2FsbGVkIGZvciBzZXNzaW9uOicsIHRoaXMuc2Vzc2lvbklkKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZSA9IG1lc3NhZ2UuX2dldFR5cGUoKSA9PT0gJ2h1bWFuJyA/ICdodW1hbicgOiAnYWknO1xuXG4gICAgICBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBhY3Rpb246ICdhZGQnLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS5sb2coJ1tBcGlDaGF0SGlzdG9yeV0gTWVzc2FnZSBhZGRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwaUNoYXRIaXN0b3J5XSBhZGRNZXNzYWdlIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRNZXNzYWdlcyhtZXNzYWdlczogQmFzZU1lc3NhZ2VbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGNhbGxlZCBmb3Igc2Vzc2lvbjonLCB0aGlzLnNlc3Npb25JZCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZldGNoKHRoaXMuYXBpVXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGFjdGlvbjogJ2NsZWFyJyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBpQ2hhdEhpc3RvcnldIGNsZWFyIGVycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbW9yeSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gIGRlc2NyaXB0aW9uOiBJTm9kZVR5cGVEZXNjcmlwdGlvbiA9IHtcbiAgICBkaXNwbGF5TmFtZTogJ01lbW9yeSBBUEknLFxuICAgIG5hbWU6ICdtZW1vcnlBcGknLFxuICAgIGljb246ICdmYTpicmFpbicsXG4gICAgZ3JvdXA6IFsndHJhbnNmb3JtJ10sXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdWJ0aXRsZTogJ0V4dGVybmFsIEFQSSBNZW1vcnknLFxuICAgIGRlc2NyaXB0aW9uOiAnVXNlIGFuIGV4dGVybmFsIEFQSSBhcyBjaGF0IG1lbW9yeSBzdG9yYWdlJyxcbiAgICBkZWZhdWx0czoge1xuICAgICAgbmFtZTogJ01lbW9yeSBBUEknLFxuICAgIH0sXG4gICAgY29kZXg6IHtcbiAgICAgIGNhdGVnb3JpZXM6IFsnQUknXSxcbiAgICAgIHN1YmNhdGVnb3JpZXM6IHtcbiAgICAgICAgQUk6IFsnTWVtb3J5J10sXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgIHByaW1hcnlEb2N1bWVudGF0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9naXRodWIuY29tL2ZpbGlwZXh5ei9uOG4tbm9kZXMtbWVtb3J5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGlucHV0czogW10sXG4gICAgb3V0cHV0czogWydhaV9tZW1vcnknIGFzIGNvbnN0XSxcbiAgICBvdXRwdXROYW1lczogWydNZW1vcnknXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQVBJIFVSTCcsXG4gICAgICAgIG5hbWU6ICdhcGlVcmwnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCBvZiB0aGUgbWVtb3J5IEFQSSAoZS5nLiwgbjhuIHdlYmhvb2sgVVJMKScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnaHR0cHM6Ly95b3VyLW44bi5jb20vd2ViaG9vay9tZW1vcnknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdTZXNzaW9uIElEJyxcbiAgICAgICAgbmFtZTogJ3Nlc3Npb25JZCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0OiAnPXt7ICRqc29uLnNlc3Npb25JZCB9fScsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uIHNlc3Npb24nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdBUEkgS2V5JyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgIHBhc3N3b3JkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBBUEkga2V5IGZvciBhdXRoZW50aWNhdGlvbicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ0NvbnRleHQgV2luZG93IExlbmd0aCcsXG4gICAgICAgIG5hbWU6ICdjb250ZXh0V2luZG93TGVuZ3RoJyxcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiBwcmV2aW91cyBtZXNzYWdlcyB0byBpbmNsdWRlIGFzIGNvbnRleHQnLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGFzeW5jIHN1cHBseURhdGEoXG4gICAgdGhpczogSVN1cHBseURhdGFGdW5jdGlvbnMsXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxTdXBwbHlEYXRhPiB7XG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdhcGlVcmwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ3Nlc3Npb25JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFwaUtleSA9ICh0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2FwaUtleScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRleHRXaW5kb3dMZW5ndGggPSB0aGlzLmdldE5vZGVQYXJhbWV0ZXIoJ2NvbnRleHRXaW5kb3dMZW5ndGgnLCBpdGVtSW5kZXgsIDEwKSBhcyBudW1iZXI7XG5cbiAgICBjb25zb2xlLmxvZygnW01lbW9yeSBBUEldIENyZWF0aW5nIG1lbW9yeSBmb3Igc2Vzc2lvbjonLCBzZXNzaW9uSWQpO1xuXG4gICAgY29uc3QgY2hhdEhpc3RvcnkgPSBuZXcgQXBpQ2hhdEhpc3RvcnkoYXBpVXJsLCBzZXNzaW9uSWQsIGFwaUtleSk7XG5cbiAgICBjb25zdCBtZW1vcnkgPSBuZXcgQnVmZmVyV2luZG93TWVtb3J5KHtcbiAgICAgIG1lbW9yeUtleTogJ2NoYXRfaGlzdG9yeScsXG4gICAgICBjaGF0SGlzdG9yeSxcbiAgICAgIHJldHVybk1lc3NhZ2VzOiB0cnVlLFxuICAgICAgaW5wdXRLZXk6ICdpbnB1dCcsXG4gICAgICBvdXRwdXRLZXk6ICdvdXRwdXQnLFxuICAgICAgazogY29udGV4dFdpbmRvd0xlbmd0aCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogbWVtb3J5LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|