{ "name": "CEO OS — Weekly Review Generator", "nodes": [ { "id": "n1-trigger", "name": "Every Monday 8:00", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1, "position": [ 0, 300 ], "parameters": { "rule": { "interval": [ { "field": "cronExpression", "expression": "0 8 * * 1" } ] } } }, { "id": "n1-vars", "name": "Config", "type": "n8n-nodes-base.set", "typeVersion": 3, "position": [ 220, 300 ], "parameters": { "mode": "manual", "assignments": { "assignments": [ { "id": "a1", "name": "api", "value": "={{$env['CEO_OS_API_URL'] ?? 'https://boardmind.dev/api'}}", "type": "string" }, { "id": "a2", "name": "tenantId", "value": "={{$env['CEO_OS_TENANT_ID']}}", "type": "string" }, { "id": "a3", "name": "serviceKey", "value": "={{$env['CEO_OS_SERVICE_KEY']}}", "type": "string" }, { "id": "a4", "name": "weekAgo", "value": "={{DateTime.now().minus({days: 7}).toISO()}}", "type": "string" } ] } } }, { "id": "n1-get-tasks", "name": "Get Completed Tasks", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4, "position": [ 440, 200 ], "parameters": { "url": "={{$json.api}}/v1/tasks?tenantId={{$json.tenantId}}&status=completed", "method": "GET", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-Service-Key", "value": "={{$json.serviceKey}}" } ] } } }, { "id": "n1-get-goals", "name": "Get Active Goals", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4, "position": [ 440, 400 ], "parameters": { "url": "={{$('Config').item.json.api}}/v1/goals?tenantId={{$('Config').item.json.tenantId}}", "method": "GET", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-Service-Key", "value": "={{$('Config').item.json.serviceKey}}" } ] } } }, { "id": "n1-build-prompt", "name": "Build Review Prompt", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 680, 300 ], "parameters": { "jsCode": "const cfg = $('Config').item.json;\nconst tasks = $('Get Completed Tasks').all().map(i => i.json);\nconst goals = $('Get Active Goals').all().map(i => i.json);\n\nconst completedThisWeek = tasks.filter(t => {\n const d = new Date(t.completedAt || t.updatedAt || '');\n return Date.now() - d.getTime() < 7 * 86400000;\n});\n\nconst prompt = [\n `Generează o retrospectivă săptămânală pentru CEO OS. Data: ${new Date().toLocaleDateString('ro-RO')}.`,\n '',\n `## Task-uri finalizate săptămâna aceasta (${completedThisWeek.length}):`,\n ...completedThisWeek.slice(0, 20).map(t => `- ${t.title}`),\n '',\n `## Obiective active (${goals.length}):`,\n ...goals.slice(0, 10).map(g => `- ${g.title} [${g.progress ?? 0}%]`),\n '',\n 'Structurează răspunsul în: ✅ Ce am realizat, 🚀 Ce urmează, ⚠️ Blocaje, 💡 Lecții învățate. Max 300 cuvinte.',\n].join('\\n');\n\nreturn [{ json: {\n messages: [{ role: 'user', content: prompt }],\n context: JSON.stringify({ tenantId: cfg.tenantId, weeklyReview: true }),\n api: cfg.api,\n tenantId: cfg.tenantId,\n serviceKey: cfg.serviceKey,\n}}];" } }, { "id": "n1-ai-ask", "name": "Generate Review via Hermes", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4, "position": [ 900, 300 ], "parameters": { "url": "={{$json.api}}/v1/ai/ask", "method": "POST", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-Service-Key", "value": "={{$json.serviceKey}}" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={\"messages\": {{JSON.stringify($json.messages)}}, \"context\": {{JSON.stringify($json.context)}}}" } }, { "id": "n1-save-obs", "name": "Save Weekly Review", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4, "position": [ 1120, 300 ], "parameters": { "url": "={{$('Build Review Prompt').item.json.api}}/v1/observations", "method": "POST", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "X-Service-Key", "value": "={{$('Build Review Prompt').item.json.serviceKey}}" }, { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={\"tenantId\": \"{{$('Build Review Prompt').item.json.tenantId}}\", \"metric\": \"weekly-review\", \"value\": {{JSON.stringify($json.reply)}}, \"subjectType\": \"review\", \"confidence\": 1}" } } ], "connections": { "Every Monday 8:00": { "main": [ [ { "node": "Config", "type": "main", "index": 0 } ] ] }, "Config": { "main": [ [ { "node": "Get Completed Tasks", "type": "main", "index": 0 }, { "node": "Get Active Goals", "type": "main", "index": 0 } ] ] }, "Get Completed Tasks": { "main": [ [ { "node": "Build Review Prompt", "type": "main", "index": 0 } ] ] }, "Get Active Goals": { "main": [ [ { "node": "Build Review Prompt", "type": "main", "index": 0 } ] ] }, "Build Review Prompt": { "main": [ [ { "node": "Generate Review via Hermes", "type": "main", "index": 0 } ] ] }, "Generate Review via Hermes": { "main": [ [ { "node": "Save Weekly Review", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "tags": [ { "name": "ceo-os" }, { "name": "automation" } ] }