# yourmemecommunity-sy/sentinelai architecture

> Architecture diagram of the GitHub repository yourmemecommunity-sy/sentinelai, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yourmemecommunity-sy/sentinelai
- Repository: https://github.com/yourmemecommunity-sy/sentinelai

## Overview

SentinelAI is a multi-tenant security gateway that inspects prompts, files, and model replies before they reach AI providers. The principal workflow is client request → authenticated gateway orchestration → input scan and policy decision → optional masking/tokenization → provider call → output scan → audited response; file uploads use a separate extraction and malware/OCR path. The graph follows README-documented service interactions and sampled gateway wiring; several internal service connections are documented but their implementation was not sampled.

Main entry points: [`sentinel-ai/apps/api/src/routes/registerRoutes.ts`](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/routes/registerRoutes.ts) (Gateway Routes), [`sentinel-ai/apps/api/src/services/secureAiService.ts`](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/secureAiService.ts) (AI Orchestrator), [`sentinel-ai/services/security-engine/app/pipelines/scan_pipeline.py`](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/pipelines/scan_pipeline.py) (Scan Pipeline), [`sentinel-ai/services/document-scanner/app/pipelines/extract_pipeline.py`](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/pipelines/extract_pipeline.py) (Document Extraction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Clients"]
  node_app_user(("Applications"))
  node_sdk_js["JavaScript SDK<br/>[client.ts]"]
  node_sdk_py["Python SDK<br/>[client.py]"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_proxy["Dashboard BFF<br/>[route.ts]"]
end

subgraph group_gateway["API Gateway"]
  node_gateway_app["Gateway Routes<br/>[registerRoutes.ts]"]
  node_auth["Auth and RBAC<br/>[auth.ts]"]
  node_secure_ai["AI Orchestrator<br/>[secureAiService.ts]"]
  node_stream["Secure Streaming"]
  node_file_api["File Scan API<br/>[fileScanService.ts]"]
  node_sec_client["Security Client<br/>[securityClient.ts]"]
end

subgraph group_security["Security Services"]
  node_engine["Scan Pipeline<br/>[scan_pipeline.py]"]
  node_detectors["Threat Detectors<br/>[registry.py]"]
  node_policy["Policy and Risk<br/>[evaluator.py]"]
  node_sanitizer["Sanitization<br/>[sanitizer.py]"]
  node_doc_scan["Document Extraction"]
  node_doc_api["Document API<br/>[routes.py]"]
  node_ocr["OCR Engine<br/>[engine.py]"]
  node_vault["Token Vault<br/>[vault.py]"]
end

subgraph group_ai["AI Routing"]
  node_ai_router["Provider Router<br/>[AiRouter.ts]"]
  node_providers["Provider Adapters"]
  node_models{{"AI Providers"}}
end

subgraph group_state["Tenant State"]
  node_postgres[("Tenant PostgreSQL<br/>[tenantDb.ts]")]
  node_events["Audit and Events<br/>[eventSink.ts]"]
  node_policy_repo["Policy Repository"]
end

node_documents(("File Uploads"))

node_app_user -->|"calls"| node_sdk_js
node_app_user -->|"calls"| node_sdk_py
node_sdk_js -->|"sends requests"| node_gateway_app
node_sdk_py -->|"sends requests"| node_gateway_app
node_dashboard -->|"calls"| node_proxy
node_proxy -->|"proxies requests"| node_gateway_app
node_gateway_app -->|"authorizes"| node_auth
node_gateway_app -->|"invokes"| node_secure_ai
node_gateway_app -->|"dispatches streams"| node_stream
node_documents -->|"uploads"| node_file_api
node_gateway_app -->|"dispatches scans"| node_file_api
node_file_api -->|"sends file bytes"| node_doc_api
node_doc_api -->|"runs extraction"| node_doc_scan
node_doc_scan -->|"extracts image text"| node_ocr
node_secure_ai -->|"requests scans"| node_sec_client
node_sec_client -->|"sends prompts"| node_engine
node_engine -->|"detects content"| node_detectors
node_engine -->|"evaluates detections"| node_policy
node_engine -->|"sanitizes content"| node_sanitizer
node_secure_ai -->|"loads policies"| node_policy_repo
node_secure_ai -.->|"tokenizes content"| node_vault
node_secure_ai -->|"routes sanitized prompts"| node_ai_router
node_ai_router -->|"selects adapter"| node_providers
node_providers -->|"sends prompts"| node_models
node_secure_ai -->|"records outcomes"| node_events
node_gateway_app -->|"reads usage and events"| node_events
node_events -->|"persists events"| node_postgres
node_policy_repo -->|"reads policies"| node_postgres
node_doc_scan -.->|"returns extracted text"| node_sec_client

click node_sdk_js "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/packages/sdk/javascript/src/client.ts"
click node_sdk_py "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/packages/sdk/python/sentinelai/client.py"
click node_dashboard "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/dashboard/app/dashboard/page.tsx"
click node_proxy "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/dashboard/app/api/proxy/%5B...path%5D/route.ts"
click node_gateway_app "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/routes/registerRoutes.ts"
click node_auth "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/middleware/auth.ts"
click node_secure_ai "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/secureAiService.ts"
click node_stream "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/secureStreamService.ts"
click node_file_api "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/fileScanService.ts"
click node_sec_client "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/security/securityClient.ts"
click node_engine "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/pipelines/scan_pipeline.py"
click node_detectors "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/detectors/registry.py"
click node_policy "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/policies/evaluator.py"
click node_sanitizer "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/sanitization/sanitizer.py"
click node_doc_scan "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/pipelines/extract_pipeline.py"
click node_doc_api "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/api/routes.py"
click node_ocr "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/ocr/engine.py"
click node_vault "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/token-vault/app/vault.py"
click node_ai_router "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/ai-router/src/routing/AiRouter.ts"
click node_providers "https://github.com/yourmemecommunity-sy/sentinelai/tree/main/sentinel-ai/services/ai-router/src/providers"
click node_postgres "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/db/tenantDb.ts"
click node_events "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/events/eventSink.ts"
click node_policy_repo "https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/repositories/policyRepository.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app_user,node_sdk_js,node_sdk_py,node_dashboard,node_proxy toneBlue
class node_gateway_app,node_auth,node_secure_ai,node_stream,node_file_api,node_sec_client toneAmber
class node_engine,node_detectors,node_policy,node_sanitizer,node_doc_scan,node_doc_api,node_ocr,node_vault toneMint
class node_ai_router,node_providers,node_models toneRose
class node_postgres,node_events,node_policy_repo,node_documents toneIndigo
```

## Components

### Clients

- **Applications**
- [JavaScript SDK](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/packages/sdk/javascript/src/client.ts): `sentinel-ai/packages/sdk/javascript/src/client.ts`
- [Python SDK](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/packages/sdk/python/sentinelai/client.py): `sentinel-ai/packages/sdk/python/sentinelai/client.py`
- [Dashboard](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/dashboard/app/dashboard/page.tsx): `sentinel-ai/apps/dashboard/app/dashboard/page.tsx`
- [Dashboard BFF](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/dashboard/app/api/proxy/%5B...path%5D/route.ts): `sentinel-ai/apps/dashboard/app/api/proxy/[...path]/route.ts`

### API Gateway

- [Gateway Routes](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/routes/registerRoutes.ts): `sentinel-ai/apps/api/src/routes/registerRoutes.ts`
- [Auth and RBAC](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/middleware/auth.ts): `sentinel-ai/apps/api/src/middleware/auth.ts`
- [AI Orchestrator](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/secureAiService.ts): `sentinel-ai/apps/api/src/services/secureAiService.ts`
- [Secure Streaming](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/secureStreamService.ts): `sentinel-ai/apps/api/src/services/secureStreamService.ts`
- [File Scan API](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/services/fileScanService.ts): `sentinel-ai/apps/api/src/services/fileScanService.ts`
- [Security Client](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/security/securityClient.ts): `sentinel-ai/apps/api/src/security/securityClient.ts`

### Security Services

- [Scan Pipeline](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/pipelines/scan_pipeline.py): `sentinel-ai/services/security-engine/app/pipelines/scan_pipeline.py`
- [Threat Detectors](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/detectors/registry.py): `sentinel-ai/services/security-engine/app/detectors/registry.py`
- [Policy and Risk](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/policies/evaluator.py): `sentinel-ai/services/security-engine/app/policies/evaluator.py`
- [Sanitization](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/security-engine/app/sanitization/sanitizer.py): `sentinel-ai/services/security-engine/app/sanitization/sanitizer.py`
- [Document Extraction](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/pipelines/extract_pipeline.py): `sentinel-ai/services/document-scanner/app/pipelines/extract_pipeline.py`
- [Document API](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/api/routes.py): `sentinel-ai/services/document-scanner/app/api/routes.py`
- [OCR Engine](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/document-scanner/app/ocr/engine.py): `sentinel-ai/services/document-scanner/app/ocr/engine.py`
- [Token Vault](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/token-vault/app/vault.py): `sentinel-ai/services/token-vault/app/vault.py`

### AI Routing

- [Provider Router](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/services/ai-router/src/routing/AiRouter.ts): `sentinel-ai/services/ai-router/src/routing/AiRouter.ts`
- [Provider Adapters](https://github.com/yourmemecommunity-sy/sentinelai/tree/main/sentinel-ai/services/ai-router/src/providers): `sentinel-ai/services/ai-router/src/providers`
- **AI Providers**

### Tenant State

- [Tenant PostgreSQL](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/db/tenantDb.ts): `sentinel-ai/apps/api/src/db/tenantDb.ts`
- [Audit and Events](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/events/eventSink.ts): `sentinel-ai/apps/api/src/events/eventSink.ts`
- [Policy Repository](https://github.com/yourmemecommunity-sy/sentinelai/blob/main/sentinel-ai/apps/api/src/repositories/policyRepository.ts): `sentinel-ai/apps/api/src/repositories/policyRepository.ts`

### Other components

- **File Uploads**

## Connections

- Applications → JavaScript SDK: calls
- Applications → Python SDK: calls
- JavaScript SDK → Gateway Routes: sends requests
- Python SDK → Gateway Routes: sends requests
- Dashboard → Dashboard BFF: calls
- Dashboard BFF → Gateway Routes: proxies requests
- Gateway Routes → Auth and RBAC: authorizes
- Gateway Routes → AI Orchestrator: invokes
- Gateway Routes → Secure Streaming: dispatches streams
- File Uploads → File Scan API: uploads
- Gateway Routes → File Scan API: dispatches scans
- File Scan API → Document API: sends file bytes
- Document API → Document Extraction: runs extraction
- Document Extraction → OCR Engine: extracts image text
- AI Orchestrator → Security Client: requests scans
- Security Client → Scan Pipeline: sends prompts
- Scan Pipeline → Threat Detectors: detects content
- Scan Pipeline → Policy and Risk: evaluates detections
- Scan Pipeline → Sanitization: sanitizes content
- AI Orchestrator → Policy Repository: loads policies
- AI Orchestrator → Token Vault: tokenizes content
- AI Orchestrator → Provider Router: routes sanitized prompts
- Provider Router → Provider Adapters: selects adapter
- Provider Adapters → AI Providers: sends prompts
- AI Orchestrator → Audit and Events: records outcomes
- Gateway Routes → Audit and Events: reads usage and events
- Audit and Events → Tenant PostgreSQL: persists events
- Policy Repository → Tenant PostgreSQL: reads policies
- Document Extraction → Security Client: returns extracted text
