Files
ajarbot/bfk_workflow_fixed.json

1 line
29 KiB
JSON
Raw Permalink Normal View History

feat: RSO observation system, child safety, Discord adapter, Telegram watchdog, email attachments Core agent improvements: - RSO (Relevance Scoring & Observation) system: interaction_logger, memory_scorer, signal_detector - Memory access logging (memory_access_log table) for relevance scoring; high-signal turn detection - Rich conversation storage for notable turns; compact_conversation truncates long user messages - Task-type classifier (query/action/analysis/creative) for observation tagging - Nested sub-agent visibility: deep delegations now register against the main agent's manager Child safety (Gabriel profile): - child_safety.py: filtering, audit logging, prompt constants for restricted sessions - .kiro/specs/child-safety-profile: requirements, design, tasks specs - GABRIEL_BOT_PROPOSAL.md: initial proposal doc - Reduced context window (10 msgs) and tutor-mode identity for restricted users Telegram adapter: - Polling watchdog: auto-restarts updater if polling drops unexpectedly - get_me() with exponential-backoff retry on NetworkError at startup - Correct stop() ordering: signal watchdog before cancelling tasks Email / Gmail: - send_email: supports file attachments (attachments list param) - get_email: surfaces attachment metadata in response Scheduled tasks / weather: - Remove OpenWeatherMap API calls from morning-weather task; use wttr.in exclusively - New scheduled tasks and scheduler state persistence Discord: - adapters/discord/__init__.py scaffold - discord-plugin: MCP plugin for Claude Code Discord integration (server.ts, skills, config) Infrastructure: - n8n workflow exports (garvis_webhook, content_pipeline variants) - memory_workspace: context, homelab-repo-updates, weekly observation summaries, error logs - UCS C240 migration plan doc - requirements.txt: new deps - .claude/settings.json, fix_hooks.py: hook/permission tuning
2026-04-23 07:54:01 -06:00
{"updatedAt": "2026-03-20T00:44:39.310Z", "createdAt": "2026-03-18T21:45:55.353Z", "id": "g7Qzow7QWBxBT2yk", "name": "Content Pipeline - BlendedFamilyKitchen", "description": null, "active": false, "isArchived": false, "nodes": [{"parameters": {"rule": {"interval": [{"field": "minutes", "minutesInterval": 30}]}}, "id": "eb4a0cfa-bebc-45b5-b783-e33709b17926", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [-16, 208], "typeVersion": 1.1}, {"parameters": {"url": "http://192.168.2.200:5000/webapi/auth.cgi", "sendQuery": true, "queryParameters": {"parameters": [{"name": "api", "value": "SYNO.API.Auth"}, {"name": "version", "value": "6"}, {"name": "method", "value": "login"}, {"name": "account", "value": "garvis-api"}, {"name": "passwd", "value": "@ms88Str"}, {"name": "session", "value": "FileStation"}, {"name": "format", "value": "sid"}]}, "options": {}}, "id": "0f2f5a90-a8fd-404a-b243-a824c240f565", "name": "NAS Login", "type": "n8n-nodes-base.httpRequest", "position": [192, 208], "typeVersion": 4.1}, {"parameters": {"url": "http://192.168.2.200:5000/webapi/entry.cgi", "sendQuery": true, "queryParameters": {"parameters": [{"name": "api", "value": "SYNO.FileStation.List"}, {"name": "version", "value": "2"}, {"name": "method", "value": "list"}, {"name": "folder_path", "value": "/BlendedFamilyKitchen/DropZone"}, {"name": "additional", "value": "size,time"}, {"name": "_sid", "value": "={{ $('NAS Login').item.json.data.sid }}"}]}, "options": {}}, "id": "02569323-a788-46aa-8f2a-b2e3da2904a3", "name": "Poll NAS DropZone", "type": "n8n-nodes-base.httpRequest", "position": [416, 208], "typeVersion": 4.1}, {"parameters": {"conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "loose"}, "combinator": "and", "conditions": [{"id": "cond1", "operator": {"type": "number", "operation": "gt"}, "leftValue": "={{ $json.data?.files?.length }}", "rightValue": "0"}]}, "options": {}}, "id": "762a445d-c774-4e68-9abd-b05b6247c68a", "name": "IF New Files?", "type": "n8n-nodes-base.if", "position": [640, 208], "typeVersion": 2}, {"parameters": {"jsCode": "// Split data.files array into individual items\nconst files = $input.first().json.data?.files || $input.first().json.files || [];\nreturn files.map(file => ({\n json: typeof file === 'string' ? { name: file } : file\n}));"}, "id": "cdf361f7-7b3f-46e3-97cc-a27cdb416e4e", "name": "Split Into Batches", "type": "n8n-nodes-base.code", "position": [944, 192], "typeVersion": 2}, {"parameters": {"assignments": {"assignments": [{"id": "a1", "name": "filename", "type": "string", "value": "={{ $json.name }}"}, {"id": "a2", "name": "filepath", "type": "string", "value": "={{ $json.path }}"}, {"id": "a3", "name": "size", "type": "number", "value": "={{ $json.additional?.size }}"}, {"id": "a4", "name": "created", "type": "string", "value": "={{ $json.additional?.time?.crtime }}"}, {"id": "a5", "name": "extension", "type": "string", "value": "={{ $json.name.split('.').pop().toLowerCase() }}"}]}, "options": {}}, "id": "493da64e-3b20-4ab0-bfd2-dec138fc2148", "name": "Extract Metadata", "type": "n8n-nodes-base.set", "position": [1168, 208], "typeVersion": 3.4}, {"parameters": {"url": "=http://192.168.2.200:5000/webapi/entry.cgi", "sendQuery": true, "queryParameters": {"parameters": [{"name": "api", "value": "SYNO.FileStation.Download"}, {"name": "version", "value": "2"}, {"name": "method", "value": "download"}, {"name": "path", "value": "={{ $json.filepath }}"}, {"name": "_sid", "value": "={{ $('NAS Login').item.json.data.sid }}"}, {"name": "mode", "value": "download"}]}, "options": {"response": {"response": {"responseFormat": "file"}}}}, "id": "8e79824b-2f3a-4a16-924c-d04350db3f3b", "name": "Download Raw Video", "type": "n8n-nodes-base.httpRequest", "position": [1376, 192], "typeVersion": 4.1}, {"parameters": {"command": "=mkdir -p /opt/n8n/bfk_raw /opt/n8n/bfk_audio && ffmpeg -y -i /opt/n8n/bfk_raw/{{ $json.filename }} -vn -acodec pcm_s16le -ar 16000 -ac 1 /opt/n8n/bfk_audio/{{ $json.filename.replace(/\\.[^.]+$/, '.wav') }} && echo '{\"audio_path\":