From 1a72f27861d6f9b34d083f629ad6bf5a61d4b96c Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 28 May 2026 23:11:02 +0200 Subject: [PATCH] =?UTF-8?q?feat(brain):=20seed=5Frules=20erweitert=20?= =?UTF-8?q?=E2=80=94=20BRAIN=5FINTERNAL=5FURL=20+=20Auth-Strategie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ARIA wusste bisher nichts von BRAIN_INTERNAL_URL — sie hatte den Endpoint zwar, aber keinen Grund ihn zu nutzen. Zwei neue rule-Memories: - "BRAIN_INTERNAL_URL ist deine Brain-Schnittstelle" — listet die wichtigsten Endpoints (oauth//token, memory/search, memory/pinned, skills/list) und macht klar dass auch Daten wie Stefans Standort, Memories oder andere Skills aus dem Skill heraus abrufbar sind. - "Auth-Strategie fuer externe APIs" — zwingt ARIA bei jedem API-Skill in eine Checkliste: erst OAuth2 pruefen (Spotify, Google, GitHub, Reddit, …), sonst statischer Key per config_schema, NIEMALS hardcoden. Damit kommt sie eigenstaendig auf "Spotify = OAuth2 = Brain-Endpoint" ohne dass Stefan das jedes Mal sagen muss. Insgesamt jetzt 7 seed_rules statt 5. Co-Authored-By: Claude Opus 4.7 (1M context) --- aria-brain/seed_rules.py | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/aria-brain/seed_rules.py b/aria-brain/seed_rules.py index 134b413..d042943 100644 --- a/aria-brain/seed_rules.py +++ b/aria-brain/seed_rules.py @@ -93,6 +93,52 @@ SEED_RULES: List[dict] = [ "Argument, NICHT hardcoded." ), }, + { + "migration_key": "seed/skill-rule/brain-internal-url", + "type": "rule", + "title": "Skill-Regel: BRAIN_INTERNAL_URL ist deine Brain-Schnittstelle", + "category": "skills", + "content": ( + "Jeder Skill bekommt die ENV-Variable BRAIN_INTERNAL_URL " + "(Default http://localhost:8080). Damit kann der Skill das Brain " + "aufrufen — kein hardcoden noetig:\n" + " - GET {BRAIN_INTERNAL_URL}/oauth//token -> access_token " + "(mit Auto-Refresh) fuer jeden OAuth-Service\n" + " - GET {BRAIN_INTERNAL_URL}/memory/search?q=...&k=5 -> " + "Stefans Memories semantisch durchsuchen\n" + " - GET {BRAIN_INTERNAL_URL}/memory/pinned -> Hot Memory (Identitaet, Regeln)\n" + " - GET {BRAIN_INTERNAL_URL}/skills/list -> verfuegbare Skills\n" + "Mehr Endpoints siehe Brain main.py. Lies die URL IMMER aus " + "os.environ['BRAIN_INTERNAL_URL'] — hardcoden waere kaputt sobald " + "der Port wechselt. Beispiel: ein Wetter-Skill kann Stefans " + "Standort per /memory/search holen statt ihn als Arg zu erwarten." + ), + }, + { + "migration_key": "seed/skill-rule/external-api-auth-strategy", + "type": "rule", + "title": "Skill-Regel: Auth-Strategie fuer externe APIs", + "category": "skills", + "content": ( + "Wenn dein Skill mit einer externen API redet (Spotify, Google, " + "Reddit, GitHub, OpenWeather, OpenAI, …), entscheide IMMER bewusst " + "die Auth-Strategie in dieser Reihenfolge:\n" + " 1. OAuth2? (Spotify, Google, GitHub, Reddit, Discord, Twitch, " + "Microsoft, …) -> nutze `oauth_register_provider` falls der " + "Provider noch nicht da ist, dann `oauth_authorize` fuer " + "Initial-Login. Im Skill: Token via " + "BRAIN_INTERNAL_URL/oauth//token holen — Brain macht " + "Auto-Refresh, Stefan muss sich nicht alle 60min neu einloggen.\n" + " 2. Statischer API-Key / Bearer-Token? (OpenWeather, OpenAI, " + "Twilio, SendGrid, …) -> in skill.json `config_schema` " + "deklarieren. Stefan setzt den Wert in Diagnostic, Skill bekommt " + "ihn als CFG_ ENV.\n" + " 3. NIEMALS hardcoden — egal wie 'temporaer' es ist.\n" + "Wenn Du nicht sicher bist welche Strategie ein Service nutzt: " + "in der API-Doku des Services nachsehen ('OAuth' oder " + "'API Key' im Auth-Kapitel). Nicht raten." + ), + }, ]