Size: 3.5 KB Modified: 6/07/2026 10:02 AM
@{
    Layout = null;
}
@inject KaiChat.Models.KaiChatConfig KaiChatConfig
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover, interactive-widget=resizes-content" />
    <title>@ViewData["Title"] - KaiChat</title>
    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
</head>
<body>
    <div class="app-container">
        <aside class="sidebar" id="sidebar">
            <div class="sidebar-header">
                <h2>KaiChat</h2>
                <button class="btn-icon sidebar-close" onclick="toggleSidebar()" title="Close menu">&times;</button>
            </div>
            <div class="sidebar-section">
                <button class="btn btn-primary btn-new-chat" onclick="newChat()">+ New Chat</button>
            </div>
            <div class="sidebar-section sidebar-conversations" id="conversationList">
            </div>
            <nav class="sidebar-footer" aria-label="Utilities">
                <a href="/Files" class="sidebar-link">Files</a>
                <a href="/Memory" class="sidebar-link">Memory</a>
                <a href="/Timer" class="sidebar-link">Timer</a>
                <a href="/Testing" class="sidebar-link">Testing</a>
                <a href="/Tool-Logs" class="sidebar-link">Tool Logs</a>
                <a href="/Settings" class="sidebar-link">Settings</a>
            </nav>
        </aside>

        <main class="main-content">
            <nav class="top-bar">
                <button class="btn-icon" onclick="toggleSidebar()" title="Menu">&#9776;</button>
                <label class="sr-only" for="personaSwitcher">Persona</label>
                <select id="personaSwitcher" class="top-bar-persona-select" title="Current persona" onchange="onPersonaSwitcherChange(this.value)">
                    <option value="Kai">Kai</option>
                </select>
                <span class="top-bar-title" id="conversationTitle">Kai</span>
                <span class="top-bar-test-badge" id="testModeBadge" style="display:none">TEST</span>
                <div class="top-bar-right">
                    <div class="compaction-bar-container" id="compactionBarContainer" style="display:none">
                        <div class="compaction-bar"><div class="compaction-bar-fill" id="compactionBarFill"></div></div>
                        <span class="compaction-label" id="compactionLabel"></span>
                    </div>
                    <span class="top-bar-tokens" id="tokenDisplay"></span>
                </div>
            </nav>

            @RenderBody()

            <div class="status-bar" id="statusBar" data-state="offline">
                <span class="status-dot" id="statusDot"></span>
                <span class="status-text" id="statusText">Offline</span>
                <span class="status-detail" id="statusDetail"></span>
                <button type="button" class="status-notify-btn" id="notificationEnableBtn" onclick="enableKaiNotifications()" hidden>Enable notifications</button>
            </div>
        </main>
    </div>

    <input type="hidden" id="currentConversationId" value="" />

    <script>
        window.__kaiChatVersion = '@KaiChatConfig.AppVersion';
    </script>
    <script src="~/js/signalr.min.js" asp-append-version="true"></script>
    <script src="~/js/chat.js" asp-append-version="true"></script>
    @await RenderSectionAsync("Scripts", required: false)
</body>
</html>
Offline