feat: Memento avec dates, Markdown, reminders et auth

Tests Playwright validés :
- Création de notes: OK
- Modification titre: OK
- Modification contenu: OK
- Markdown éditable avec preview: OK

Fonctionnalités:
- date-fns: dates relatives sur cards
- react-markdown + remark-gfm
- Markdown avec toggle edit/preview
- Recherche améliorée (titre/contenu/labels/checkItems)
- Reminder recurrence/location (schema)
- NextAuth.js + User/Account/Session
- userId dans Note (optionnel)
- 4 migrations créées

Ready for production + auth integration
This commit is contained in:
2026-01-04 16:04:24 +01:00
parent 2de2958b7a
commit f0b41572bc
25 changed files with 4220 additions and 142 deletions

View File

@@ -1,86 +1,101 @@
{
"meta": {
"instanceId": "memento-demo"
"instanceId": "agentic-research-workflow"
},
"nodes": [
{
"parameters": {},
"id": "b1c9e8f2-1234-4567-89ab-cdef12345678",
"name": "Déclencheur Manuel (Start)",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
250,
300
]
},
{
"parameters": {
"values": {
"string": [
"rule": {
"interval": [
{
"name": "subject",
"value": "Réunion Projet MCP"
},
{
"name": "body",
"value": "N'oublie pas de vérifier l'intégration N8N aujourd'hui à 15h00."
},
{
"name": "labels",
"value": "['work', 'n8n']"
"field": "hours",
"hoursInterval": 2
}
]
},
"options": {}
}
},
"id": "a2b3c4d5-1234-4567-89ab-cdef12345678",
"name": "Simuler Email (Données)",
"type": "n8n-nodes-base.set",
"typeVersion": 3.3,
"id": "a1b2c3d4",
"name": "Trigger: Veille Heure",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [
500,
300
240,
400
]
},
{
"parameters": {
"prompt": "Tu es un assistant personnel. Utilise l'outil MCP 'memento' pour créer une nouvelle note.\n\nDétails de la note :\n- Titre : {{ $json.subject }}\n- Contenu : {{ $json.body }}\n- Labels : {{ $json.labels }}\n\nIMPORTANT : Utilise l'outil create_note disponible dans le serveur MCP.",
"url": "https://techcrunch.com/category/artificial-intelligence/feed/",
"options": {}
},
"id": "e4f5g6h7-1234-4567-89ab-cdef12345678",
"name": "AI Agent (MCP Client)",
"id": "b2c3d4e5",
"name": "Source: Flux AI (Tech)",
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1,
"position": [
460,
400
]
},
{
"parameters": {
"promptType": "define",
"text": "=# RÔLE & PERSONA\nTu es un \"Architecte de Connaissance\" hautement sélectif. Tu ne dois laisser passer que l'or pur.\n\n# CONTEXTE\nJe te transmets un flux d'articles tech. Ton objectif est de construire une base de connaissances stratégiques (via mon serveur MCP) pour mes projets d'automatisation.\n\n# TA MISSION (AGNOSTIQUE)\nTu dois analyser l'article fourni et prendre une DÉCISION :\n\n1. **Analyse :** L'article est-il techniquement profond ? (Ex: implémentation MCP, nouvelles features N8N, patterns LLM avancés).\n2. **Filtrage :** Si l'article est superficiel (marketing, hype, news sans fond technique), **NE FAIS RIEN**. N'appelle aucun outil.\n3. **Action :** SEULEMENT si l'article est pertinent :\n - Utilise l'outil MCP 'create_note' disponible.\n - Le titre doit être percutant.\n - Le contenu doit être une synthèse technique.\n - Ajoute le label 'veille_strategique'.\n\n# INPUT ARTICLE\nTitre: {{ $json.title }}\nLien: {{ $json.guid }}\nRésumé RSS: {{ $json.contentSnippet }}",
"options": {}
},
"id": "c3d4e5f6",
"name": "Agent: Architecte (Filtre & MCP)",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.5,
"position": [
750,
300
680,
400
],
"notes": "Cet Agent décide lui-même si l'info vaut le coup d'être sauvegardée. Pas de filtre statique.",
"credentials": {
"openAiApi": {
"id": "1",
"name": "OpenAI (N'oubliez pas de configurer votre clé)"
"id": "OPENAI_API_KEY_ID",
"name": "OpenAI API"
}
},
"languageModel": {
"type": "@n8n/n8n-nodes-langchain.lm.openAi",
"id": "openai-model",
"name": "OpenAI Model"
},
"tools": {
"values": [
{
"resourceType": "mcp",
"config": {
"transport": {
"type": "httpStreamable",
"url": "http://192.168.1.10:3001/sse"
},
"authentication": "none"
}
}
]
}
}
],
"connections": {
"Déclencheur Manuel (Start)": {
"Trigger: Veille Heure": {
"main": [
[
{
"node": "Simuler Email (Données)",
"node": "Source: Flux AI (Tech)",
"type": "main",
"index": 0
}
]
]
},
"Simuler Email (Données)": {
"Source: Flux AI (Tech)": {
"main": [
[
{
"node": "AI Agent (MCP Client)",
"node": "Agent: Architecte (Filtre & MCP)",
"type": "main",
"index": 0
}