{ "schema_version": 1, "diagram_type": "dataflow", "meta": { "title": "Gitty · KI-Commit-Nachricht", "quality_profile": "showcase", "viewBox": [ 880, 520 ] }, "stages": [ { "label": "Lokale Eingaben" }, { "label": "Native Verarbeitung" }, { "label": "Modell-Endpunkt" }, { "label": "Ergebnis" } ], "nodes": [ { "id": "staged", "type": "database", "label": "Git-Index", "sublabel": "Vorgemerkte Änderungen", "stage": 0, "row": 1 }, { "id": "notes", "type": "frontend", "label": "Notizen & Auswahl", "sublabel": "Anbieter / Modell", "stage": 0, "row": 0 }, { "id": "prepare", "type": "backend", "label": "Diff & Prompt", "sublabel": "Rust + commit_ai", "stage": 1, "row": 1 }, { "id": "model", "type": "external", "label": "KI-Anbieter", "sublabel": "Gewählter Endpunkt", "stage": 2, "row": 1 }, { "id": "draft", "type": "frontend", "label": "Vorschlag", "sublabel": "Bearbeitbar im Commit-Feld", "stage": 3, "row": 1 }, { "id": "keys", "type": "security", "label": "OS-Keychain", "sublabel": "API-Schlüssel via UI", "stage": 1, "row": 2 } ], "flows": [ { "id": "diff", "from": "staged", "to": "prepare", "label": "Diff", "variant": "emphasis" }, { "id": "context", "from": "notes", "to": "prepare", "label": "Notizen", "variant": "default", "toSide": "top", "via": [ [ 315, 157 ] ] }, { "id": "request", "from": "prepare", "to": "model", "label": "Prompt", "variant": "emphasis" }, { "id": "response", "from": "model", "to": "draft", "label": "Antwort", "variant": "emphasis" }, { "id": "secret", "from": "keys", "to": "prepare", "label": "API-Key", "variant": "security" } ], "cards": [ { "dot": "cyan", "title": "Datenbasis", "items": [ "Nur vorgemerkte Änderungen bilden den Diff. Notizen sind optional.", "Die Oberfläche übergibt Modell, Anbieter und API-Schlüssel per Tauri-Aufruf." ] }, { "dot": "rose", "title": "Vertrauensgrenzen", "items": [ "Schlüssel liegen im OS-Keychain, werden aber in die Oberfläche geladen.", "Diff und Notizen verlassen bei Cloud-Anbietern den Rechner; eigene Endpunkte können lokal sein.", "Unterstützt: OpenAI, Anthropic und eigene kompatible Endpunkte." ] }, { "dot": "emerald", "title": "Vorschlag statt Commit", "items": [ "Die Antwort füllt das bearbeitbare Nachrichtenfeld.", "Ein Commit wird erst durch eine separate Nutzeraktion erstellt." ] } ] }