Opus 4.5+ and Sonnet 4.6+ support a new "effort" knob that controls how
much budget the model spends on thinking and tool calls. Plumb it through
end to end so each agent can pick its own level.
Storage & shape:
- New TEXT column agents.effort (default '') added via TryAddColumn.
- AgentRecord.Effort + INSERT/UPDATE in DatabaseService.Agents.cs.
- ChatContext.Effort + SubAgentContext.Effort so the value travels with the
request alongside model and tool settings.
Agent editor:
- Effort dropdown above git-commit behavior in the agent form (low/medium/
high/xhigh/max plus empty = "use default"). Always visible; on OpenAI
providers the value is sent but silently ignored.
- agent-page.js load/save and AgentEndpoint create/update wired up.
Anthropic API path:
- StreamChat and RunNonStreamingToolLoop add output_config: { effort } when
effort is set and not "high" – empty/null/"high" means "omit and let the
API pick its default".
- Sub-agents (preparer/review/finalizer) get the parameter through
RunAgentChat so each step uses its own agent's effort.
Anthropic CLI path:
- ClaudeCliService.ChatStreamingAsync takes an effort parameter and exports
CLAUDE_CODE_EFFORT_LEVEL on the spawned process. Env-var beats the
--effort flag because it also covers "max" and "ultracode".
- StreamChatViaCli, ChatNonStreamingViaCli, RunSubAgentViaCli, and the
ChatEndpoint anthropic branches all hand the value through.
ARCHITECTURE.md / ARCHITECTURE_QUICK.md updated with the new field.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
814 lines
37 KiB
HTML
814 lines
37 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>// gott</title>
|
||
<script src="js/title.js"></script>
|
||
<link rel="stylesheet" href="lib/font-awesome/css/font-awesome.min.css">
|
||
<link rel="stylesheet" href="css/fonts.css">
|
||
<link rel="stylesheet" href="css/theme.css">
|
||
<link rel="stylesheet" href="css/base.css">
|
||
<link rel="stylesheet" href="css/main.css">
|
||
|
||
<link rel="stylesheet" href="css/login.css">
|
||
<link rel="stylesheet" href="css/form.css">
|
||
<link rel="stylesheet" href="css/dashboard.css">
|
||
<link rel="stylesheet" href="css/chat.css">
|
||
<link rel="stylesheet" href="css/placeholder.css">
|
||
<link rel="stylesheet" href="css/codemirror.min.css">
|
||
<link rel="stylesheet" href="css/easymde.min.css">
|
||
<link rel="stylesheet" href="css/file-explorer.css">
|
||
<link rel="stylesheet" href="css/katex.min.css">
|
||
<link rel="stylesheet" href="css/markdown.css">
|
||
<link rel="stylesheet" href="css/tooltip.css">
|
||
<link rel="stylesheet" href="css/mobile.css">
|
||
</head>
|
||
<body>
|
||
|
||
<div id="claudeStatusBar" class="status-bar" hidden>
|
||
<span class="status-indicator"></span>
|
||
<span class="status-text"></span>
|
||
<button class="status-close icon-btn"><i class="fa fa-times"></i></button>
|
||
</div>
|
||
<div id="app"></div>
|
||
|
||
<!-- Templates -->
|
||
|
||
<template id="tpl-login">
|
||
<div class="page login-page">
|
||
<div class="login-box">
|
||
<h1 class="login-title">// gott</h1>
|
||
<div class="login-form">
|
||
<input type="text" id="loginUsername" placeholder="Benutzername" autocomplete="username" autofocus>
|
||
<input type="password" id="loginPassword" placeholder="Passwort" autocomplete="current-password">
|
||
<div class="login-error" id="loginError" hidden></div>
|
||
<button id="loginBtn">Anmelden</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-dashboard">
|
||
<div class="page dashboard">
|
||
<header>
|
||
<button class="back-btn icon-btn" disabled></button>
|
||
<h1 class="dashboard-title">// gott</h1>
|
||
<div class="header-menu">
|
||
<button class="header-menu-trigger icon-btn" id="dashboardMenuBtn"><i class="fa fa-ellipsis-v"></i></button>
|
||
<div class="header-menu-dropdown" id="dashboardMenuDropdown" hidden>
|
||
<div class="header-menu-label">Benutzer</div>
|
||
<button class="header-menu-item" id="dashboardProfileLink"><i class="fa fa-user"></i> Mein Profil</button>
|
||
<button class="header-menu-item" id="dashboardSettingsLink"><i class="fa fa-cog"></i> Einstellungen</button>
|
||
<div class="header-menu-separator" hidden admin-only></div>
|
||
<div class="header-menu-label" hidden admin-only>Administrator</div>
|
||
<button class="header-menu-item" id="dashboardServerSettingsLink" hidden admin-only><i class="fa fa-server"></i> Servereinstellungen</button>
|
||
<button class="header-menu-item" id="dashboardAdminLink" hidden admin-only><i class="fa fa-users"></i> Benutzerverwaltung</button>
|
||
<button class="header-menu-item" id="dashboardDbExplorerLink" hidden admin-only><i class="fa fa-database"></i> Datenbank</button>
|
||
<button class="header-menu-item" id="dashboardEmbeddingDebugLink" hidden admin-only><i class="fa fa-search"></i> Embedding-Debug</button>
|
||
<button class="header-menu-item" id="dashboardApiKeysLink" hidden admin-only><i class="fa fa-key"></i> API-Keys</button>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<div class="page-content">
|
||
<section>
|
||
<div class="section-header">
|
||
<h2>Sessions</h2>
|
||
<button id="newSessionBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neue Session</button>
|
||
</div>
|
||
<div class="card-grid" id="sessionCards"></div>
|
||
</section>
|
||
<section>
|
||
<div class="section-header">
|
||
<h2>Agents</h2>
|
||
<button id="newAgentBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neuer Agent</button>
|
||
</div>
|
||
<div class="card-grid" id="agentCards"></div>
|
||
</section>
|
||
<section>
|
||
<div class="section-header">
|
||
<h2>Cronjobs</h2>
|
||
<button id="newCronjobBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neuer Cronjob</button>
|
||
</div>
|
||
<div class="card-grid" id="cronjobCards"></div>
|
||
</section>
|
||
<section>
|
||
<div class="section-header">
|
||
<h2>Telegram Bots</h2>
|
||
<button id="newTelegramBotBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neuer Bot</button>
|
||
</div>
|
||
<div class="card-grid" id="telegramBotCards"></div>
|
||
</section>
|
||
<section id="sharedLinksSection" hidden>
|
||
<div class="section-header">
|
||
<h2>Geteilte Links</h2>
|
||
</div>
|
||
<div class="card-grid" id="sharedLinksCards"></div>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-session">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="sessionPageTitle">Neue Session</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div class="avatar-preview" id="sessionImagePreview">?</div>
|
||
<label>Name</label>
|
||
<input type="text" id="sessionName" placeholder="Name der Session">
|
||
<label>Agent</label>
|
||
<div id="agentSelectCard" class="agent-select-card">
|
||
<div class="agent-select-empty"><i class="fa fa-user-circle-o"></i> Kein Agent ausgewählt</div>
|
||
</div>
|
||
<input type="hidden" id="agentSelect" value="">
|
||
<div class="more">
|
||
<a>Weitere Einstellungen</a>
|
||
<div hidden>
|
||
<label>Beschreibung</label>
|
||
<input id="sessionDescription" placeholder="Kurze Beschreibung (optional)">
|
||
<label>Workspace</label>
|
||
<div class="input-with-btn">
|
||
<input type="text" id="sessionWorkspace" placeholder="Absoluter Pfad zum Arbeitsverzeichnis (optional)">
|
||
<button type="button" id="sessionWorkspaceBrowse" class="icon-btn"><i class="fa fa-folder"></i></button>
|
||
</div>
|
||
<label>Kontext</label>
|
||
<textarea id="sessionContext" rows="4" placeholder="Zusätzlicher Kontext für den System-Prompt (optional)"></textarea>
|
||
<label>Vorbereiter-Agent <small>(optional)</small></label>
|
||
<div id="preparerAgentSelectCard" class="agent-select-card">
|
||
<div class="agent-select-empty"><i class="fa fa-filter"></i> Kein Vorbereiter-Agent</div>
|
||
</div>
|
||
<input type="hidden" id="preparerAgentSelect" value="">
|
||
<label>Review-Agent <small>(optional)</small></label>
|
||
<div id="reviewAgentSelectCard" class="agent-select-card">
|
||
<div class="agent-select-empty"><i class="fa fa-check-circle-o"></i> Kein Review-Agent</div>
|
||
</div>
|
||
<input type="hidden" id="reviewAgentSelect" value="">
|
||
<div class="review-iterations-row" id="reviewIterationsRow" hidden>
|
||
<label>Max. Review-Runden</label>
|
||
<input type="number" id="maxReviewIterations" min="1" max="10" value="3">
|
||
</div>
|
||
<label>Finalizer-Agent <small>(optional)</small></label>
|
||
<div id="finalizerAgentSelectCard" class="agent-select-card">
|
||
<div class="agent-select-empty"><i class="fa fa-flag-checkered"></i> Kein Finalizer-Agent</div>
|
||
</div>
|
||
<input type="hidden" id="finalizerAgentSelect" value="">
|
||
<label>Benutzerdefinierte Befehle</label>
|
||
<div class="custom-commands" id="customCommandsList"></div>
|
||
<button type="button" id="addCommandBtn" class="add-cmd-btn">+ Befehl hinzufügen</button>
|
||
<label>Unity MCP URL <small>(optional)</small></label>
|
||
<input type="text" id="sessionUnityMcpUrl" placeholder="z.B. http://localhost:8080" autocomplete="off">
|
||
<label>Unity MCP Token <small>(optional)</small></label>
|
||
<input type="password" id="sessionUnityMcpToken" placeholder="MCP-Server Token" autocomplete="off">
|
||
<label>Telegram Bot</label>
|
||
<div id="telegramBotSelectCard" class="agent-select-card">
|
||
<div class="agent-select-empty"><i class="fa fa-paper-plane"></i> Kein Bot zugewiesen</div>
|
||
</div>
|
||
<input type="hidden" id="telegramBotSelect" value="">
|
||
<label>Chat-ID</label>
|
||
<div class="input-with-btn">
|
||
<input type="text" id="sessionTelegramChatId" placeholder="Wird automatisch bei /start gesetzt" autocomplete="off" readonly>
|
||
<button type="button" id="sessionTelegramUnlink" class="icon-btn danger-btn" title="Verknüpfung lösen"><i class="fa fa-chain-broken"></i></button>
|
||
</div>
|
||
<small class="form-hint">Wird automatisch gesetzt wenn jemand /start an den Bot sendet.</small>
|
||
</div>
|
||
</div>
|
||
<div class="form-actions">
|
||
<button id="sessionSaveBtn">Speichern</button>
|
||
<button id="sessionCancelBtn">Abbrechen</button>
|
||
<button id="sessionDeleteBtn" class="danger-btn" hidden>Löschen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-agent">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="agentPageTitle">Neuer Agent</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div class="avatar-preview" id="avatarPreview">?</div>
|
||
<label>Name</label>
|
||
<input type="text" id="agentName" placeholder="Name des Agents">
|
||
<label>Model</label>
|
||
<select id="agentModel">
|
||
<option value="sonnet-4-5">sonnet-4-5</option>
|
||
<option value="sonnet-4-6">sonnet-4-6</option>
|
||
<option value="opus-4-5">opus-4-5</option>
|
||
<option value="opus-4-6">opus-4-6</option>
|
||
<option value="opus-4-7">opus-4-7</option>
|
||
<option value="opus-4-8" selected>opus-4-8</option>
|
||
<option value="haiku-4-5">haiku-4-5</option>
|
||
<optgroup label="OpenAI" id="openaiOptgroup">
|
||
<option value="" disabled>Wird geladen...</option>
|
||
</optgroup>
|
||
<optgroup label="Google Gemini" id="geminiOptgroup">
|
||
<option value="" disabled>Wird geladen...</option>
|
||
</optgroup>
|
||
<optgroup label="Pollinations" id="pollinationsOptgroup">
|
||
<option value="" disabled>Wird geladen...</option>
|
||
</optgroup>
|
||
<optgroup label="Nvidia" id="nvidiaOptgroup">
|
||
<option value="" disabled>Wird geladen...</option>
|
||
</optgroup>
|
||
<optgroup label="MiniMax" id="minimaxOptgroup">
|
||
<option value="" disabled>Wird geladen...</option>
|
||
</optgroup>
|
||
</select>
|
||
<div class="more">
|
||
<a>Weitere Einstellungen</a>
|
||
<div hidden>
|
||
<label>Beschreibung</label>
|
||
<input type="text" id="agentDescription" placeholder="Kurze Beschreibung (optional)">
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentAllowUserChoice" checked>
|
||
Rückfragen erlauben <span class="checkbox-hint">(ask_user_choice Tool)</span>
|
||
</label>
|
||
<label>Anweisungen <small>(optional)</small></label>
|
||
<textarea id="agentTaskInstruction" rows="4" placeholder="Spezifische Anweisungen für diesen Agent (Markdown, optional)"></textarea>
|
||
<label>Git-Commit-Verhalten</label>
|
||
<select id="agentAutoCommit">
|
||
<option value="">Nicht erwähnen</option>
|
||
<option value="mention">Anmerken (nur auf Anweisung)</option>
|
||
<option value="enforce">Erzwingen (nach jeder Änderung)</option>
|
||
<option value="forbid">Verbieten (strikt verboten)</option>
|
||
</select>
|
||
<label>Reasoning-Effort <span class="checkbox-hint">(nur Claude: Opus 4.5+, Sonnet 4.6+)</span></label>
|
||
<select id="agentEffort">
|
||
<option value="">Standard (high)</option>
|
||
<option value="low">Low – schnell, oberflächlich</option>
|
||
<option value="medium">Medium – ausgewogen</option>
|
||
<option value="high">High – gründlich (Default)</option>
|
||
<option value="xhigh">Extra – noch tiefer (nur Opus 4.7+)</option>
|
||
<option value="max">Max – maximal viele Tokens (nur Opus 4.6+/Sonnet 4.6)</option>
|
||
</select>
|
||
<label>Ego</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseSoul">
|
||
Hat eine Seele <span class="checkbox-hint">(SOUL.md im System-Prompt)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseIdentity">
|
||
Hat eine Identität <span class="checkbox-hint">(IDENTITY.md im System-Prompt)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseUserInfo">
|
||
Kennt sein Gegenüber <span class="checkbox-hint">(Benutzer-Persona im System-Prompt)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseMemory">
|
||
Zugriff auf Erinnerungen <span class="checkbox-hint">(Memory-Tools verfügbar)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseAutoContext" checked>
|
||
Automatischer Kontext <span class="checkbox-hint">(Relevante Erinnerungen werden automatisch abgerufen)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseGitHubSearch">
|
||
GitHub Code Search <span class="checkbox-hint">(Öffentlichen Code auf GitHub durchsuchen)</span>
|
||
</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentUseSerperSearch">
|
||
Serper Web Search <span class="checkbox-hint">(Google-Suche via Serper.dev API)</span>
|
||
</label>
|
||
<label>Web-Suche</label>
|
||
<select id="agentWebSearchVersion">
|
||
<option value="">Deaktiviert</option>
|
||
<option value="web_search_20250305" selected>Aktiviert - Version 2025</option>
|
||
<option value="web_search_20260209">Aktiviert - Version 2026</option>
|
||
</select>
|
||
<label>Skills</label>
|
||
<div id="agentSkillsSection" hidden>
|
||
<div class="skill-list" id="agentSkillList"></div>
|
||
</div>
|
||
<label>Benutzerdefinierte Befehle</label>
|
||
<div class="custom-commands" id="agentCommandsList"></div>
|
||
<button type="button" id="agentAddCommandBtn" class="add-cmd-btn">+ Befehl hinzufügen</button>
|
||
<label>Sichtbarkeit</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="agentIsPublic">
|
||
Öffentlich <span class="checkbox-hint">(andere User können diesen Agent in ihren Sessions verwenden)</span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<div class="form-actions">
|
||
<button id="agentSaveBtn">Speichern</button>
|
||
<button id="agentCancelBtn">Abbrechen</button>
|
||
<button id="agentDeleteBtn" class="danger-btn" hidden>Löschen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-cronjob">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="cronjobPageTitle">Neuer Cronjob</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form-group form-check-group">
|
||
<label>
|
||
<input type="checkbox" id="cronjobEnabled" checked>
|
||
Aktiv
|
||
</label>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="cronjobName">Name</label>
|
||
<input type="text" id="cronjobName" placeholder="z.B. Täglicher Report">
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Session</label>
|
||
<div id="cronjobSessionCard" class="session-select-card">
|
||
<div class="session-select-empty"><i class="fa fa-comment-o"></i> Keine Session ausgewählt</div>
|
||
</div>
|
||
<input type="hidden" id="cronjobSession" value="">
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="cronjobCron">Cron-Expression</label>
|
||
<input type="text" id="cronjobCron" placeholder="z.B. 0 9 * * *">
|
||
<small id="cronjobCronPreview" class="form-hint"></small>
|
||
</div>
|
||
<div class="form-group">
|
||
<label for="cronjobPrompt">Prompt</label>
|
||
<textarea id="cronjobPrompt" rows="6" placeholder="Die Nachricht, die an den Agent gesendet wird..."></textarea>
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Benachrichtigungs-Session <small>(optional)</small></label>
|
||
<div id="cronjobNotifySessionCard" class="session-select-card">
|
||
<div class="session-select-empty"><i class="fa fa-bell-o"></i> Keine (Antwort bleibt in Arbeits-Session)</div>
|
||
</div>
|
||
<input type="hidden" id="cronjobNotifySession" value="">
|
||
<small class="form-hint">Wenn gesetzt, wird eine Zusammenfassung in diese Session geschrieben (z.B. eine mit Telegram).</small>
|
||
</div>
|
||
<div class="form-group">
|
||
<div id="cronjobStatusBox" class="form-status-box" hidden></div>
|
||
</div>
|
||
<div class="form-actions">
|
||
<button id="cronjobSaveBtn">Speichern</button>
|
||
<button id="cronjobRunBtn" class="positive-btn" hidden><i class="fa fa-play"></i> Jetzt ausführen</button>
|
||
<button id="cronjobDeleteBtn" class="danger-btn" hidden>Löschen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-telegram-bot">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="telegramBotPageTitle">Neuer Telegram Bot</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<label>Name</label>
|
||
<input type="text" id="tgBotName" placeholder="z.B. Mein Hauptbot">
|
||
<label>Bot-Token</label>
|
||
<input type="text" id="tgBotToken" placeholder="123456:ABC-DEF..." autocomplete="off">
|
||
<small class="form-hint">Erstelle einen Bot via <a href="https://t.me/BotFather" target="_blank">@BotFather</a></small>
|
||
<label>Webhook-Secret</label>
|
||
<div class="input-with-btn">
|
||
<input type="text" id="tgBotSecret" readonly>
|
||
<button type="button" id="tgBotCopySecret" class="icon-btn" title="Kopieren"><i class="fa fa-clipboard"></i></button>
|
||
</div>
|
||
<label><i class="fa fa-plug"></i> <b>Webhook</b></label>
|
||
<div id="tgBotWebhookStatus" class="form-status-box"></div>
|
||
<div class="form-actions-inline">
|
||
<button type="button" id="tgBotWebhookRegister" class="positive-btn"><i class="fa fa-plug"></i> Registrieren</button>
|
||
<button type="button" id="tgBotWebhookInfo"><i class="fa fa-info-circle"></i> Status prüfen</button>
|
||
<button type="button" id="tgBotWebhookDelete" class="danger-btn"><i class="fa fa-unlink"></i> Entfernen</button>
|
||
</div>
|
||
<label>Sichtbarkeit</label>
|
||
<label class="checkbox-label">
|
||
<input type="checkbox" id="tgBotPublic">
|
||
Öffentlich <span class="checkbox-hint">(andere User können diesen Bot in ihren Sessions verwenden)</span>
|
||
</label>
|
||
<div class="form-actions">
|
||
<button id="tgBotSaveBtn">Speichern</button>
|
||
<button id="tgBotCancelBtn">Abbrechen</button>
|
||
<button id="tgBotDeleteBtn" class="danger-btn" hidden>Löschen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-chat">
|
||
<div class="page chat-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" id="chatBackBtn"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="sessionTitle">-</h1>
|
||
<div class="header-menu">
|
||
<button class="header-menu-trigger icon-btn" id="chatMenuBtn"><i class="fa fa-ellipsis-v"></i></button>
|
||
<div class="header-menu-dropdown" id="chatMenuDropdown" hidden>
|
||
<button class="header-menu-item" id="remoteBtn"><i class="fa fa-desktop"></i> Remote-Verbindungen</button>
|
||
<button class="header-menu-item" id="systemPromptBtn">System-Prompt anzeigen</button>
|
||
<button class="header-menu-item" id="payloadPreviewBtn">Payload anzeigen</button>
|
||
<button class="header-menu-item" id="archiveBtn">Archivieren</button>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<div class="page-content">
|
||
<div id="chatUsageBadge" class="chat-usage-overlay" hidden></div>
|
||
<div id="chat"></div>
|
||
<div class="meta-bar" id="meta"></div>
|
||
<div id="filePreview" class="file-preview" hidden></div>
|
||
<div id="refPreview" class="ref-preview" hidden></div>
|
||
<div id="replyPreview" class="reply-preview" hidden></div>
|
||
<div class="input-area">
|
||
<input type="file" id="fileInput" accept="image/jpeg,image/png,image/gif,image/webp,application/pdf" multiple hidden>
|
||
<button id="fileBtn" class="icon-btn" title="Datei anhängen"><i class="fa fa-paperclip"></i></button>
|
||
<button id="explorerBtn" class="icon-btn" title="Workspace durchsuchen"><i class="fa fa-folder"></i></button>
|
||
<button id="planModeBtn" class="icon-btn" title="Plan-Modus umschalten"><i class="fa fa-map"></i></button>
|
||
<textarea id="input" placeholder="Nachricht..." rows="1"></textarea>
|
||
<button id="emojiBtn" class="icon-btn" title="Emoji einfügen"><i class="fa fa-smile-o"></i></button>
|
||
<button id="send" class="icon-btn"><i class="fa fa-paper-plane"></i></button>
|
||
<button id="stop" class="icon-btn stop-btn" hidden title="Antwort abbrechen"><i class="fa fa-stop"></i></button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-settings">
|
||
<div class="page settings-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>Einstellungen</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="settings">
|
||
<section class="settings-section">
|
||
<h2>Darstellung</h2>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Seitenbreite</label>
|
||
<span class="setting-hint">Maximale Breite des Inhaltsbereichs</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<input type="range" id="settingPageWidth" min="600" max="1800" step="50">
|
||
<span class="setting-value" id="settingPageWidthValue">900px</span>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="settings-section">
|
||
<h2>Chat</h2>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Tool-Calls</label>
|
||
<span class="setting-hint">Welche Tool-Aufrufe im Chat angezeigt werden</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<select id="settingToolCallDisplay">
|
||
<option value="all">Alle anzeigen</option>
|
||
<option value="modifications">Nur Modifikationen</option>
|
||
<option value="hidden">Verstecken</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Chain-Info</label>
|
||
<span class="setting-hint">Tokens, Dauer und Iterationen nach jeder Antwort</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<select id="settingChainMetaDisplay">
|
||
<option value="always">Immer anzeigen</option>
|
||
<option value="sometimes">Manchmal anzeigen</option>
|
||
<option value="never">Nie anzeigen</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Gelöschte Nachrichten</label>
|
||
<span class="setting-hint">Gelöschte Nachrichten durchgestrichen anzeigen (werden nicht an die KI gesendet)</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="settingShowDeletedMessages">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Usage-Badge</label>
|
||
<span class="setting-hint">API-Key-Verbrauch im Chat anzeigen</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<label class="toggle-switch">
|
||
<input type="checkbox" id="settingChatUsageBadge">
|
||
<span class="toggle-slider"></span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="settingsBackupSection" class="settings-section" hidden>
|
||
<h2>Daten</h2>
|
||
<div class="setting-row">
|
||
<div class="setting-info">
|
||
<label>Backup erstellen</label>
|
||
<span class="setting-hint">Sichert den gesamten Data-Ordner (Datenbank, Agents, Memories)</span>
|
||
</div>
|
||
<div class="setting-control">
|
||
<button id="settingsBackupBtn">Jetzt sichern</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="settings-section settings-reset">
|
||
<button id="settingsResetBtn" class="danger-btn">Alle Einstellungen zurücksetzen</button>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-profile">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>Mein Profil</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<label>Benutzername</label>
|
||
<input type="text" id="profileUsername" disabled>
|
||
<label>Anzeigename</label>
|
||
<input type="text" id="profileDisplayName" placeholder="Anzeigename">
|
||
<label hidden>Standard-Pfad</label>
|
||
<input type="text" id="profileDefaultPath" disabled placeholder="Wird vom Administrator festgelegt" hidden>
|
||
<label>Persona</label>
|
||
<span class="setting-hint">Wird im System-Prompt verwendet, wenn der Agent "Kennt sein Gegenüber" aktiviert hat.</span>
|
||
<textarea id="profilePersona" rows="8" placeholder="Beschreibe dich selbst – Name, Rolle, Präferenzen, Kommunikationsstil..."></textarea>
|
||
<div class="form-actions">
|
||
<button id="profileSaveBtn">Speichern</button>
|
||
</div>
|
||
|
||
<h2>Passwort ändern</h2>
|
||
<label>Aktuelles Passwort</label>
|
||
<input type="password" id="profileCurrentPassword" placeholder="Aktuelles Passwort" autocomplete="current-password">
|
||
<label>Neues Passwort</label>
|
||
<input type="password" id="profileNewPassword" placeholder="Neues Passwort" autocomplete="new-password">
|
||
<label>Neues Passwort bestätigen</label>
|
||
<input type="password" id="profileConfirmPassword" placeholder="Passwort wiederholen" autocomplete="new-password">
|
||
<div class="form-actions">
|
||
<button id="profilePasswordBtn">Passwort ändern</button>
|
||
</div>
|
||
|
||
<div class="form-actions">
|
||
<button id="profileLogoutBtn" class="danger-btn">Abmelden</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-db-explorer">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1 id="dbExplorerTitle">Datenbank-Explorer</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div id="dbExplorerContent"></div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-embedding-debug">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>Embedding-Debug</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div class="form-group">
|
||
<label>Query</label>
|
||
<input type="text" id="embDebugQuery" placeholder="Suchbegriff eingeben..." />
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Agent</label>
|
||
<select id="embDebugAgent"><option value="">Alle Agents</option></select>
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Top N (max 100)</label>
|
||
<input type="number" id="embDebugTopN" value="20" min="1" max="100" />
|
||
</div>
|
||
<div class="form-actions">
|
||
<button id="embDebugSearchBtn"><i class="fa fa-search"></i> Suchen</button>
|
||
<button id="embDebugStatsBtn" class="secondary"><i class="fa fa-chart-bar"></i> Statistiken</button>
|
||
<button id="embDebugReEmbedBtn" class="secondary" style="background:var(--danger-color);color:white"><i class="fa fa-refresh"></i> Re-Embed All</button>
|
||
</div>
|
||
</div>
|
||
<div id="embDebugSummary" style="margin-top:1rem"></div>
|
||
<div id="embDebugResults" style="margin-top:1rem"></div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-server-settings">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>Servereinstellungen</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div id="serverSettingsFields"></div>
|
||
<div class="form-actions">
|
||
<button id="serverSettingsSaveBtn"><i class="fa fa-save"></i> Speichern</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-api-keys">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>API-Keys</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div class="section-header">
|
||
<h2>API-Key</h2>
|
||
<button id="apiKeysCheckAllBtn" class="section-add-btn mr-badge ml-auto"><i class="fa fa-refresh"></i> Alle prüfen</button>
|
||
<button id="apiKeysNewBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neuer Key</button>
|
||
</div>
|
||
<div id="apiKeysList" class="admin-user-list"></div>
|
||
</div>
|
||
|
||
<div id="apiKeysForm" class="form" hidden>
|
||
<h2 id="apiKeysFormTitle">Neuer API-Key</h2>
|
||
<label>Provider</label>
|
||
<select id="apiKeysProvider">
|
||
<option value="anthropic">Anthropic</option>
|
||
<option value="openai">OpenAI</option>
|
||
<option value="google">Google / Gemini</option>
|
||
</select>
|
||
<label>Name</label>
|
||
<input type="text" id="apiKeysName" placeholder="z.B. Mein Pro Key" autocomplete="off">
|
||
<label>API-Key</label>
|
||
<input type="text" id="apiKeysKey" placeholder="sk-ant-..." autocomplete="off">
|
||
<div class="form-actions">
|
||
<button id="apiKeysFormSaveBtn">Erstellen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="eventScannerStatus" class="event-scanner-status" hidden></div>
|
||
|
||
<div class="form">
|
||
<div class="section-header">
|
||
<h2>Key Scanner</h2>
|
||
<div class="flex-row">
|
||
<button id="recheckAllScannedBtn" class="section-add-btn"><i class="fa fa-refresh"></i> Alle prüfen</button>
|
||
<button id="scanQuickBtn" class="section-add-btn"><i class="fa fa-bolt"></i> Quick</button>
|
||
<button id="scanWebBtn" class="section-add-btn"><i class="fa fa-globe"></i> Web</button>
|
||
<button id="scanFullBtn" class="section-add-btn"><i class="fa fa-search"></i> Full</button>
|
||
</div>
|
||
</div>
|
||
<div id="scanStatus" class="scan-status"></div>
|
||
<div id="scannedKeysList" class="admin-user-list"></div>
|
||
<div class="form-actions">
|
||
<button hidden> </button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-admin">
|
||
<div class="page form-page">
|
||
<header>
|
||
<button class="back-btn icon-btn" data-page="dashboard"><i class="fa fa-arrow-left"></i></button>
|
||
<h1>Benutzerverwaltung</h1>
|
||
</header>
|
||
<div class="page-content">
|
||
<div class="form">
|
||
<div class="section-header">
|
||
<h2>Benutzer</h2>
|
||
<button id="adminNewUserBtn" class="section-add-btn"><i class="fa fa-plus"></i> Neuer Benutzer</button>
|
||
</div>
|
||
<div id="adminUserList" class="admin-user-list"></div>
|
||
|
||
</div>
|
||
|
||
<!-- Inline-Formular zum Erstellen/Bearbeiten -->
|
||
<div id="adminUserForm" class="form" hidden>
|
||
<h2 id="adminFormTitle">Neuer Benutzer</h2>
|
||
<label>Benutzername</label>
|
||
<input type="text" id="adminUsername" placeholder="Benutzername" autocomplete="off">
|
||
<label>Anzeigename</label>
|
||
<input type="text" id="adminDisplayName" placeholder="Anzeigename (optional)" autocomplete="off">
|
||
<label id="adminPasswordLabel">Passwort</label>
|
||
<input type="password" id="adminPassword" placeholder="Passwort" autocomplete="new-password">
|
||
<label>Standard-Pfad</label>
|
||
<div class="input-with-btn">
|
||
<input type="text" id="adminDefaultPath" autocomplete="off">
|
||
<button type="button" id="adminDefaultPathBrowse" class="icon-btn"><i class="fa fa-folder"></i></button>
|
||
</div>
|
||
<div class="admin-checkbox-row">
|
||
<label class="toggle-label">
|
||
<input type="checkbox" id="adminIsAdmin">
|
||
<span>Administrator</span>
|
||
</label>
|
||
</div>
|
||
<div class="admin-checkbox-row">
|
||
<label class="toggle-label">
|
||
<input type="checkbox" id="adminCanCreateAgents" checked>
|
||
<span>Agents erstellen</span>
|
||
</label>
|
||
</div>
|
||
<div class="admin-checkbox-row">
|
||
<label class="toggle-label">
|
||
<input type="checkbox" id="adminCanUseCli" checked>
|
||
<span>CLI verwenden (ohne API-Key)</span>
|
||
</label>
|
||
</div>
|
||
<div class="form-actions">
|
||
<button id="adminFormSaveBtn">Erstellen</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<template id="tpl-shared">
|
||
<div class="shared-page">
|
||
<div class="shared-header">
|
||
<span class="shared-logo">// gott</span>
|
||
<span class="shared-label">Geteilte Nachricht</span>
|
||
</div>
|
||
<div class="shared-content" id="sharedContent">
|
||
<div class="shared-loading"><i class="fa fa-spinner fa-spin"></i> Lade...</div>
|
||
</div>
|
||
<div class="shared-footer"></div>
|
||
</div>
|
||
</template>
|
||
|
||
<script src="js/lib/marked.min.js"></script>
|
||
<script src="js/lib/katex.min.js"></script>
|
||
<script src="js/lib/codemirror.min.js"></script>
|
||
<script src="js/lib/cm-mode-xml.min.js"></script>
|
||
<script src="js/lib/cm-mode-javascript.min.js"></script>
|
||
<script src="js/lib/cm-mode-css.min.js"></script>
|
||
<script src="js/lib/cm-mode-htmlmixed.min.js"></script>
|
||
<script src="js/lib/cm-mode-python.min.js"></script>
|
||
<script src="js/lib/cm-mode-markdown.min.js"></script>
|
||
<script src="js/lib/cm-mode-shell.min.js"></script>
|
||
<script src="js/lib/cm-mode-clike.min.js"></script>
|
||
<script src="js/lib/cm-mode-yaml.min.js"></script>
|
||
<script src="js/lib/easymde.min.js"></script>
|
||
<script src="js/tooltip.js"></script>
|
||
<script src="js/emoji.js"></script>
|
||
<script src="js/emoji.userdata.js"></script>
|
||
<script src="js/ui-helpers.js"></script>
|
||
<script src="js/markdown.js"></script>
|
||
<script src="js/cards.js"></script>
|
||
<script src="js/msg-actions.js"></script>
|
||
<script src="js/tool-ui.js"></script>
|
||
<script src="js/modals.js"></script>
|
||
<script src="js/stream-ui.js"></script>
|
||
<script src="js/bubbles.js"></script>
|
||
<script src="js/api.js"></script>
|
||
<script src="js/session.js"></script>
|
||
<script src="js/reply.js"></script>
|
||
<script src="js/files.js"></script>
|
||
<script src="js/file-explorer.js"></script>
|
||
<script src="js/typing-phrases.js"></script>
|
||
<script src="js/chat.js"></script>
|
||
<script src="js/history.js"></script>
|
||
<script src="js/archive.js"></script>
|
||
<script src="js/router.js"></script>
|
||
<script src="js/commands-ui.js"></script>
|
||
<script src="js/avatar-editor.js"></script>
|
||
<script src="js/pages/dashboard.js"></script>
|
||
<script src="js/pages/cronjob-page.js"></script>
|
||
<script src="js/pages/telegram-bot-page.js"></script>
|
||
<script src="js/pages/agent-page.js"></script>
|
||
<script src="js/pages/session-page.js"></script>
|
||
<script src="js/pages/chat-page.js"></script>
|
||
<script src="js/pages/login-page.js"></script>
|
||
<script src="js/pages/settings-page.js"></script>
|
||
<script src="js/pages/profile-page.js"></script>
|
||
<script src="js/pages/admin-page.js"></script>
|
||
<script src="js/pages/api-keys-page.js"></script>
|
||
<script src="js/pages/server-settings-page.js"></script>
|
||
<script src="js/pages/db-explorer-page.js"></script>
|
||
<script src="js/pages/embedding-debug-page.js"></script>
|
||
<script src="js/pages/shared-page.js"></script>
|
||
<script src="js/app.js"></script>
|
||
</body>
|
||
</html>
|