Files
ajarbot/bfk_workflow.json

1 line
27 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\": \"/opt/n8n/bfk_audio/{{ $json.filename.replace(/\\.[^.]+$/, '.wav') }}\", \"video_path\": \"/opt/n8n/bfk_raw/{{ $json.filename }}\"}'"},"id":"57a337cf-f7bc-4184-92fc-ba30e766399b","name":"FFmpeg Extract Audio","type":"n8n-nodes-base.executeCommand","position":[1824,192],"typeVer