Changeset 0.20.0 (#85)

This commit is contained in:
2026-03-01 12:40:15 +00:00
parent eb74180611
commit 817062e5fc
57 changed files with 5435 additions and 72 deletions

View File

@@ -21,6 +21,9 @@
<link rel="stylesheet" href="css/styles.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="css/persona-kb.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="css/memory.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="css/notifications.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="css/channel-models.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="css/notification-prefs.css?v=%%APP_VERSION%%">
<link rel="stylesheet" href="branding/custom.css" onerror="this.remove()">
</head>
<body>
@@ -136,7 +139,15 @@
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/></svg>
</button>
<div class="model-caps" id="modelCaps"></div>
<div class="ch-model-pills" id="channelModelPills"></div>
<span class="chat-token-count" id="chatTokenCount"></span>
<div class="notif-wrap" id="notifWrap">
<button class="notif-bell" id="notifBell" onclick="Notifications.toggleDropdown()" title="Notifications">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
<span class="notif-badge" id="notifBadge" style="display:none">0</span>
</button>
<div class="notif-dropdown" id="notifDropdown"></div>
</div>
</div>
<div class="messages" id="chatMessages">
@@ -394,6 +405,7 @@
<button class="settings-tab" data-stab="roles" onclick="UI.switchSettingsTab('roles')" id="settingsRolesTabBtn">Model Roles</button>
<button class="settings-tab" data-stab="knowledgeBases" onclick="UI.switchSettingsTab('knowledgeBases')" id="settingsKBTabBtn" style="display:none">Knowledge</button>
<button class="settings-tab" data-stab="memory" onclick="UI.switchSettingsTab('memory')" id="settingsMemoryTabBtn">Memory</button>
<button class="settings-tab" data-stab="notifPrefs" onclick="UI.switchSettingsTab('notifPrefs')">Notifications</button>
</div>
<div class="modal-body">
<!-- General Tab -->
@@ -565,6 +577,14 @@
<div id="settingsMemoryContent"></div>
</section>
</div>
<!-- Notification Preferences Tab (v0.20.0 Phase 3) -->
<div class="settings-tab-content" id="settingsNotifPrefsTab" style="display:none">
<section class="settings-section">
<h3>Delivery Preferences</h3>
<p class="section-hint" style="margin-bottom:8px">Choose how you receive notifications. Email delivery requires admin SMTP configuration.</p>
<div id="notifPrefsBody"></div>
</section>
</div>
</div>
<div class="modal-footer"><button class="btn-primary" id="settingsSaveBtn">Save Settings</button></div>
</div>
@@ -935,6 +955,30 @@
<h4>🔐 Encryption</h4>
<div id="adminVaultStatus"><span class="empty-hint">Loading…</span></div>
</section>
<section class="settings-section">
<h3>Email Notifications (SMTP)</h3>
<label class="checkbox-label"><input type="checkbox" id="adminEmailEnabled"> Enable email notifications</label>
<div id="smtpConfigFields" style="display:none">
<div class="smtp-config-grid" style="margin-top:12px">
<div class="form-group"><label>SMTP Host</label><input type="text" id="adminSmtpHost" placeholder="smtp.example.com"></div>
<div class="form-group"><label>Port</label><input type="number" id="adminSmtpPort" value="587" min="1" max="65535" style="width:100px"></div>
<div class="form-group"><label>Username</label><input type="text" id="adminSmtpUser" placeholder="user@example.com"></div>
<div class="form-group"><label>Password</label><input type="password" id="adminSmtpPassword" placeholder="••••••••"></div>
<div class="form-group"><label>From Address</label><input type="text" id="adminSmtpFrom" placeholder="noreply@chat.example.com"></div>
<div class="form-group"><label>TLS Mode</label>
<select id="adminSmtpTls">
<option value="false">STARTTLS (port 587)</option>
<option value="true">Implicit TLS (port 465)</option>
</select>
</div>
</div>
<div class="smtp-test-row">
<button class="btn-small" id="adminSmtpTestBtn" onclick="NotifPrefs._testEmail()">Send Test Email</button>
<span class="smtp-test-status" id="smtpTestStatus"></span>
</div>
<p class="section-hint" style="margin-top:8px">Test sends to your account's email address. Save settings first, then test.</p>
</div>
</section>
<button class="btn-primary btn-small" id="adminSaveSettings">Save Settings</button>
</div>
<div class="admin-section-content" id="adminStorageTab" style="display:none"><div id="adminStorageContent"></div></div>
@@ -1131,6 +1175,9 @@
<script src="js/memory-ui.js?v=%%APP_VERSION%%"></script>
<script src="js/persona-kb.js?v=%%APP_VERSION%%"></script>
<script src="js/projects-ui.js?v=%%APP_VERSION%%"></script>
<script src="js/channel-models.js?v=%%APP_VERSION%%"></script>
<script src="js/notification-prefs.js?v=%%APP_VERSION%%"></script>
<script src="js/notifications.js?v=%%APP_VERSION%%"></script>
<script src="js/chat.js?v=%%APP_VERSION%%"></script>
<script src="js/settings-handlers.js?v=%%APP_VERSION%%"></script>
<script src="js/admin-handlers.js?v=%%APP_VERSION%%"></script>