Eine professionelle Drei-Panel-Workstation für lokal-first-Entwicklung mit KI-Orchestrierung. Gebaut auf DatenOwnership, modularer Architektur und autonomer Agenturfähigkeit.
Was ist XteVision Coder und für wen ist es gedacht?
XteVision Coder ist ein KI-gestützter Code-Editor und browserbasierter IDE für Entwickler, die Projekte mit integrierter KI-Unterstützung erstellen, bearbeiten und verwalten möchten. Es bietet eine professionelle Drei-Panel-Workstation-Layout mit Dateierkundung, Code-Bearbeitung, KI-Chat, Live-Vorschau und Terminal-Zugang—all laufend lokal mit Unterstützung verschiedener KI-Modelle.
High-Level-Design und Kommunikationsfluss
┌──────────────────────────────────────────────────────────┐
│ Browser (Client) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Frontend (Vanilla JS) │ │
│ │ ┌────────┐ ┌────────┐ ┌──────┐ ┌────────┐ │ │
│ │ │ Dateie │ │ Monaco │ │ KI │ │ Live │ │ │
│ │ │ explorer│ │ Editor │ │ Chat │ │Preview │ │ │
│ │ └────────┘ └────────┘ └──────┘ └────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└──────────────────────┬───────────────────────────────────┘
│ HTTP/REST API (localhost:5004)
┌──────────────────────┴───────────────────────────────────┐
│ Python-Backend-Server │
│ ┌──────────┐ ┌────────┐ ┌────────┐ ┌──────────┐ ┌──────────┐ │
│ │ DateI/O │ │ Shell │ │KI-Proxy│ │Workspace │ │Auth/Chat │ │
│ └──────────┘ └────────┘ └────────┘ └──────────┘ └──────────┘ │
└──────────────────────┬───────────────────────────────────┘
┌───────────┬───────────┬───────────┐
│ │ │ │
┌─────▼──────┐ ┌──▼────────┐ ┌▼──────────┐
│ Datei │ │PostgreSQL │ │ KI-Model │
│ System │ │users + │ │ Server │
│ │ │sessions │ │ │
└────────────┘ └───────────┘ └───────────┘XteVision Coder ist für lokal-first-Entwicklung ausgelegt:
Frontend, Backend und KI-Integration-Technologien
| Technologie | Vers | Zweck |
|---|---|---|
| JavaScript (ES6+) | ES2020+ | Anwendungslogik |
| HTML5 | - | Semantische Struktur |
| CSS3 | - | Styling & Layout |
| Monaco Editor | 0.52.2 | Code-Bearbeitung |
| Marked.js | - | Markdown-Parsing |
| Prism.js | - | Syntax-Highlighting |
| html2pdf.js | - | PDF-Generierung |
| FontAwesome | Kostenlos | Symbolbibliothek |
| Technologie | Vers | Zweck |
|---|---|---|
| Python | 3.8+ | HTTP-Server |
| http.server | stdlib | Basis HTTP-Server |
| socketserver | stdlib | TCP-Threadung |
| subprocess | stdlib | Shell-Ausführung |
| PostgreSQL | 12+ | Benutzerkonten, Auth-Sitzungen und Chat-Sitzungen |
| psycopg2 | 2.9+ | PostgreSQL-Konnektivität |
| argon2-cffi | 23+ | Passwort-Hashing |
| PyJWT | 2.8+ | Signierte Prodigy-Handoff-Token |
| Browser | Unterstützung | Anmerkungen |
|---|---|---|
| Chrome/Edge | ✅ Voll | Datei-System-Zugang-API |
| Firefox | ⚠️ Teilweise | Server-basiertes I/O |
| Safari | ⚠️ Teilweise | Eingeschränkter Datei-Zugang |
Bringen Sie XteVision Coder in Minuten zum Laufen
cd /path/to/mlx_coder
bash download-monaco.sh
mlx_lm.server --model <your-model-path> --port 5010
pip3 install -r requirements.txt
Standard-Konfiguration
python3 server.py
# Benutzerdefinierter Port
PORT=8080 python3 server.py
# Mit PostgreSQL-gestützter Authentifizierung
XTEVISION_DB_HOST=192.168.1.4 \
XTEVISION_DB_PORT=5432 \
XTEVISION_DB_NAME=codebase \
XTEVISION_DB_USER=postgres \
XTEVISION_DB_PASSWORD=your-db-password \
python3 server.py
http://localhost:5004
XteVision Coder nutzt jetzt cookie-basierte eigenständige Authentifizierung, die von PostgreSQL gestützt wird. Jeder Benutzer sieht nur seine eigenen gespeicherten Chat-Sitzungen und Workspace-Wiederherstellungsdaten.
codebase. Beim Start erstellt Coder das coder-Schema automatisch, wenn die konfigurierte Datenbank erreichbar ist.XTEVISION_AUTH_COOKIE_NAME: Sitzungs-Cookie-Name, Standard xtevision_sessionXTEVISION_AUTH_SESSION_DAYS: Cookie-Lebensdauer in Tagen, Standard 14XTEVISION_AUTH_ALLOW_REGISTRATION: Lokale Anmeldung aktivieren/deaktivierenXTEVISION_PRODIGY_SHARED_SECRET: Optionales gemeinsames Geheimnis für zukünftige vertrauenswürdige Prodigy-Start-HandoffUm OpenRouter als KI-Backend zu nutzen:
https://openrouter.ai/api/v1/chat/completionsqwen/qwen3.6-plus-previewWenn OpenRouter ausgewählt ist, hängt XteVision Coder diese Header an:
Authorization: Bearer <OPENROUTER_API_KEY>HTTP-Referer: <konfigurierte Seiten-URL>X-OpenRouter-Title: <konfigurierte Seiten-Titel>Verzeichnislayout und Modulorganisation
mlx_coder/ ├── index.html # Haupt-HTML-Einstiegspunkt ├── style.css # Anwendungsstile ├── script.js # Bootstrap und Modul-Lader ├── server.py # Python-HTTP-Backend ├── .mlx.json # Projektzustand ├── js/ │ ├── modules/ # Frontend-ES6-Module │ │ ├── state.js # Globales Zustandsmanagement │ │ ├── config.js # KI-Konfiguration und anbieterspezifische Einstellungen │ │ ├── utils.js # Hilfsfunktionen │ │ ├── filesystem.js # Datei-I/O und Workspace │ │ ├── editor.js # Monaco-Editor-Initialisierung │ │ ├── chat.js # KI-Chat und Streaming │ │ ├── agent.js # Agentur-Loop und Funktionsaufruf │ │ ├── auth.js # Login/Registrierung/Logout-Bootstrap │ │ ├── sessionPersistence.js # Chat-Sitzungs-Autosave und Wiederherstellung │ │ ├── tools.js # Werkzeugdefinitionen │ │ ├── diff.js # Diff-basierte Bearbeitung │ │ ├── preview.js # Live-Vorschau und PDF-Export │ │ └── ui.js # UI-Rendering und Interaktionen │ ├── marked.min.js # Markdown-Parser │ ├── prism.min.js # Syntax-Highlighter │ └── html2pdf.bundle.min.js # PDF-Generierung ├── fontawesome-free-web/ # FontAwesome-Symbole ├── requirements.txt # Python-Auth-/DB-Abhängigkeiten ├── projects/ # Benutzer-Projektdateien └── logs/app.log # Anwendungslog
export const state = {
editor: null, // Monaco-Editor-Instanz
files: {}, // Datei-Inhalts-Cache
openTabs: [], // Offene Editor-Tabs
activeTabPath: null, // Aktiver Tab-Pfad
tabDirty: {}, // Dirty-Zustand pro Tab-Pfad
messageHistory: [], // Aktive Chat-Nachrichten-Historie
chatSessionId: null, // Aktuelle gespeicherte Chat-Sitzungs-ID
chatSessions: [], // Verfügbare gespeicherte Chat-Sitzungen
workspaceFolders: new Map() // Offene Workspace-Ordner
};
Datei-Explorer, Code-Editor, KI-Chat, Vorschau und Terminal
Mehrere Workspace-Verzeichnisse, Drag-and-Drop-Operationen, Kontextmenüs, Path-Traversal-Schutz und drei Workspace-Modi (Native, Server, Fallback).
Monaco-Editor mit 20+ Sprachen, Multi-Tab-Bearbeitung, IntelliSense, MiniMap, Suchen/Ersetzen, Multi-Cursor und Code-Faltung.
Streaming- und Agentur-Modi, SSE-Antworten, 7 Werkzeuge, @-Erwähnungen, Code-Block-Aktionen (Kopieren, Smart-Merge, Einfügen, Erstellen, Ersetzen) und visuelle Diff-Vorschau.
Persistente pro-Benutzer-KI-Sitzungen mit Umbenennung, Suche, Lesezeichen, Autosave und Wiederherstellung der Chat-Historie plus Workspace/Editor-Zustand.
HTML-Rendering in sandboxed iframe, Markdown-zu-HTML-Konvertierung, YAML-Formatierung und PDF-Export über html2pdf.
LOG- und SHELL-Tabs, 100er-Befehls-Historie, 40+ Befehls-Allowlist, blockierte Muster Verteidigung-in-Tiefe.
Eigenständiger Browser-Login, sichere Sitzungs-Cookies, Argon2-gehashte Passwörter und zukünftige signierte Prodigy-Start-Unterstützung.
| Eigenschaft | Wert |
|---|---|
| Max-Iterationen | 15 Schritte per Aufgabe |
| Timeout | 1 Stunde maximal |
| Wiederholungslogik | 3 Wiederholungen mit exponentiellem Backoff |
| Verfügbare Werkzeuge | read_file, write_file, edit_file, list_files, search_files, run_shell, create_directory |
Kernmodule und Event-System
Zentralisierter Zustand mit lazy DOM-Caching über Proxy und Typo-Erkennung.
KI-Server-Presets, anbieterspezifische Anfrage-Header, OpenRouter-Header-Injektion, localStorage-Persistenz und Verbindungsgesundheitsprüfung.
Gemeinsame Helfer: escapeHtml, logToTerminal, safeFetchJson, cleanContent.
Datei-I/O (native + server), Workspace-Management, Drag-and-Drop, IndexedDB, KI-Helfer.
Monaco-Initialisierung, Multi-Tab-Management, Speicheroperationen, Dirty-Zustands-Tracking.
Nachrichtenbehandlung, anbieterspezifische Anfrage-Header, SSE-Streaming, Agentur-Koordination, Code-Block-Aktionen, @-Erwähnungen und sitzungsbezogene NachricHTen-Updates.
Mehrschritt-Ausführung, anbieterspezifische Anfrage-Header, Funktionsaufruf, Werkzeug-Parsing, Wiederholungslogik, Copilot-Protokoll.
Login/Registrierung/Logout-Fluss, Start-Gating und Auth-HUD-Updates für die geschützte IDE-Shell.
Autosave von Chat-Sitzungen, Wiederherstellung der neuesten Sitzung und Rehydrierung von Workspace-Wurzel, Tabs, Dirty-Puffern und Lesezeichen.
Werkzeug-Schemas, Ausführungslogik, Parameter-Validierung für 7 Werkzeuge.
// Benutzerdefiniertes Event für Einstellungsänderungen
window.dispatchEvent(new CustomEvent('xtevision-settings-changed'));
// Für Events hören
window.addEventListener('xtevision-settings-changed', () => {
// On Einstellungsänderung reagieren
});
// Globale Error-Boundaries für async init
try {
await checkServerAvailability();
await connectToServerWorkspace();
} catch (error) {
logToTerminal(`Init-Fehler: ${error.message}`, 'error');
}
Python-Server-Konfiguration und Anfragebehandlung
PORT = int(os.environ.get('PORT', 5004))
PROJECTS_DIR = os.path.join(os.getcwd(), 'projects')
AI_PROXY_TIMEOUT_SEC = 3660
AUTH_COOKIE_NAME = os.environ.get('XTEVISION_AUTH_COOKIE_NAME', 'xtevision_session')
AUTH_DB_HOST = os.environ.get('XTEVISION_DB_HOST', '192.168.1.4')
AUTH_DB_NAME = os.environ.get('XTEVISION_DB_NAME', 'codebase')
PRODIGY_JWT_SECRET = os.environ.get('XTEVISION_PRODIGY_SHARED_SECRET', '')
_current_dir_lock = threading.Lock()
_current_dir = os.getcwd()
def get_current_dir():
with _current_dir_lock:
return _current_dir
Das Backend initialisiert ein coder-PostgreSQL-Schema mit:
users für lokale und zukünftige Prodigy-verbundene Identitätenauth_sessions für sichere Sitzungs-Cookie-Login-Zustandauth_launch_tokens für einmalige signierte Start-Handoffschat_sessions für gespeicherte Chats, Titel, Lesezeichen und UI-Wiederherstellung-Payloadsclass CustomHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self): # GET behandeln
def do_POST(self): # POST behandeln
def do_OPTIONS(self): # CORS-Preflight
def end_headers(self): # CORS-Header hinzufügen
Das Backend stellt zwei KI-bezogene Proxy-Endpunkte bereit:
/api/proxy für leichte JSON-Fetches wie Modellentdeckung/api/ai-proxy für vollständige Anfrage-Weiterleitung zu OpenAI-kompatible Chat-EndpunkteFür OpenRouter weiterlegen beide Endpunkte Anbieter-Header und erlauben openrouter.ai in der Proxy-Allowlist, so dass authentifizierte Modellentdeckung und Chat-Antworten durch die Backend-Fallback-Pfade funktionieren.
Unterstützte Server, Protokolle und Funktionsaufruf
| Server | Standard-URL | Port | Anmerkungen |
|---|---|---|---|
| MLX | http://localhost | 5010 | Apple-Silicon-optimiert |
| Ollama | http://localhost | 11434 | Beliebte lokale Modelle |
| LMStudio | http://localhost | 1234 | GUI-basierter Modelserver |
| GitHub Copilot | http://localhost | 5015 | Über Proxy |
| OpenRouter | https://openrouter.ai | 443 | Cloud-API-Gateway |
| Benutzerdefiniert | Benutzerdefiniert | Beliebig | OpenAI-kompatible API |
Endpunkt: /v1/chat/completions
{
"model": "your-model-name",
"messages": [
{"role": "system", "content": "Du bist ein Entwicklungsassistent..."},
{"role": "user", "content": "Schreibe eine Funktion zu..."}
],
"stream": true,
"tools": [{"type":"function","function":{"name":"read_file","parameters":{"file_path":"string"}}}]
}
Server-Sent Events (SSE):
data: {"choices": [{"delta": {"content": "Hallo"}}]}
data: {"choices": [{"delta": {"content": " Welt"}}]}
data: [DONE]
Werkzeug-Parsing (3 Formate):
call:read_file{"file_path": "test.js"}{"name": "read_file", "arguments": {...}}
Bei Verwendung von GitHub Copilot als Backend nutzt der Agent ein JSON-only-Antwort-Format für strukturierte Werkzeugaufrufe und folgt dem Planer-Ausführung-Muster.
Fünf-Schichten-Sicherheitsimplementierung
40+ genehmigte Befehle: ls, cat, echo, pwd, mkdir, touch, cp, mv, git, npm, python, node, curl, etc.
Blockierte Muster (Verteidigung-in-Tiefe):
rm -rf / und Variantensudo-Befehlechmod 777curl ... | shNutzt os.path.commonpath() + os.path.realpath() zur Verhinderung von symlink-basierten Path-Traversal-Angriffen. Alle Dateioperationen werden validiert, um im Workspace-Wurzelverzeichnis zu bleiben.
KI-Proxy auf zugelassene Domänen beschränkt:
localhost, 127.0.0.1, 0.0.0.0192.168.10.3 (lokales KI-Server des Benutzers)openrouter.ai (Cloud-Anbieter-Endpunkt)Verhinderung der Nutzung des Proxy zum Zugriff auf interne Netzwerkdienste.
Wildcard-CORS durch localhost-only-Ursätze ersetzt:
http://localhost:5004http://127.0.0.1:5004http://localhost:8080Verhinderung von böswilligen Websites, Anfragen an den lokalen Server zu machen.
XteVision Coder schützt jetzt den Workspace mit eigenständiger Browser-Authentifizierung:
Vollständige REST-API-Endpunkte
Anfrage:
{
"path": "projects/myapp/src/index.js",
"content": "console.log('Hallo');"
}
Antwort:
{"success": true, "message": "Datei erfolgreich geschrieben"}
Anfrage:
{"path": "projects/myapp/package.json"}
Antwort:
{"content": "{...}", "success": true}
Anfrage:
{"path": "projects/myapp/src/components"}
Antwort:
{"success": true, "message": "Ordner erstellt"}
Antwort:
{"folders": ["src", "public"], "files": ["index.html", "package.json"]}
Anfrage:
{"path": "projects/myapp/old-file.js"}
Antwort:
{"success": true}
Anfrage:
{"old_path": "projects/myapp/old-name.js", "new_path": "projects/myapp/new-name.js"}
Antwort:
{"success": true}
Anfrage:
{"command": "ls -la"}
Antwort:
{"output": "insgesamt 48\ndrwxr-xr-x ...", "success": true}
Weiterleitung von Anfragen an den konfigurierten KI-Server für Modellentdeckung und leichte Operationen.
Weiterleitung vollständiger Chat-Antwort-Anfragen an den configurierten KI-Backend mit anbieterspezifischen Headers für OpenRouter-Integration.
Gibt den authifizierten Benutzer und Backend-Verfügbarkeitszustand für den Login-Bootstrap zurück.
Erstellt einen neuen eigenständigen Coder-Benutzer mit Benutzername, optionaler E-Mail und Passwort.
Authentifiziert einen lokalen Benutzer und gibt einen Sitzungs-Cookie zurück.
Widerruft die aktuelle Auth-Sitzung und räumt den Cookie auf.
Listet die Chat-Sitzungen des aktuellen Benutzers, geordnet nach Lesezeichen-Zustand und letzter Aktivität.
Gibt die neueste aktive Chat-Sitzung für Login-Wiederherstellung zurück.
Erstellt eine neue Chat-Sitzung mit Titel, Nachrichten, Lesezeichen-Zustand und serialisiertem UI-Zustand.
Aktualisiert eine bestehende Sitzung mit neuen Nachrichten, umbenanntem Titel, Lesezeichen-Flag, Workspace-Wurzel, offnen Tabs und nichtgespeicherten Puffer-Inhalten.
Löscht die ausgewählte Chat-Sitzung für den authifizierten Benutzer.
Anfrage:
{
"path": "projects/myapp/src/index.js",
"edits": [{
"search": "console.log('old')",
"replace": "console.log('new')"
}]
}
Antwort:
{"success": true, "message": "Datei aktualisiert"}
Umgebungsvariablen und Einstellungen
| Variab | Standard | Beschreibung |
|---|---|---|
PORT | 5004 | Backend-Server-Port |
XTEVISION_AUTH_COOKIE_NAME | xtevision_session | Sitzungs-Cookie-Name |
XTEVISION_AUTH_SESSION_DAYS | 14 | Cookie/Sitzungs-Lebensdauer in Tagen |
XTEVISION_AUTH_SECURE_COOKIE | false | Markiert Cookies sicher hinter HTTPS |
XTEVISION_AUTH_ALLOW_REGISTRATION | true | Lokale Anmeldung aktivieren/deaktivieren |
XTEVISION_DB_HOST | 192.168.1.4 | PostgreSQL-Host |
XTEVISION_DB_PORT | 5432 | PostgreSQL-Port |
XTEVISION_DB_NAME | codebase | PostgreSQL-Datenbankname |
XTEVISION_DB_USER | postgres | PostgreSQL-Benutzername |
XTEVISION_DB_PASSWORD | leer | PostgreSQL-Passwort |
XTEVISION_PRODIGY_SHARED_SECRET | leer | Optionales signiertes Prodigy-Handoff-Geheimnis |
| Einstellung | Typ | Beschreibung |
|---|---|---|
xtevision_ai_server | string | Ausgewählter KI-Server-Preset |
xtevision_ai_url | string | KI-Server-API-URL |
xtevision_ai_model | string | Modell-Name/ID |
openrouter_api_key | string | OpenRouter-API-Key |
openrouter_site_url | string | OpenRouter HTTP-Referer-Header-Wert |
openrouter_site_title | string | OpenRouter X-OpenRouter-Title-Header-Wert |
xtevision_last_file | string | Letzt geöffnete Datei-Pfad |
Die folgenden Daten sind nicht mehr nur in localStorage gespeichert:
| Presets | URL | Port |
|---|---|---|
| MLX | http://localhost | 5010 |
| Ollama | http://localhost | 11434 |
| LMStudio | http://localhost | 1234 |
| OpenRouter | https://openrouter.ai | 443 |
| Copilot | http://localhost | 5015 |
Modul-Erstellung und Debugging
// 1. js/modules/mymodule.js erstellen
import { state, elements } from './state.js';
import { logToTerminal } from './utils.js';
export function initMyModule() {
logToTerminal('MyModule initialisiert', 'info');
}
// 2. In script.js importieren
import { initMyModule } from './js/modules/mymodule.js';
// 3. Während Initialisierung aufrufen
initMyModule();
localStorage.setItem('debug', 'true')// KI-Verbindung von der Console testen
const response = await fetch('http://localhost:5004/api/proxy', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'test-model',
messages: [{role: 'user', content: 'Hallo'}]
})
});
console.log(await response.json());
Alle JS-Module verwenden den ?v=APP_VERSION Query-Parameter für Cache-Busting. Aktualisieren Sie APP_VERSION in config.js nach dem Machen von Änderungen.
Gewöhnliche Probleme und Lösungen
bash download-monaco.sh ausführen oder Netzwerk für CDN-Zugang prüfencodebase-Datenbank existiert und die XTEVISION_DB_*-Variablen mit der Server-Konfiguration übereinstimmenALLOWED_SHELL_COMMANDS in server.py hinzufügen, falls nötighttp://localhost:5004 (kein HTTPS). shouldForceBackendProxy()-Erkennung verwendenAI_PROXY_TIMEOUT_SEC erhöhen