Mitwirken
AISCouncil freut sich über Beiträge in mehreren Bereichen: der Modell-Registry, Übersetzungen, Dokumentation, Mini-Programmen und Kern-Code. Dieser Guide behandelt jeden Beitragspfad.
Bereiche für Beiträge
| Bereich | Schwierigkeit | Dateien | Validierung |
|---|---|---|---|
| Modell-Registry | Einfach | registry/models.json | python3 registry/validate.py |
| Übersetzungen | Einfach | registry/locale/{lang}.json | python3 registry/locale/validate_locale.py |
| Dokumentation | Einfach | doc.aiscouncil.net/site/docs/ | Lokale Vorschau mit npm start |
| Mini-Programme | Mittel | manifest.json + index.html | python3 registry/validate.py packages |
| Bugfixes / Features | Mittel-Schwer | src/*.js, modules/*/index.ts | ./build.sh && npm test |
Modell-Registry
Die Modell-Registry (registry/models.json) ist eine community-gepflegte Liste von LLM-Anbietern und Modellen. Ein neues Modell hinzuzufügen ist der einfachste Weg, beizutragen.
Ein Modell hinzufügen
- Forken Sie das Repository
- Bearbeiten Sie
registry/models.json– fügen Sie Ihr Modell unter dem entsprechenden Anbieter hinzu - Validieren Sie:
python3 registry/validate.py
- Reichen Sie einen Pull Request ein
Modell-Eintrag-Format
Jedes Modell erfordert diese Felder:
{
"id": "model-id-from-provider",
"name": "Menschenlesbarer Name",
"provider": "anbieter-id",
"context": 128000,
"maxOutput": 8192,
"pricing": { "input": 3.0, "output": 15.0 },
"capabilities": ["streaming", "vision", "tools"],
"tier": "paid"
}
Das Validierungsskript prüft:
- Gültige JSON-Struktur
- Alle erforderlichen Felder vorhanden (
id,name,provider,context,maxOutput,pricing,capabilities,tier) - Keine doppelten Modell-IDs
- Capabilities aus der erlaubten Menge:
vision,tools,streaming,json_mode,reasoning,code - Tier aus der erlaubten Menge:
free,paid,enterprise
Prüfen Sie die existierenden Einträge in models.json für Beispiele. Passen Sie den Formatierungsstil an (2-Space-Einrückung, Felder in derselben Reihenfolge) für saubere Diffs.
Übersetzungen
Die App verwendet community-beigesteuerte Locale-Dateien für Internationalisierung. Jede Locale-Datei übersetzt die Wizard- und UI-Strings.
Eine Übersetzung hinzufügen oder aktualisieren
- Kopieren Sie
registry/locale/en.jsonzuregistry/locale/{lang}.json(verwenden Sie ISO 639-1-Codes:es,zh,ar,fr, etc.) - Übersetzen Sie alle String-Werte (die rechte Seite jedes Schlüssel-Wert-Paars)
- Aktualisieren Sie
_meta.langund_meta.name - Validieren Sie:
python3 registry/locale/validate_locale.py registry/locale/{lang}.json
- Reichen Sie einen Pull Request ein
Übersetzungsregeln
- Übersetzen: Alle String-Werte und
_meta.name - Nicht ändern: Schlüsselnamen,
_meta.lang-Code,_meta.version, Template-Variablen in{geschweiften Klammern}
Template-Variablen wie {name}, {count} und {error} werden zur Laufzeit ersetzt. Behalten Sie sie genau so, wie sie in der englischen Quelle erscheinen.
{
"_meta": {
"lang": "es",
"name": "Espanol",
"version": 1,
"module": "wizard"
},
"createProfile": "Crear Perfil de IA",
"operator": "Operador: {name}",
"modelsSelected": "{count} seleccionados:"
}
Siehe registry/locale/TRANSLATING.md für den vollständigen Übersetzungs-Guide, einschließlich Zeichenkodierungsregeln und Prioritäts-Sprachen.
Aktuell benötigte Sprachen
Vollständige Übersetzungen existieren für Englisch, Spanisch, Chinesisch, Arabisch, Französisch, Portugiesisch, Japanisch, Koreanisch, Deutsch und Russisch. Übersetzungen werden noch benötigt für: Hindi, Türkisch, Ukrainisch, Thai, Polnisch, Italienisch, Niederländisch, Indonesisch und Vietnamesisch.
Dokumentation
Die Dokumentation lebt in der Docusaurus-Site unter doc.aiscouncil.net/site/docs/.
Docs bearbeiten
- Bearbeiten oder erstellen Sie Markdown-Dateien in
doc.aiscouncil.net/site/docs/ - Vorschau lokal:
cd doc.aiscouncil.net/site
npm install
npm start
- Wenn Sie eine neue Seite hinzufügen, registrieren Sie sie in
doc.aiscouncil.net/site/sidebars.ts - Reichen Sie einen Pull Request ein
Doc-Konventionen
- Verwenden Sie Frontmatter mit
sidebar_position,titleunddescription - Verwenden Sie
:::tip,:::info,:::warningAdmonitions für Callouts - Verwenden Sie Tabellen für strukturierte Vergleiche
- Fügen Sie Befehlsbeispiele ein, wo anwendbar
- Halten Sie den Text direkt und prägnant
Mini-Programme
Mini-Programme sind gesandboxte Web-Apps, die über iframes innerhalb der AISCouncil-Plattform laufen.
Ein Mini-Programm erstellen
- Erstellen Sie ein
manifest.json:
{
"name": "my-app",
"version": "1.0.0",
"abi": 1,
"type": "mini-program",
"title": "Meine App",
"description": "Was meine App macht",
"entry": "index.html",
"base_url": "https://your-cdn.com/my-app/",
"permissions": ["storage"]
}
- Erstellen Sie
index.htmlmit demwindow.aisSDK:
<!DOCTYPE html>
<html>
<body>
<h1>Meine App</h1>
<script>
ais.ready(() => {
ais.ui.toast("Hallo von meiner App!");
});
</script>
</body>
</html>
-
Hosten Sie Ihre Dateien auf einem beliebigen CDN (GitHub Pages, Cloudflare Pages, Vercel)
-
Testen Sie lokal durch Installation über Manifest-URL:
AIS.MiniPrograms.install("https://your-cdn.com/my-app/manifest.json");
In der Registry veröffentlichen
- Fügen Sie Ihren App-Eintrag zu
registry/packages.jsonhinzu - Validieren Sie:
python3 registry/validate.py packages
- Reichen Sie einen Pull Request ein
Siehe die SDK-Dokumentation und sdk/ais.d.ts für die vollständige Mini-Programm-API.
Das examples/hello-world/-Verzeichnis enthält ein vollständiges funktionierendes Mini-Programm, das Sie als Ausgangspunkt verwenden können.
Code-Beiträge
Entwicklungs-Setup
git clone https://github.com/nicholasgasior/bcz.git
cd bcz
npm install
./build.sh
npm test
Edit-Build-Test-Zyklus
- Quelldateien bearbeiten in
src/(index.htmlniemals direkt bearbeiten) - Builden:
./build.sh - Testen:
npm test - Verifizieren:
./build.sh --check
Für TypeScript-Module:
- Bearbeiten:
modules/{name}/index.ts - Type-Check:
npm run check - Builden:
./build.sh(kompiliert TypeScript automatisch) - Testen:
npm run test:modules
Code-Stil
Die Codebasis folgt strengen Konventionen. Überprüfen Sie diese vor dem Einreichen von Code:
Keine externen Abhängigkeiten. Das Browser-Bundle enthält nur Vanilla JS und optionales WASM. Kein React, kein jQuery, kein lodash, keine npm-Pakete zur Laufzeit.
Semantisches HTML. Verwenden Sie <dialog> für Modals, <details> für Ausklappbares, <output> für Live-Regionen, hidden-Attribut für Sichtbarkeit. Greifen Sie nach einem nativen HTML-Element, bevor Sie JS schreiben.
Klassenloses CSS. Zielen Sie auf Elemente per ID, semantischem Tag oder data-*-Attribut. Verwenden Sie Klassen nur für: State-Toggles (.active, .collapsed), dynamische JS-Komponenten (.council-member-row) und Utility-Shorthands (.f1, .sc).
/* Gut: semantische Selektoren */
#messages > article[data-from="user"] { ... }
article menu button { ... }
/* Vermeiden: klassenlastige Selektoren */
.message-container .message--user .message__actions .btn { ... }
14px minimale Schriftgröße. Der gesamte Text muss mindestens 14px sein. Dies stellt die Lesbarkeit für Vision-LLMs sicher, die mit der UI interagieren.
VLM-freundliche Click-Targets. Interaktive Elemente müssen mindestens 48px hoch sein. Toggle-Schalter sind 44x24px. Dies ermöglicht KI-Vision-Modellen, Elemente per Koordinate zu klicken.
AIS.lazy() für neue Module. Alle Nicht-Core-Module müssen das Lazy-Hydration-Muster verwenden. Die Factory-Funktion läuft nur beim ersten Zugriff:
if (!AIS.MyModule)
AIS.lazy("MyModule", function () {
"use strict";
// Modul-Code
return { publicMethod };
});
Event-Delegation. Hängen Sie einen einzelnen Listener an ein Container-Element an, keine einzelnen Listener an jedem Kind:
// Gut: einzelner Listener mit Delegation
container.addEventListener("click", (e) => {
const btn = e.target.closest("[data-action]");
if (btn) handleAction(btn.dataset.action);
});
// Vermeiden: Per-Item-Listener
items.forEach((item) => item.addEventListener("click", handler));
Kein Polling. Kein setInterval, keine requestAnimationFrame-Loops für Nicht-Animations-Arbeit. Verwenden Sie Event-gesteuerte Updates und die Page Visibility API.
Passive Listener. Alle nicht-abbrechbaren Event-Handler verwenden { passive: true }:
window.addEventListener("resize", onResize, { passive: true });
Worker-Tests
Worker-Code hat seine eigene Test-Suite:
cd worker
npm install
npm test
Python-Tooling
Python wird nur für Validierungs- und Build-Skripte verwendet – niemals an den Browser ausgeliefert:
# Modell-Registry validieren
python3 registry/validate.py
# Paket-Registry validieren
python3 registry/validate.py packages
# Eine Manifest-Datei validieren
python3 registry/validate.py manifest path/to/manifest.json
# Eine Locale-Datei validieren
python3 registry/locale/validate_locale.py registry/locale/es.json
Pull-Request-Prozess
- Forken Sie das Repository
- Erstellen Sie einen Branch für Ihre Änderung (z.B.
add-model-deepseek-v3,translate-hindi,fix-streaming-bug) - Machen Sie Ihre Änderungen nach den oben genannten Konventionen
- Führen Sie Validierung und Tests aus:
# Für Registry-Änderungen
python3 registry/validate.py
# Für Code-Änderungen
./build.sh
npm test
./build.sh --check
# Für Locale-Änderungen
python3 registry/locale/validate_locale.py registry/locale/{lang}.json
- Reichen Sie einen PR in den
main-Branch ein mit einer klaren Beschreibung, was sich geändert hat und warum
Nur-Registry-Änderungen (Modelle, Pakete, Übersetzungen) erfordern kein Builden oder Ausführen der vollständigen Test-Suite. Führen Sie einfach das relevante Validierungsskript aus.
Hilfe bekommen
- Eröffnen Sie ein GitHub-Issue für Bugs oder Feature-Requests
- Prüfen Sie die existierenden Docs unter doc.aiscouncil.net
- Überprüfen Sie
CLAUDE.mdim Repo-Root für die vollständige architektonische Referenz