Zum Hauptinhalt springen

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

EbeneAPIKapazitätAnwendungszweck
localStorageSynchron~5-10 MBTheme, API-Schlüssel, Einstellungen – Daten, die beim Laden der Seite sofort benötigt werden
IndexedDBAsynchron~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üsselTypBeschreibung
ais-themestringAktuelles Theme (light, dark oder system)
ais-apikey-anthropicstringAnthropic API-Schlüssel
ais-apikey-openaistringOpenAI API-Schlüssel
ais-apikey-xaistringxAI API-Schlüssel
ais-apikey-geministringGoogle Gemini API-Schlüssel
ais-apikey-openrouterstringOpenRouter API-Schlüssel
ais-apikey-deepseekstringDeepSeek API-Schlüssel
ais-apikey-groqstringGroq API-Schlüssel
ais-apikey-mistralstringMistral API-Schlüssel
ais-userJSONEingeloggte Benutzer-Info (Name, E-Mail, Bild, Anbieter)
ais-idb-migratedstringFlag, das localStorage-zu-IndexedDB-Migration abgeschlossen anzeigt
ais-ollama-endpointstringBenutzerdefinierte Ollama-Endpunkt-URL (Standard: http://localhost:11434)
ais-custom-providersJSONArray von benutzerdefinierten Anbieter-Konfigurationen
aiscouncil-settingsJSONGlobale Einstellungen (Theme, Schriftgröße, Fähigkeiten, etc.)
aiscouncil-usageJSONNutzungs-Tracking-Daten (Tokens, Kosten pro Anbieter)
Warnung

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üsselmusterTypBeschreibung
ais-botsarrayAlle Bot-Sitzungsmetadaten (ID, Name, Konfiguration, Erstellungsdatum)
ais-profilesarrayAlle gespeicherten Profile (individuell und Council)
ais-chat-{botId}arrayChat-Nachrichtenverlauf für eine bestimmte Bot-Sitzung
ais-addon-manifestsarrayInstallierte Addon/Plugin-Manifeste
ais-miniprogram-*variiertInstallierte 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.

FunktionIndexedDBSQLite WASM
Schlüssel-Wert-SpeicherungJaJa
Binär-Blob-SpeicherungBegrenztOptimiert
SQL-AbfragenNeinJa
PersistenzBrowser-verwaltetOPFS (dateibasiert)
LadenSofortLazy (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.

SQLite-Blobs

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:

BrowserIndexedDB-KontingentMit Persistent Storage
Chrome/Edge~60% des SpeicherplatzesGleich, aber nicht entfernt
Firefox~50% des SpeicherplatzesFragt Benutzer um Erlaubnis
Safari~1 GB initial, Benutzer kann mehr gewährenGleich

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.

Speicherverbrauch prüfen

Ö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 localStorage und IndexedDB, keine Tracking-Cookies (das ais-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:

  1. Einstellungen > Datenschutz > Alle Daten löschen – entfernt alle IndexedDB-Daten, Profile und Chat-Verläufe
  2. Browser DevTools > Application > Clear Storage – Nuklear-Option, entfernt alles einschließlich localStorage
  3. Einzelnen Chat löschen – Rechtsklick auf einen Bot in der Seitenleiste und Löschen auswählen
Gefahr

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.