Basis: Certvia dev@a48c5fb als Fundament für Craftvia
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s

Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 11:05:39 +02:00
co-authored by Claude Opus 5
commit c8e6f30a27
720 changed files with 140143 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
import Anthropic from "@anthropic-ai/sdk";
/**
* Zentrale, gekapselte LLM-Anbindung (Anthropic). Erste und derzeit einzige
* Nutzung: KI-Entwurf der Umsetzungsbeschreibungen (VDA-ISA-ABGABE) im
* Audit-Wizard. Bewusst als Singleton mit lazy-Init, damit ein fehlender
* API-Key den restlichen Serverstart nicht beeinträchtigt.
*
* Konfiguration ausschließlich über Umgebungsvariablen:
* - ANTHROPIC_API_KEY Pflicht für den KI-Betrieb. Fehlt er, ist die
* KI-Anbindung deaktiviert (graceful degradation):
* `getAnthropic()` liefert `null`, Aufrufer fallen auf
* „manuell zu erfassen" zurück.
* - ANTHROPIC_MODEL Optionale Modell-ID; Default `claude-opus-5`.
*
* Das offizielle SDK liest `ANTHROPIC_API_KEY` selbst aus der Umgebung; wir
* prüfen die Existenz dennoch explizit, um den Client nur bei vorhandenem Key
* zu instanziieren und die Deaktivierung eindeutig zu machen.
*/
const DEFAULT_MODEL = "claude-opus-5";
/** Modell-ID für KI-Aufrufe (ENV-Override, sonst Default). */
export const AI_MODEL = process.env.ANTHROPIC_MODEL?.trim() || DEFAULT_MODEL;
let client: Anthropic | null | undefined;
/** True, wenn ein API-Key gesetzt ist und die KI-Anbindung genutzt werden kann. */
export function isAiConfigured(): boolean {
return Boolean(process.env.ANTHROPIC_API_KEY?.trim());
}
/**
* Liefert den (gecachten) Anthropic-Client oder `null`, wenn kein API-Key
* konfiguriert ist. Aufrufer müssen den `null`-Fall behandeln (kein Entwurf).
*/
export function getAnthropic(): Anthropic | null {
if (client !== undefined) return client;
client = isAiConfigured() ? new Anthropic() : null;
return client;
}