Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AISE AI Agent — Code Editor & Coding Assistant
Ein browserbasierter Code-Editor mit integriertem AI-Chat und autonomem Coding-Agent, gebaut mit Streamlit und dem Model Context Protocol (MCP).
Installation & Setup
Voraussetzungen: Python 3.13+, pip
# 1. Repository klonen und ins Verzeichnis wechseln
cd AISE_AIAgent
# 2. Virtuelle Umgebung erstellen und aktivieren
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
# 3. Abhängigkeiten installieren
pip install -r requirements.txt
# 4. Umgebungsvariablen konfigurieren
copy .env.example .env
# .env öffnen und HOST, PORT, API_KEY, MODEL eintragen
.env Konfiguration:
HOST=silicon.fhgr.ch
PORT=7080
API_KEY=EMPTY
MODEL=qwen3.5-35b-a3b
Starten
# Streamlit App (Hauptinterface)
streamlit run frontend/app.py
# Coding Agent direkt im Terminal testen
python run_agent.py
Projektstruktur
AISE_AIAgent/
├── frontend/ # Streamlit UI
├── backend/
│ ├── agent/ # Coding Agent + MCP-Adapter
│ │ └── servers/ # MCP-Server (Tools für den Agent)
│ └── managers/ # Business-Logik (Chat, Dateien, Ausführung)
├── workspace/ # Arbeitsverzeichnis des Agents & Editors
└── run_agent.py # CLI-Test für den Coding Agent
Frontend
frontend/app.py — Einstiegspunkt
Initialisiert die Streamlit-App, setzt das Layout und routet zwischen Code-Editor und Chat-Ansicht basierend auf der Sidebar-Navigation.
frontend/state.py — Session State
Initialisiert alle Streamlit session_state-Variablen beim App-Start (offene Dateien, Chat-Verlauf, Agent-Status etc.). Verhindert KeyError beim ersten Laden.
frontend/sidebar.py — Sidebar & File Explorer
- Navigation: Radio-Button zum Wechseln zwischen "Code Editor" und "Chat with AI Assistant"
- File Tree: Interaktiver Dateibaum (via
streamlit-arborist) zeigt denworkspace/-Ordner - Datei-Aktionen: Datei öffnen, umbenennen, löschen
- Ordner-Aktionen: Ordner erstellen, Dateien in Ordner hinzufügen, Ordner löschen
frontend/editor.py — Code-Editor
- Ace Editor: Syntax-Highlighting für Python, JS, HTML, CSS, JSON, YAML, LaTeX u.a.
- Tabs: Mehrere Dateien gleichzeitig offen, Tab-Wechsel per Klick
- Datei-Operationen: Speichern, Schliessen, Umbenennen, Löschen direkt im Tab
- Code ausführen: Button "▶ Run Code" führt die aktive Datei aus, Output wird darunter angezeigt
- Debug with AI: Bei Fehlern erscheint ein Button der den Fehler + Code automatisch an den AI-Chat weiterleitet
frontend/chat.py — Chat & Agent Mode
Normaler Chat (render_normal_chat):
- Multi-Turn Konversation mit dem konfigurierten LLM
- Injiziert die aktuell offene Datei automatisch als Kontext in den System-Prompt
- Einstellungen: Modell wählen, Max Tokens, eigener System-Prompt
- "Clear Chat" mit Bestätigungsdialog
Agent Mode (render_agent_mode):
- Autonomer Coding-Agent im Step-by-Step Modus
- Benutzer gibt eine Aufgabe ein, der Agent schlägt Aktionen vor
- Jede Aktion muss einzeln genehmigt (Approve) oder abgelehnt (Reject) werden
- Agent Log: Zeigt alle ausgeführten Schritte mit Tool, Gedanken und Resultat
- Follow-up: Nach Abschluss einer Aufgabe können Korrekturen eingegeben werden
Backend — Managers
backend/managers/chat_manager.py — ChatManager
Verwaltet den Konversationsverlauf und kommuniziert mit dem LLM über eine OpenAI-kompatible REST-API. Sendet bei jedem Request den gesamten Verlauf als Kontext mit.
| Methode | Beschreibung |
|---|---|
send_message(user_message) |
Nachricht senden, Antwort zurückgeben, History updaten |
add_message(role, content) |
Nachricht manuell zur History hinzufügen |
clear_history() |
Gesamten Chat-Verlauf löschen |
get_history() |
Kopie des aktuellen Verlaufs zurückgeben |
backend/managers/file_manager.py — FileManager
Alle Datei- und Ordneroperationen innerhalb des workspace/-Verzeichnisses. Jede Operation validiert den Pfad gegen Path-Traversal-Angriffe.
| Methode | Beschreibung |
|---|---|
create_file(relative_path, name) |
Neue Datei im Workspace erstellen |
create_folder(relative_path, name) |
Neuen Ordner erstellen |
read_file(path) |
Dateiinhalt lesen |
save_file(path, content) |
Datei speichern/überschreiben |
rename_file(old_path, new_name) |
Datei umbenennen (Extension bleibt erhalten) |
delete_file(relative_path) |
Datei löschen |
delete_folder(relative_path) |
Ordner inkl. Inhalt löschen |
get_file_tree() |
Verschachteltes Dict des gesamten Workspace-Baums |
backend/managers/execution_engine.py — ExecutionEngine
Führt Dateien aus dem Editor in einem Subprocess aus. Unterstützt Python (.py) und LaTeX (.tex). Timeout: 30 Sekunden.
| Methode | Beschreibung |
|---|---|
run_code(active_file) |
Datei ausführen, gibt {stdout, stderr, rc} zurück |
backend/managers/system_prompter.py — SystemPrompter
Generiert den System-Prompt für den AI-Chat. Wenn eine Datei im Editor offen ist, wird ihr Inhalt (max. 4000 Zeichen) automatisch eingebettet.
| Methode | Beschreibung |
|---|---|
generate_prompt(file_context) |
System-Prompt mit optionalem Datei-Kontext bauen |
backend/managers/debug_logger.py — DebugLogger
Einfacher In-Memory-Logger für den Code-Editor (Ausführungsstatus, Fehler).
Backend — Coding Agent
backend/agent/coding_agent.py — CodingAgent
Autonomer Agent nach dem Plan → Act → Observe → Fix → Done Loop. Kommuniziert mit dem LLM und ruft MCP-Tools über den Adapter auf.
| Methode | Beschreibung |
|---|---|
start_task(task) |
Neue Aufgabe initialisieren, State zurücksetzen |
propose_next_action() |
LLM fragen was als nächstes zu tun ist (führt nichts aus) |
approve() |
Vorgeschlagene Aktion ausführen, nächsten Schritt vorschlagen |
reject(feedback) |
Aktion ablehnen, Feedback injizieren, Agent plant neu |
follow_up(question) |
Folgefrage nach abgeschlossener Aufgabe stellen |
Hilfsfunktionen:
dispatch_tool(tool_name, arguments)— Leitet Tool-Aufrufe an den MCP-Adapter weiterbuild_all_tool_description()— Generiert die Tool-Beschreibung für den System-Promptextract_json(text)/_repair_json_strings(text)— Parst und repariert LLM-JSON-Antwortentrim_messages(messages)— Kürzt alte History wenn Kontextfenster voll wird
backend/agent/mcp_server_adapter.py — MCPToolAdapter
Verbindet den Coding Agent mit den MCP-Servern. Liest die Konfiguration aus mcp_server_config.json, registriert alle verfügbaren Tools und startet bei jedem Tool-Aufruf eine frische stdio-Verbindung zum zuständigen Server.
| Methode | Beschreibung |
|---|---|
initialize_all_servers() |
Alle Server verbinden und Tools registrieren |
call_tool(tool_name, arguments) |
Tool auf dem zuständigen Server aufrufen |
get_all_tools() |
Liste aller registrierten Tools zurückgeben |
MCP-Server (Tools für den Agent)
Alle Server laufen als eigenständige Prozesse und kommunizieren über stdio.
backend/agent/servers/mcp_server_code_execution.py — CodeExecutionServer
| Tool | Beschreibung |
|---|---|
run_python_sandboxed(code) |
Python-Code sicher ausführen (statische Analyse + Subprocess mit isoliertem stdin) |
python_code_validation(code) |
Syntax und Sicherheit prüfen ohne auszuführen |
lint_code(code) |
Statische Analyse mit pyflakes (ungenutzte Imports, undefinierte Variablen) |
analyse_structure(code) |
Struktur-Zusammenfassung (Klassen, Funktionen, Imports) |
Sicherheitsmechanismen: Blockierte Imports (os, sys, subprocess etc.), blockierte Builtins (exec, eval, open etc.), verbotene Pfadsequenzen, Timeout nach 45 Sekunden.
backend/agent/servers/mcp_server_file_search.py — FileSearchServer
| Tool | Beschreibung |
|---|---|
list_files() |
Alle Dateien im Workspace auflisten |
get_file_tree(dir_path) |
Verzeichnisbaum anzeigen |
search_files(query) |
Dateien nach Name oder Inhalt durchsuchen |
read_file(path) |
Dateiinhalt lesen |
write_new_file(path, content) |
Neue Datei erstellen (keine Überschreibung bestehender Dateien) |
create_new_directory(path) |
Neues Verzeichnis erstellen |
Alle Zugriffe sind auf den workspace/-Ordner beschränkt (Path-Traversal-Schutz).
backend/agent/servers/mcp_server_web_search.py — WebSearchServer
| Tool | Beschreibung |
|---|---|
web_search(query, max_results) |
DuckDuckGo-Suche, gibt formatierte Ergebnisse zurück |
fetch_page(url) |
Webseite abrufen und Text extrahieren (max. 4000 Zeichen) |
SSRF-Schutz: Blockiert localhost, private IP-Ranges und nicht-HTTP/HTTPS-Schemata.
CLI-Test
run_agent.py ermöglicht den Coding Agent direkt im Terminal zu testen ohne die Streamlit-App zu starten:
python run_agent.py
# Aufgabe eingeben → Enter zum Genehmigen, Text zum Ablehnen, "stop" zum Abbrechen