|
|
|
|
@@ -44,6 +44,30 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{{/* ── Crash Catcher (visible without devtools) ── */}}
|
|
|
|
|
<div id="crashBanner" style="display:none;position:fixed;top:0;left:0;right:0;z-index:99999;background:#b00020;color:#fff;padding:12px 20px;font-family:monospace;font-size:13px;max-height:40vh;overflow-y:auto;">
|
|
|
|
|
<strong>⚠ Init Error</strong> <button onclick="this.parentElement.style.display='none'" style="float:right;background:none;border:1px solid #fff;color:#fff;cursor:pointer;padding:2px 8px;border-radius:3px">✕</button>
|
|
|
|
|
<pre id="crashDetail" style="margin:8px 0 0;white-space:pre-wrap;font-size:12px;"></pre>
|
|
|
|
|
</div>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}">
|
|
|
|
|
window.addEventListener('error', function(e) {
|
|
|
|
|
var b = document.getElementById('crashBanner');
|
|
|
|
|
var d = document.getElementById('crashDetail');
|
|
|
|
|
if (b && d) {
|
|
|
|
|
b.style.display = '';
|
|
|
|
|
d.textContent += (e.filename || '') + ':' + (e.lineno || '') + ' ' + (e.message || e) + '\n';
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
window.addEventListener('unhandledrejection', function(e) {
|
|
|
|
|
var b = document.getElementById('crashBanner');
|
|
|
|
|
var d = document.getElementById('crashDetail');
|
|
|
|
|
if (b && d) {
|
|
|
|
|
b.style.display = '';
|
|
|
|
|
d.textContent += 'Promise: ' + (e.reason?.message || e.reason || 'unknown') + '\n' + (e.reason?.stack || '') + '\n';
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
{{/* ── App Container ───────────────────────── */}}
|
|
|
|
|
<div id="appContainer" class="app" style="display:none;height:100%;">
|
|
|
|
|
|
|
|
|
|
@@ -220,8 +244,8 @@
|
|
|
|
|
<span id="contextWarningText"></span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{{/* Attachment strip */}}
|
|
|
|
|
<div id="attachmentStrip" class="attachment-strip"></div>
|
|
|
|
|
{{/* File strip */}}
|
|
|
|
|
<div id="fileStrip" class="file-strip"></div>
|
|
|
|
|
|
|
|
|
|
{{/* Streaming tools display */}}
|
|
|
|
|
<div id="streamTools" class="stream-tools" style="display:none;"></div>
|
|
|
|
|
@@ -324,7 +348,7 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{{/* ── Hidden File Input (attachments) ─────── */}}
|
|
|
|
|
{{/* ── Hidden File Input ─────── */}}
|
|
|
|
|
<input type="file" id="fileInput" multiple style="display:none;">
|
|
|
|
|
|
|
|
|
|
{{/* ── Settings Modal ──────────────────────── */}}
|
|
|
|
|
@@ -450,7 +474,7 @@
|
|
|
|
|
<div id="settingsTeamsList"></div>
|
|
|
|
|
<div id="settingsTeamMembers" style="display:none;"></div>
|
|
|
|
|
<div id="settingsTeamPersonas" style="display:none;">
|
|
|
|
|
<div id="adminPersonaList"></div>
|
|
|
|
|
<div id="teamPersonaList"></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="settingsTeamProviders" style="display:none;">
|
|
|
|
|
<button id="settingsTeamAddProviderBtn" class="btn-small" style="display:none;">+ Add Provider</button>
|
|
|
|
|
@@ -536,10 +560,6 @@
|
|
|
|
|
<div class="form-group"><label><input type="checkbox" id="adminBannerEnabled"> Banner</label></div>
|
|
|
|
|
<div id="bannerConfigFields" style="display:none;">
|
|
|
|
|
<input type="text" id="adminBannerText" placeholder="Banner text">
|
|
|
|
|
<div style="display:flex;gap:8px;margin-top:6px;">
|
|
|
|
|
<select id="adminBannerPreset"><option value="">Custom colors</option></select>
|
|
|
|
|
<select id="adminBannerPosition"><option value="both">Both</option><option value="top">Top</option><option value="bottom">Bottom</option></select>
|
|
|
|
|
</div>
|
|
|
|
|
<div style="display:flex;gap:8px;margin-top:6px;">
|
|
|
|
|
<input type="color" id="adminBannerBg" value="#007a33"><input type="text" id="adminBannerBgHex" value="#007a33" style="width:80px;">
|
|
|
|
|
<input type="color" id="adminBannerFg" value="#ffffff"><input type="text" id="adminBannerFgHex" value="#ffffff" style="width:80px;">
|
|
|
|
|
@@ -716,7 +736,7 @@
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/tokens.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/notes.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/note-graph.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/attachments.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/files.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/tools-toggle.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/knowledge-ui.js?v={{$.Version}}"></script>
|
|
|
|
|
<script nonce="{{$.CSPNonce}}" src="{{$.BasePath}}/js/memory-ui.js?v={{$.Version}}"></script>
|
|
|
|
|
|