npm package: @marcmeese/n8n-nodes-companions
Description: N8N companion nodes for PostgreSQL conversation memory management and many other things
Latest version: 0.0.10

# n8n Companion Nodes

Dieses Paket stellt n8n-Nodes für PostgreSQL Conversation Memory Management und weitere Quality-of-Life Funktionen bereit.

Die Memory Nodes ermöglichen es, Chat-Verläufe strukturiert in PostgreSQL zu speichern und abzurufen - ideal für KI-Assistenten und Chatbots.

## Installation

In n8n Settings → Community Nodes:

```
@marcmeese/n8n-nodes-companions
```

## Konfiguration

### PostgreSQL-Credentials einrichten

1. Gehe zu n8n → Credentials → New
2. Wähle "Postgres"
3. Gib deine PostgreSQL-Verbindungsdaten ein:
   - Host
   - Port
   - Database
   - User
   - Password
   - SSL (optional)
4. Teste die Verbindung

## Verfügbare Nodes

### 📊 Memory Management

#### Create Memory Table

Erstellt eine neue PostgreSQL-Tabelle für Conversation Memory.

**Parameter:**

- `Memory Bucket ID` (string): Eindeutige ID des Memory Speichers (wird Teil des Tabellennamens)

**Output:** Erfolgsbestätigung mit Tabellennamen

**Hinweis:** Erstellt automatisch Indizes für optimale Performance

---

#### Delete Memory Table

Löscht eine komplette Memory-Tabelle inklusive aller Einträge.

**Parameter:**

- `Memory Bucket ID` (string): ID des zu löschenden Memory Speichers
- `Confirm Deletion` (boolean): Sicherheitsbestätigung (muss auf `true` gesetzt werden)

**Output:** Erfolgsbestätigung

**⚠️ Warnung:** Dieser Vorgang ist nicht umkehrbar!

---

#### Insert Memory Row

Fügt eine neue Nachricht in die Memory-Tabelle ein.

**Parameter:**

- `Memory Bucket ID` (string): ID des Memory Speichers
- `Chat ID` (string): Chat-Identifikator (nicht unique)
- `User ID` (string): Benutzer-Identifikator (nicht unique)
- `Message` (string): Nachrichteninhalt
- `Role` (dropdown): Rolle des Senders
  - User
  - Assistant
  - System

**Output:** Eingefügte Row mit ID und Zeitstempel

---

#### Fetch Memory Rows

Holt Einträge aus der Memory-Tabelle als strukturierte Daten.

**Parameter:**

- `Memory Bucket ID` (string): ID des Memory Speichers
- `Limit` (number): Anzahl der zu holenden Einträge (Standard: 10)
- `Max Age (Hours)` (number): Maximales Alter in Stunden (0 = unbegrenzt, Standard: 24)
- `Chat ID` (string, optional): Filter nach Chat ID
- `User ID` (string, optional): Filter nach User ID
- `Role` (dropdown, optional): Filter nach Rolle (All/User/Assistant/System)

**Output:** Array von Memory-Rows mit allen Feldern (id, chat_id, user_id, message, role, created_at)

**Hinweis:** Gibt die ältesten passenden Einträge zurück (aufsteigend sortiert)

---

#### Fetch Memory Text

Holt Einträge aus der Memory-Tabelle und formatiert sie als lesbaren Text.

**Parameter:**

- `Memory Bucket ID` (string): ID des Memory Speichers
- `Limit` (number): Anzahl der zu holenden Einträge (Standard: 10)
- `Max Age (Hours)` (number): Maximales Alter in Stunden (0 = unbegrenzt, Standard: 24)
- `Chat ID` (string, optional): Filter nach Chat ID
- `User ID` (string, optional): Filter nach User ID
- `Role` (dropdown, optional): Filter nach Rolle

**Formatierungs-Optionen:**

- `Include Row ID` (boolean): Zeigt Row ID als (#ID)
- `Include Chat ID` (boolean): Zeigt Chat ID als [Chat: CHAT_ID]
- `Include User ID` (boolean): Zeigt User ID als [User: USER_ID]
- `Include Time` (boolean): Zeigt Zeitstempel (DD.MM.YYYY HH:MM)
- `Include Role` (boolean): Zeigt Rolle (User/Assistant/System) - Standard: true
- `Include Message` (boolean): Zeigt Nachrichteninhalt - Standard: true

**Output:** Formatierter Text mit einem Eintrag pro Zeile

**Beispiel-Output:**

```
User: Hallo, wie geht es dir?
Assistant: Mir geht es gut, danke! Wie kann ich dir helfen?
User: Ich brauche Hilfe bei Python.
```

---

#### Delete Memory Rows

Löscht Einträge aus der Memory-Tabelle.

**Parameter:**

- `Memory Bucket ID` (string): ID des Memory Speichers
- `Delete Strategy` (dropdown): Lösch-Strategie
  - **Delete Oldest X Rows**: Löscht die X ältesten Einträge
  - **Delete by Criteria**: Löscht alle Einträge nach Kriterien
- `Confirm Deletion` (boolean): Sicherheitsbestätigung

**Bei "Delete Oldest X Rows":**

- `Limit` (number): Anzahl der zu löschenden Einträge (Standard: 5)

**Bei "Delete by Criteria":**

- `Max Age (Hours)` (number): Lösche Einträge älter als X Stunden (Standard: 168 = 1 Woche)
- `Chat ID` (string, optional): Filter nach Chat ID
- `User ID` (string, optional): Filter nach User ID
- `Role` (dropdown, optional): Filter nach Rolle

**Output:** Anzahl gelöschter Rows

---

## Typische Workflows

### Chat-Verlauf speichern und abrufen

1. **Create Memory Table** - Erstelle Tabelle beim ersten Start
2. **Insert Memory Row** - Speichere jede User- und Assistant-Nachricht
3. **Fetch Memory Text** - Hole die letzten 20 Nachrichten für Context
4. **Delete Memory Rows** - Lösche alte Nachrichten (>7 Tage) regelmäßig

### Multi-User Chat-System

- Nutze verschiedene `Chat ID`s für verschiedene Conversations
- Nutze `User ID` um Nachrichten pro Benutzer zu filtern
- Ein Memory Bucket kann mehrere Chats/User verwalten

## Datenbank-Schema

Jede Memory-Tabelle hat folgende Struktur:

```sql
CREATE TABLE conversation_{bucket_id} (
  id SERIAL PRIMARY KEY,
  chat_id VARCHAR(255) NOT NULL,
  user_id VARCHAR(255) NOT NULL,
  message TEXT NOT NULL,
  role VARCHAR(50) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

**Indizes für Performance:**

- `idx_{bucket_id}_chat_user` auf (chat_id, user_id)
- `idx_{bucket_id}_created_at` auf (created_at DESC)