feat(chat): add local-first conversation workspace

This commit is contained in:
2026-08-13 15:55:15 +08:00
parent d1d50d722c
commit 8991f78f9f
43 changed files with 5450 additions and 592 deletions
+2 -2
View File
@@ -17,7 +17,7 @@
<a class="brand" href="/">xiteng.site / account</a>
<div class="nav-links">
<a id="account-admin-link" href="/admin" hidden>系统管理</a>
<a href="https://chat.xiteng.site">Chat</a>
<a href="/chat/">Chat</a>
<a href="/">公开主页</a>
</div>
</nav>
@@ -80,7 +80,7 @@
<div><p class="section-kicker">BUILT-IN + CUSTOM</p><h2>Provider Registry</h2></div>
<button id="account-refresh" class="admin-action" type="button">刷新</button>
</div>
<div class="admin-notice">只需填写 URL 与 API Key 即可先行探测;测试不会保存 Provider 或凭据。Backend Key 保存到 Key VaultFrontend Key 必须跳转到 Chat 后保存在 <code>chat.xiteng.site</code> 的浏览器存储中。</div>
<div class="admin-notice">只需填写 URL 与 API Key 即可先行探测;测试不会保存 Provider 或凭据。Backend Key 保存到 Key VaultFrontend Key 必须跳转到 Chat 后保存在 <code>xiteng.site/chat</code> 的浏览器存储中。</div>
<form id="account-provider-form" class="admin-form provider-editor-form">
<div class="provider-probe-fields">
<label>Provider URL<input name="baseUrl" type="url" required placeholder="https://api.example.com/v1"></label>
+2 -2
View File
@@ -485,7 +485,7 @@ function renderProvider(provider) {
})));
if (provider.connection.type === "frontend") {
actions.append(actionButton(provider.auth.type === "none" ? "在 Chat 中配置端点" : "在 Chat 中配置本地 Key(需 CORS / Relay", () => {
window.location.href = `https://chat.xiteng.site/?configure=${encodeURIComponent(provider.id)}`;
window.location.href = `/chat/?configure=${encodeURIComponent(provider.id)}`;
}));
}
if (!provider.builtin) {
@@ -712,7 +712,7 @@ document.getElementById("account-provider-form").addEventListener("submit", asyn
});
}
} else if (connectionType === "frontend") {
window.location.href = `https://chat.xiteng.site/?configure=${encodeURIComponent(providerId)}`;
window.location.href = `/chat/?configure=${encodeURIComponent(providerId)}`;
return;
}
await loadVault();