Architecture (architecture-data.ts): - Replace document-crawler with control-pipeline (Port 8098) - Add 9 DB tables, 5 RAG collections, 10 API endpoints - Add edges: control-pipeline → PostgreSQL, Qdrant, Ollama SDK Flow (steps-betrieb.ts): - Add 4 new steps (seq 5200-5500): - Canonical Control Library (7-stage generation pipeline) - Pass 0a: Obligation Extraction (181k obligations) - Pass 0b: Atomic Composition (MCP-taugliche controls) - Dependency Engine + Evaluation (5 types, auto-generation) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
438 lines
19 KiB
TypeScript
438 lines
19 KiB
TypeScript
/**
|
|
* Architecture Data — Service Topology for BreakPilot Compliance
|
|
*
|
|
* Statische Definition aller 13 Services, ihrer Verbindungen,
|
|
* DB-Tabellen, RAG-Collections und API-Endpunkte.
|
|
*/
|
|
|
|
// =============================================================================
|
|
// TYPES
|
|
// =============================================================================
|
|
|
|
export type ServiceLayer = 'frontend' | 'backend' | 'infrastructure' | 'data-sovereignty'
|
|
|
|
export interface ArchService {
|
|
id: string
|
|
name: string
|
|
nameShort: string
|
|
layer: ServiceLayer
|
|
tech: string
|
|
port: number | null
|
|
url: string | null
|
|
container: string
|
|
description: string
|
|
descriptionLong: string
|
|
dbTables: string[]
|
|
ragCollections: string[]
|
|
apiEndpoints: string[]
|
|
dependsOn: string[]
|
|
}
|
|
|
|
export interface ArchEdge {
|
|
source: string
|
|
target: string
|
|
label?: string
|
|
}
|
|
|
|
// =============================================================================
|
|
// LAYER CONFIG
|
|
// =============================================================================
|
|
|
|
export const LAYERS: Record<ServiceLayer, {
|
|
name: string
|
|
color: string
|
|
colorBg: string
|
|
colorBorder: string
|
|
colorText: string
|
|
y: number
|
|
}> = {
|
|
frontend: {
|
|
name: 'Frontend',
|
|
color: '#3b82f6',
|
|
colorBg: '#eff6ff',
|
|
colorBorder: '#3b82f6',
|
|
colorText: '#1e40af',
|
|
y: 0,
|
|
},
|
|
backend: {
|
|
name: 'Backend APIs',
|
|
color: '#8b5cf6',
|
|
colorBg: '#f5f3ff',
|
|
colorBorder: '#8b5cf6',
|
|
colorText: '#5b21b6',
|
|
y: 220,
|
|
},
|
|
infrastructure: {
|
|
name: 'Infrastructure',
|
|
color: '#64748b',
|
|
colorBg: '#f8fafc',
|
|
colorBorder: '#64748b',
|
|
colorText: '#334155',
|
|
y: 440,
|
|
},
|
|
'data-sovereignty': {
|
|
name: 'Data Sovereignty',
|
|
color: '#22c55e',
|
|
colorBg: '#f0fdf4',
|
|
colorBorder: '#22c55e',
|
|
colorText: '#166534',
|
|
y: 600,
|
|
},
|
|
}
|
|
|
|
// =============================================================================
|
|
// SERVICES
|
|
// =============================================================================
|
|
|
|
export const ARCH_SERVICES: ArchService[] = [
|
|
// ── Frontend ──────────────────────────────────────────────────────────────
|
|
{
|
|
id: 'admin-compliance',
|
|
name: 'Admin Compliance Dashboard',
|
|
nameShort: 'Admin',
|
|
layer: 'frontend',
|
|
tech: 'Next.js 15',
|
|
port: 3007,
|
|
url: 'https://macmini:3007',
|
|
container: 'bp-compliance-admin',
|
|
description: 'Haupt-Dashboard fuer alle 17+ DSGVO/AI-Act Compliance-Module. SDK-Sidebar, CommandBar, ComplianceAdvisor.',
|
|
descriptionLong: 'Das Admin Compliance Dashboard ist die zentrale Benutzeroberflaeche fuer alle Compliance-Aktivitaeten. Es beinhaltet ueber 48 SDK-Module — von VVT und DSFA ueber Loeschfristen bis hin zu Schulungen und Audit-Reports. Saemtliche Backend-Aufrufe laufen ueber Next.js API-Routes als Reverse Proxy, sodass keine direkten Backend-URLs im Browser exponiert werden.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [
|
|
'/api/sdk/v1/compliance/[[...path]]',
|
|
'/api/sdk/v1/training/[[...path]]',
|
|
'/api/sdk/v1/rag/[[...path]]',
|
|
'/api/admin/consent/[[...path]]',
|
|
],
|
|
dependsOn: ['backend-compliance', 'ai-compliance-sdk', 'document-crawler'],
|
|
},
|
|
{
|
|
id: 'developer-portal',
|
|
name: 'Developer Portal',
|
|
nameShort: 'Dev Portal',
|
|
layer: 'frontend',
|
|
tech: 'Next.js 15',
|
|
port: 3006,
|
|
url: 'https://macmini:3006',
|
|
container: 'bp-compliance-developer-portal',
|
|
description: 'API-Dokumentation und SDK-Referenz fuer Kunden-Integration.',
|
|
descriptionLong: 'Das Developer Portal richtet sich an externe Entwickler, die das Compliance SDK in ihre eigenen Anwendungen integrieren moechten. Es dokumentiert alle REST-Endpunkte mit Request/Response-Beispielen, Authentifizierungs-Flows und SDK-Initialisierung. Das Portal laeuft als eigenstaendige Next.js-Instanz ohne Backend-Abhaengigkeiten.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
{
|
|
id: 'docs',
|
|
name: 'SDK Dokumentation',
|
|
nameShort: 'Docs',
|
|
layer: 'frontend',
|
|
tech: 'MkDocs / Nginx',
|
|
port: 8011,
|
|
url: 'https://macmini:8011',
|
|
container: 'bp-compliance-docs',
|
|
description: 'MkDocs-basierte technische Dokumentation. Statische Site via Nginx.',
|
|
descriptionLong: 'Die SDK-Dokumentation wird aus Markdown-Quelldateien (docs-src/) mit MkDocs generiert und als statische HTML-Site ueber Nginx ausgeliefert. Sie enthaelt Architektur-Beschreibungen, API-Referenzen, Deployment-Anleitungen und Compliance-Leitfaeden. Updates werden durch einen Docker-Rebuild automatisch veroeffentlicht.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
|
|
// ── Backend APIs ──────────────────────────────────────────────────────────
|
|
{
|
|
id: 'backend-compliance',
|
|
name: 'Backend Compliance',
|
|
nameShort: 'Backend',
|
|
layer: 'backend',
|
|
tech: 'Python / FastAPI',
|
|
port: 8002,
|
|
url: 'https://macmini:8002',
|
|
container: 'bp-compliance-backend',
|
|
description: 'Zentrale Compliance-API: DSGVO, DSR, GDPR, VVT, Loeschfristen, Obligations, Legal Documents, Consent.',
|
|
descriptionLong: 'Das Backend Compliance ist das Herzsttueck der Datenverarbeitung. Es verwaltet 16+ DB-Tabellen fuer Risiken, Kontrollen, Nachweise, VVT-Eintraege, Loeschfristen, rechtliche Dokumente und Einwilligungen. Alle CRUD-Operationen laufen ueber SQLAlchemy mit Pydantic-Validierung. Sessions und Caching werden ueber Valkey (Redis-kompatibel) abgewickelt, um schnelle Antwortzeiten zu gewaehrleisten.',
|
|
dbTables: [
|
|
'compliance_risks', 'compliance_controls', 'compliance_requirements',
|
|
'compliance_evidence', 'compliance_vvt', 'compliance_loeschfristen',
|
|
'compliance_obligations', 'legal_documents', 'legal_templates',
|
|
'einwilligungen_consents', 'consent_history',
|
|
'security_backlog', 'quality_entries',
|
|
'notfallplan_incidents', 'notfallplan_templates',
|
|
'data_processing_agreement',
|
|
'vendor_vendors', 'vendor_contracts', 'vendor_findings',
|
|
'vendor_control_instances', 'compliance_templates',
|
|
'compliance_isms_scope', 'compliance_isms_context', 'compliance_isms_policy',
|
|
'compliance_security_objectives', 'compliance_soa',
|
|
'compliance_audit_findings', 'compliance_corrective_actions',
|
|
'compliance_management_reviews', 'compliance_internal_audits',
|
|
'compliance_audit_trail', 'compliance_isms_readiness_checks',
|
|
],
|
|
ragCollections: [],
|
|
apiEndpoints: [
|
|
'POST/GET /api/v1/compliance/risks',
|
|
'POST/GET /api/v1/compliance/controls',
|
|
'POST/GET /api/v1/compliance/requirements',
|
|
'POST/GET /api/v1/compliance/evidence',
|
|
'POST/GET /api/v1/dsr/requests',
|
|
'POST/GET /api/v1/gdpr/exports',
|
|
'POST/GET /api/v1/consent/admin',
|
|
'CRUD /api/compliance/vvt',
|
|
'CRUD /api/compliance/loeschfristen',
|
|
'CRUD /api/compliance/obligations',
|
|
'CRUD /api/sdk/v1/vendor-compliance/vendors',
|
|
'CRUD /api/sdk/v1/vendor-compliance/contracts',
|
|
'CRUD /api/sdk/v1/vendor-compliance/findings',
|
|
'CRUD /api/sdk/v1/vendor-compliance/control-instances',
|
|
'CRUD /api/isms/scope',
|
|
'CRUD /api/isms/policies',
|
|
'CRUD /api/isms/objectives',
|
|
'CRUD /api/isms/soa',
|
|
'CRUD /api/isms/findings',
|
|
'CRUD /api/isms/capa',
|
|
'CRUD /api/isms/management-reviews',
|
|
'CRUD /api/isms/internal-audits',
|
|
'GET /api/isms/overview',
|
|
'POST /api/isms/readiness-check',
|
|
'CRUD /api/compliance/legal-documents',
|
|
'CRUD /api/compliance/legal-templates',
|
|
],
|
|
dependsOn: ['postgresql', 'valkey'],
|
|
},
|
|
{
|
|
id: 'ai-compliance-sdk',
|
|
name: 'AI Compliance SDK',
|
|
nameShort: 'AI SDK',
|
|
layer: 'backend',
|
|
tech: 'Go / Gin',
|
|
port: 8093,
|
|
url: 'https://macmini:8093',
|
|
container: 'bp-compliance-ai-sdk',
|
|
description: 'KI-konforme Compliance-Analyse: UCCA, Training, RAG-Suche, IACE, Portfolio, Roadmap, Workshop.',
|
|
descriptionLong: 'Der AI Compliance SDK Service ist in Go geschrieben und bietet KI-gestuetzte Compliance-Analysen. Er fuehrt UCCA-Bewertungen (Use Case Compliance Assessments) durch, verwaltet Schulungsmodule mit Fortschrittstracking und durchsucht Rechtstexte per RAG (Retrieval Augmented Generation) ueber Qdrant. Als LLM wird primaer Ollama (qwen3.5:35b-a3b) lokal genutzt, mit Fallback auf Claude Sonnet ueber die Anthropic API.',
|
|
dbTables: [
|
|
'ai_assessments', 'ai_training_modules', 'ai_training_progress',
|
|
],
|
|
ragCollections: [
|
|
'bp_dsgvo', 'bp_ai_act', 'bp_bdsg', 'bp_ttdsg',
|
|
'bp_compliance_templates',
|
|
],
|
|
apiEndpoints: [
|
|
'GET /regulations',
|
|
'POST /search',
|
|
'CRUD /assessments',
|
|
'CRUD /training/modules',
|
|
'GET /training/progress',
|
|
'POST /analyze',
|
|
],
|
|
dependsOn: ['qdrant', 'ollama', 'postgresql'],
|
|
},
|
|
{
|
|
id: 'control-pipeline',
|
|
name: 'Control Pipeline',
|
|
nameShort: 'Pipeline',
|
|
layer: 'backend',
|
|
tech: 'Python / FastAPI',
|
|
port: 8098,
|
|
url: 'https://macmini:8098',
|
|
container: 'bp-core-control-pipeline',
|
|
description: 'RAG-zu-Controls Pipeline: Control Generation, Pass 0a/0b, Ontology, Dedup, Dependency Engine, Applicability.',
|
|
descriptionLong: 'Die Control Pipeline ist das Herzsttueck der automatisierten Compliance-Control-Generierung. Sie verarbeitet ~105.000 RAG-Chunks aus EU/DE-Regulierungen in 6 Phasen: (1) RAG Ingestion, (2) 7-Stufen Control Generation (Lizenz-Gate + Claude LLM), (3) Pass 0a Obligation Extraction (~181k Obligations), (4) Pass 0b Atomic Composition (MCP-taugliche Controls mit assertion/pass_criteria/fail_criteria), (5) Embedding-basierte Deduplizierung mit LLM-Verifikation, (6) Dependency Engine (5 Typen: supersedes, prerequisite, compensating_control, scope_exclusion, conditional_requirement) mit automatischer Generierung via Ontology, Pattern-Regeln und Domain Packs (DSGVO, AI Act, CRA, Security, Arbeitsrecht). 126+ Tests, alle bestanden.',
|
|
dbTables: [
|
|
'canonical_controls', 'obligation_candidates', 'control_parent_links',
|
|
'control_dependencies', 'control_evaluation_results',
|
|
'canonical_processed_chunks', 'canonical_generation_jobs',
|
|
'control_dedup_reviews', 'control_patterns',
|
|
],
|
|
ragCollections: [
|
|
'bp_compliance_gesetze', 'bp_compliance_datenschutz',
|
|
'bp_compliance_ce', 'bp_dsfa_corpus', 'bp_legal_templates',
|
|
],
|
|
apiEndpoints: [
|
|
'POST /v1/canonical/generate',
|
|
'GET /v1/canonical/controls',
|
|
'POST /v1/canonical/controls/applicable',
|
|
'POST /v1/canonical/generate/submit-pass0b',
|
|
'POST /v1/canonical/generate/process-batch',
|
|
'GET /v1/canonical/generate/quality-metrics',
|
|
'POST /v1/dependencies/generate',
|
|
'POST /v1/dependencies/evaluate',
|
|
'GET /v1/dependencies/graph',
|
|
'POST /v1/document-compliance/required',
|
|
],
|
|
dependsOn: ['postgresql', 'qdrant', 'ollama'],
|
|
},
|
|
{
|
|
id: 'compliance-tts',
|
|
name: 'Compliance TTS',
|
|
nameShort: 'TTS',
|
|
layer: 'backend',
|
|
tech: 'Piper TTS + FFmpeg',
|
|
port: 8095,
|
|
url: null,
|
|
container: 'bp-compliance-tts',
|
|
description: 'Text-to-Speech fuer Schulungsvideos. Piper TTS (de_DE-thorsten-high), Video-Generierung, MinIO-Storage.',
|
|
descriptionLong: 'Der TTS-Service wandelt Schulungstexte in natuerlich klingende Sprache um und generiert daraus komplette Schulungsvideos. Er nutzt das deutsche Piper-TTS-Modell (thorsten-high) fuer die Sprachsynthese und FFmpeg fuer die Video-Komposition. Die fertigen Audio- und Videodateien werden in MinIO (S3-kompatibel) gespeichert und koennen ueber das Training-Modul abgerufen werden.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [
|
|
'POST /synthesize',
|
|
'POST /generate-video',
|
|
],
|
|
dependsOn: ['minio'],
|
|
},
|
|
|
|
// ── Infrastructure ────────────────────────────────────────────────────────
|
|
{
|
|
id: 'postgresql',
|
|
name: 'PostgreSQL',
|
|
nameShort: 'PostgreSQL',
|
|
layer: 'infrastructure',
|
|
tech: 'PostgreSQL 17',
|
|
port: 54321,
|
|
url: null,
|
|
container: '46.225.100.82:54321 (extern)',
|
|
description: 'Externe PostgreSQL-Instanz (Hetzner/meghshakka). Schemas: compliance (51 Tabellen) + public (33 compliance_*-Tabellen). Migriert 2026-03-06.',
|
|
descriptionLong: 'Die Compliance-Daten liegen seit 2026-03-06 auf einer dedizierten externen PostgreSQL 17-Instanz bei Hetzner (meghshakka, 46.225.100.82:54321). Das compliance-Schema umfasst 51 Tabellen fuer Risiken, Kontrollen, VVT, DSFA, Einwilligungen, Loeschfristen u.v.m. Weitere 33 compliance_*-Tabellen befinden sich im public-Schema (Tenants, Namespaces, LLM-Policies, Legal Documents etc.). Die Verbindung ist TLS-verschluesselt (sslmode=require). Die lokale bp-core-postgres auf dem Mac Mini wird exklusiv von breakpilot-lehrer (NIBIS-Daten) genutzt.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
{
|
|
id: 'valkey',
|
|
name: 'Valkey (Redis)',
|
|
nameShort: 'Valkey',
|
|
layer: 'infrastructure',
|
|
tech: 'Valkey 7',
|
|
port: 6379,
|
|
url: null,
|
|
container: 'bp-core-valkey',
|
|
description: 'Session-Cache und Pub/Sub. Redis-kompatibel, von breakpilot-core bereitgestellt.',
|
|
descriptionLong: 'Valkey ist ein Redis-kompatibler In-Memory-Store, der von breakpilot-core bereitgestellt wird. Er speichert Session-Daten, kurzlebige Caches und dient als Pub/Sub-Broker fuer Event-basierte Kommunikation zwischen Services. Durch die Redis-Kompatibilitaet koennen bestehende Redis-Clients und -Bibliotheken ohne Aenderungen verwendet werden.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
{
|
|
id: 'qdrant',
|
|
name: 'Qdrant',
|
|
nameShort: 'Qdrant',
|
|
layer: 'infrastructure',
|
|
tech: 'Qdrant Cloud',
|
|
port: 443,
|
|
url: 'https://qdrant-dev.breakpilot.ai',
|
|
container: 'qdrant-dev.breakpilot.ai (extern)',
|
|
description: 'Externe Vektor-Datenbank (Hetzner/meghshakka). RAG-Compliance-Suche. Collections: DSGVO, AI Act, BDSG, TTDSG. Migriert 2026-03-06.',
|
|
descriptionLong: 'Qdrant laeuft seit 2026-03-06 als externe Instanz auf qdrant-dev.breakpilot.ai (Hetzner/meghshakka). Es speichert Vektorembeddings von Rechtstexten und Compliance-Dokumenten in thematischen Collections. Der AI Compliance SDK verbindet sich per HTTPS mit API-Key-Authentifizierung. Durch die externe Instanz skaliert der Vektorspeicher unabhaengig vom Mac Mini.',
|
|
dbTables: [],
|
|
ragCollections: [
|
|
'bp_dsgvo', 'bp_ai_act', 'bp_bdsg', 'bp_ttdsg',
|
|
'bp_compliance_templates',
|
|
],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
{
|
|
id: 'minio',
|
|
name: 'Hetzner Object Storage',
|
|
nameShort: 'Object Storage',
|
|
layer: 'infrastructure',
|
|
tech: 'S3-kompatibel',
|
|
port: 443,
|
|
url: 'https://nbg1.your-objectstorage.com',
|
|
container: 'nbg1.your-objectstorage.com (extern)',
|
|
description: 'Externer S3-kompatibler Object Storage (Hetzner Nuernberg). TTS-Audio, generierte Videos. Migriert 2026-03-06.',
|
|
descriptionLong: 'Der Object Storage laeuft seit 2026-03-06 auf dem Hetzner-Standort Nuernberg (nbg1.your-objectstorage.com) und ist vollstaendig S3-kompatibel. Der Compliance TTS-Service speichert dort generierte Schulungsvideos und Audio-Dateien. Die Verbindung ist TLS-verschluesselt (MINIO_SECURE=true). Die lokale bp-core-minio-Instanz auf dem Mac Mini wird nicht mehr vom Compliance-Stack genutzt.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
{
|
|
id: 'ollama',
|
|
name: 'Ollama',
|
|
nameShort: 'Ollama',
|
|
layer: 'infrastructure',
|
|
tech: 'Ollama',
|
|
port: 11434,
|
|
url: null,
|
|
container: 'bp-core-ollama',
|
|
description: 'Lokaler LLM-Server. Modell: qwen3.5:35b-a3b. Fallback: Claude Sonnet via Anthropic API.',
|
|
descriptionLong: 'Ollama hostet ein lokales Large Language Model (qwen3.5:35b-a3b) fuer Compliance-Analysen, Textgenerierung und UCCA-Bewertungen. Durch die lokale Ausfuehrung bleiben alle Daten im eigenen Netzwerk — ein zentraler Vorteil fuer DSGVO-Konformitaet. Ist das lokale Modell nicht verfuegbar oder die Aufgabe zu komplex, wird automatisch auf Claude Sonnet ueber die Anthropic API zurueckgegriffen.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [],
|
|
dependsOn: [],
|
|
},
|
|
|
|
// ── Data Sovereignty ──────────────────────────────────────────────────────
|
|
{
|
|
id: 'dsms',
|
|
name: 'DSMS (IPFS + Gateway)',
|
|
nameShort: 'DSMS',
|
|
layer: 'data-sovereignty',
|
|
tech: 'Kubo + Node.js',
|
|
port: 8082,
|
|
url: null,
|
|
container: 'bp-compliance-dsms-node / dsms-gateway',
|
|
description: 'Data Sovereignty Management System. IPFS-Node (Kubo) + Gateway fuer dezentrale Dokument-Archivierung.',
|
|
descriptionLong: 'Das DSMS (Data Sovereignty Management System) besteht aus einem IPFS-Node (Kubo) und einem Node.js-Gateway. Es ermoeglicht die dezentrale, manipulationssichere Archivierung von Compliance-Dokumenten ueber das InterPlanetary File System. Jedes archivierte Dokument erhaelt einen Content Identifier (CID), der als kryptografischer Nachweis der Dokumentenintegritaet dient.',
|
|
dbTables: [],
|
|
ragCollections: [],
|
|
apiEndpoints: [
|
|
'POST /pin',
|
|
'GET /retrieve/:cid',
|
|
'GET /status',
|
|
],
|
|
dependsOn: [],
|
|
},
|
|
]
|
|
|
|
// =============================================================================
|
|
// EDGES (Datenfluss-Verbindungen)
|
|
// =============================================================================
|
|
|
|
export const ARCH_EDGES: ArchEdge[] = [
|
|
// Frontend → Backend
|
|
{ source: 'admin-compliance', target: 'backend-compliance', label: 'REST API' },
|
|
{ source: 'admin-compliance', target: 'ai-compliance-sdk', label: 'REST API' },
|
|
{ source: 'admin-compliance', target: 'control-pipeline', label: 'REST API' },
|
|
|
|
// Backend → Infrastructure
|
|
{ source: 'backend-compliance', target: 'postgresql', label: 'SQLAlchemy' },
|
|
{ source: 'backend-compliance', target: 'valkey', label: 'Sessions' },
|
|
{ source: 'ai-compliance-sdk', target: 'qdrant', label: 'Vektor-Suche' },
|
|
{ source: 'ai-compliance-sdk', target: 'ollama', label: 'LLM Inference' },
|
|
{ source: 'ai-compliance-sdk', target: 'postgresql', label: 'GORM' },
|
|
{ source: 'compliance-tts', target: 'minio', label: 'Audio/Video' },
|
|
{ source: 'control-pipeline', target: 'postgresql', label: 'SQLAlchemy' },
|
|
{ source: 'control-pipeline', target: 'qdrant', label: 'Embedding + Dedup' },
|
|
{ source: 'control-pipeline', target: 'ollama', label: 'LLM Dedup (qwen3.5)' },
|
|
]
|
|
|
|
// =============================================================================
|
|
// HELPERS
|
|
// =============================================================================
|
|
|
|
export function getServiceById(id: string): ArchService | undefined {
|
|
return ARCH_SERVICES.find(s => s.id === id)
|
|
}
|
|
|
|
export function getServicesByLayer(layer: ServiceLayer): ArchService[] {
|
|
return ARCH_SERVICES.filter(s => s.layer === layer)
|
|
}
|
|
|
|
export function getAllDbTables(): string[] {
|
|
const tables = new Set<string>()
|
|
ARCH_SERVICES.forEach(s => s.dbTables.forEach(t => tables.add(t)))
|
|
return Array.from(tables)
|
|
}
|
|
|
|
export function getAllRagCollections(): string[] {
|
|
const collections = new Set<string>()
|
|
ARCH_SERVICES.forEach(s => s.ragCollections.forEach(c => collections.add(c)))
|
|
return Array.from(collections)
|
|
}
|