Speicher
AISCouncil speichert alle Daten lokal in Ihrem Browser. Nichts wird auf einen Server hochgeladen. Das Speichersystem verwendet zwei Ebenen – localStorage für kleine, synchrone Lesevorgänge, die beim Boot benötigt werden, und IndexedDB für große, asynchrone Daten wie Bot-Profile und Chat-Verläufe.
Zwei-Ebenen-Speicherarchitektur
| Ebene | API | Kapazität | Anwendungszweck |
|---|---|---|---|
| localStorage | Synchron | ~5-10 MB | Theme, API-Schlüssel, Einstellungen – Daten, die beim Laden der Seite sofort benötigt werden |
| IndexedDB | Asynchron | ~100 MB - 1 GB+ | Bot-Profile, Chat-Verläufe, Addon-Manifeste – große Daten |
Die Aufteilung existiert, weil localStorage schnell, aber in der Größe begrenzt ist, während IndexedDB praktisch unbegrenzt, aber asynchronen Zugriff erfordert. Kritische Boot-Zeit-Werte (Theme, API-Schlüssel, Login-Status) leben im localStorage, damit die App sofort rendern kann, ohne auf asynchrone Lesevorgänge zu warten.
localStorage-Schlüssel
Alle localStorage-Schlüssel verwenden das ais--Präfix:
| Schlüssel | Typ | Beschreibung |
|---|---|---|
ais-theme | string | Aktuelles Theme (light, dark oder system) |
ais-apikey-anthropic | string | Anthropic API-Schlüssel |
ais-apikey-openai | string | OpenAI API-Schlüssel |
ais-apikey-xai | string | xAI API-Schlüssel |
ais-apikey-gemini | string | Google Gemini API-Schlüssel |
ais-apikey-openrouter | string | OpenRouter API-Schlüssel |
ais-apikey-deepseek | string | DeepSeek API-Schlüssel |
ais-apikey-groq | string | Groq API-Schlüssel |
ais-apikey-mistral | string | Mistral API-Schlüssel |
ais-user | JSON | Eingeloggte Benutzer-Info (Name, E-Mail, Bild, Anbieter) |
ais-idb-migrated | string | Flag, das localStorage-zu-IndexedDB-Migration abgeschlossen anzeigt |
ais-ollama-endpoint | string | Benutzerdefinierte Ollama-Endpunkt-URL (Standard: http://localhost:11434) |
ais-custom-providers | JSON | Array von benutzerdefinierten Anbieter-Konfigurationen |
aiscouncil-settings | JSON | Globale Einstellungen (Theme, Schriftgröße, Fähigkeiten, etc.) |
aiscouncil-usage | JSON | Nutzungs-Tracking-Daten (Tokens, Kosten pro Anbieter) |
API-Schlüssel im localStorage sind für jedes JavaScript zugänglich, das auf derselben Origin läuft. Dies ist Standard für Browser-Apps, bedeutet aber, dass Sie keine unvertrauenswürdigen Browser-Erweiterungen installieren sollten. Schlüssel sind nie in URL-Exporten oder Daten-Backups enthalten.
IndexedDB-Schlüssel
IndexedDB speichert Daten in einem Schlüssel-Wert-Objekt-Store innerhalb einer Datenbank namens ais-db (oder einer pro-Benutzer-Datenbank, wenn eingeloggt):
| Schlüsselmuster | Typ | Beschreibung |
|---|---|---|
ais-bots | array | Alle Bot-Sitzungsmetadaten (ID, Name, Konfiguration, Erstellungsdatum) |
ais-profiles | array | Alle gespeicherten Profile (individuell und Council) |
ais-chat-{botId} | array | Chat-Nachrichtenverlauf für eine bestimmte Bot-Sitzung |
ais-addon-manifests | array | Installierte Addon/Plugin-Manifeste |
ais-miniprogram-* | variiert | Installierte Mini-Programm-Daten |
Jede Bot-Sitzung hat ihren eigenen Chat-Schlüssel (ais-chat-abc123), sodass Chat-Verläufe isoliert sind und unabhängig geladen werden können.
Auto-Migration
Beim ersten Boot prüft AIS.Storage.init(), ob Daten im localStorage von einer älteren Version existieren, und migriert sie automatisch zu IndexedDB. Das ais-idb-migrated-Flag verhindert erneute Migration bei nachfolgenden Ladevorgängen.
Wenn IndexedDB nicht verfügbar ist (einige Privacy-Browser blockieren es), fällt die Speicherschicht transparent auf localStorage zurück. Die App funktioniert weiter, aber mit dem ~5-10 MB Speicherlimit.
Optionale SQLite WASM-Schicht
Für fortgeschrittene Anwendungsfälle mit großen Binärdaten (Bilder, Anhänge) kann das Speichersystem ein optionales SQLite WASM-Modul laden. SQLite läuft parallel zu IndexedDB und speichert Daten im Origin Private File System (OPFS) des Browsers.
SQLite wird bei Bedarf geladen – es wird nie geladen, es sei denn, es wird explizit angefordert oder für Blob-Speicherung benötigt. Um es zu aktivieren, gehen Sie zu Einstellungen > Allgemein > Speicher-Backend und wählen Sie SQLite.
| Funktion | IndexedDB | SQLite WASM |
|---|---|---|
| Schlüssel-Wert-Speicherung | Ja | Ja |
| Binär-Blob-Speicherung | Begrenzt | Optimiert |
| SQL-Abfragen | Nein | Ja |
| Persistenz | Browser-verwaltet | OPFS (dateibasiert) |
| Laden | Sofort | Lazy (bei erster Verwendung) |
AIS.Storage API
Das AIS.Storage-Modul bietet eine einheitliche API, die unabhängig vom aktiven Backend funktioniert:
Kernoperationen
// Speicher initialisieren (einmal beim Boot aufgerufen)
await AIS.Storage.init();
// Einen Wert abrufen
const bots = await AIS.Storage.get("ais-bots");
// Einen Wert setzen
await AIS.Storage.set("ais-bots", updatedBots);
// Einen Schlüssel löschen
await AIS.Storage.delete("ais-chat-abc123");
// Alle Schlüssel auflisten
const allKeys = await AIS.Storage.keys();
// Alle Schlüssel-Wert-Paare abrufen
const everything = await AIS.Storage.getAll();
// Alle Daten löschen
await AIS.Storage.clear();
Blob-Speicherung (SQLite)
// Einen Binär-Blob speichern
await AIS.Storage.putBlob("image-001", arrayBuffer, "image/png");
// Einen Blob abrufen
const blob = await AIS.Storage.getBlob("image-001");
// { data: Uint8Array, mime: 'image/png', size: 12345 }
Hilfsfunktionen
// Synchrone localStorage-Helfer (für Boot-Zeit-Lesevorgänge)
const theme = AIS.Storage.loadJSON("ais-theme");
AIS.Storage.saveJSON("ais-theme", "dark");
// TTL-Cache-Factory (für Registry-Caching)
const cache = AIS.Storage.cache("ais-models-cache", "ais-models-ts", 86400000); // 24h TTL
const data = cache.load(); // Gecachte Daten lesen
cache.save(newData); // Cache aktualisieren
const stale = cache.isStale(); // Prüfen ob Cache abgelaufen
Status-Eigenschaften
AIS.Storage.isIDB; // true wenn IndexedDB aktiv ist
AIS.Storage.hasSQLite; // true wenn SQLite WASM geladen ist
Export und Import
Daten exportieren
Gehen Sie zu Einstellungen > Datenschutz > Alle Daten exportieren oder verwenden Sie die API:
const backup = await AIS.Storage.exportData();
// Gibt zurück: { bcz_version: "1.0.0", exported: "2026-02-19T...", data: {...} }
Der Export umfasst alle Bot-Profile, Chat-Verläufe, Einstellungen und Addon-Manifeste. Er schließt explizit aus:
- API-Schlüssel (nie exportiert)
- Pro-Mitglied API-Schlüssel in Profilen (auf nur Anbieter/Modell reduziert)
Der Export wird als ais-backup-YYYY-MM-DD.json gespeichert.
Wenn Sie SQLite-Blob-Speicherung aktiv haben, generiert der Export auch eine separate ais-blobs-YYYY-MM-DD.db-Datei mit der SQLite-Datenbank.
Daten importieren
Gehen Sie zu Einstellungen > Datenschutz > Daten importieren oder verwenden Sie die API:
const count = await AIS.Storage.importData(jsonBackup);
// Gibt zurück: Anzahl importierter Items
Import akzeptiert:
.json-Dateien (Standard-Backup-Format).db-Dateien (SQLite-Datenbank)
API-Schlüssel werden nie importiert, auch wenn sie in der Datei vorhanden sind.
Speicherkontingente
Browser-Speicherkontingente variieren je nach Plattform:
| Browser | IndexedDB-Kontingent | Mit Persistent Storage |
|---|---|---|
| Chrome/Edge | ~60% des Speicherplatzes | Gleich, aber nicht entfernt |
| Firefox | ~50% des Speicherplatzes | Fragt Benutzer um Erlaubnis |
| Safari | ~1 GB initial, Benutzer kann mehr gewähren | Gleich |
AISCouncil fordert persistent storage beim Init über navigator.storage.persist() an. Wenn gewährt, wird der Browser Ihre Daten nicht automatisch entfernen, wenn der Speicher knapp wird.
Öffnen Sie die DevTools Ihres Browsers, gehen Sie zu Application > Storage, und suchen Sie nach der Origin aiscouncil.net, um den aktuellen Speicherverbrauch und das Kontingent zu sehen.
Datenschutz
Alle Daten bleiben auf Ihrem Gerät:
- Keine Server-Uploads – Bot-Konfigurationen, Chat-Verläufe und Einstellungen werden nie an einen Server gesendet
- Keine Analytics – Keine Nutzungsdaten werden irgendwohin übertragen
- Keine Cookies – Die App verwendet
localStorageund IndexedDB, keine Tracking-Cookies (dasais-auth-Cookie wird nur für Cross-Subdomain-Auth-Erkennung verwendet) - Kein Drittanbieter-Speicher – Daten werden nur unter der
aiscouncil.net-Origin gespeichert
Daten löschen
Um alle gespeicherten Daten zu löschen:
- Einstellungen > Datenschutz > Alle Daten löschen – entfernt alle IndexedDB-Daten, Profile und Chat-Verläufe
- Browser DevTools > Application > Clear Storage – Nuklear-Option, entfernt alles einschließlich localStorage
- Einzelnen Chat löschen – Rechtsklick auf einen Bot in der Seitenleiste und Löschen auswählen
Das Löschen aller Daten ist irreversibel. Exportieren Sie Ihre Daten zuerst, wenn Sie ein Backup möchten. Im localStorage gespeicherte API-Schlüssel werden auch entfernt, wenn über Browser DevTools gelöscht wird.
Pro-Bot-Speicherung für Mini-Programme
Jedes installierte Mini-Programm erhält seinen eigenen isolierten Speicher-Namespace. Mini-Programme greifen über die ais.storage SDK-API auf Speicher zu, die auf pro-App-präfixierte Schlüssel in IndexedDB abbildet. Ein Mini-Programm kann nicht auf die Daten eines anderen zugreifen.
// Innerhalb eines Mini-Programms
await ais.storage.set("my-key", "my-value");
const val = await ais.storage.get("my-key");
const keys = await ais.storage.keys();
await ais.storage.remove("my-key");
Speicher für ein Mini-Programm wird gelöscht, wenn das Mini-Programm deinstalliert wird.