mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-09 18:57:43 +08:00
feat: add configurable auto-delete modes (none, single, all) for remote chat sessions
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
import { Trash2 } from 'lucide-react'
|
||||
|
||||
export default function AutoDeleteSection({ t, form, setForm }) {
|
||||
const mode = form.auto_delete?.mode || 'none'
|
||||
const descKey = mode === 'single'
|
||||
? 'settings.autoDeleteSingleDesc'
|
||||
: mode === 'all'
|
||||
? 'settings.autoDeleteAllDesc'
|
||||
: 'settings.autoDeleteNoneDesc'
|
||||
|
||||
return (
|
||||
<div className="bg-card border border-border rounded-xl p-5 space-y-4">
|
||||
<div className="flex items-center gap-2">
|
||||
@@ -8,28 +15,25 @@ export default function AutoDeleteSection({ t, form, setForm }) {
|
||||
<h3 className="font-semibold">{t('settings.autoDeleteTitle')}</h3>
|
||||
</div>
|
||||
<p className="text-sm text-muted-foreground">{t('settings.autoDeleteDesc')}</p>
|
||||
<div className="flex items-center justify-between">
|
||||
<label className="text-sm font-medium">{t('settings.autoDeleteSessions')}</label>
|
||||
<button
|
||||
type="button"
|
||||
role="switch"
|
||||
aria-checked={form.auto_delete?.sessions || false}
|
||||
onClick={() => setForm((prev) => ({
|
||||
<div className="space-y-2">
|
||||
<label className="text-sm font-medium">{t('settings.autoDeleteMode')}</label>
|
||||
<select
|
||||
value={mode}
|
||||
onChange={(e) => setForm((prev) => ({
|
||||
...prev,
|
||||
auto_delete: { ...prev.auto_delete, sessions: !prev.auto_delete?.sessions },
|
||||
auto_delete: { ...(prev.auto_delete || {}), mode: e.target.value },
|
||||
}))}
|
||||
className={`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${
|
||||
form.auto_delete?.sessions ? 'bg-primary' : 'bg-muted'
|
||||
}`}
|
||||
className="w-full rounded-lg border border-border bg-muted px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-ring"
|
||||
>
|
||||
<span
|
||||
className={`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${
|
||||
form.auto_delete?.sessions ? 'translate-x-6' : 'translate-x-1'
|
||||
}`}
|
||||
/>
|
||||
</button>
|
||||
<option value="none">{t('settings.autoDeleteNone')}</option>
|
||||
<option value="single">{t('settings.autoDeleteSingle')}</option>
|
||||
<option value="all">{t('settings.autoDeleteAll')}</option>
|
||||
</select>
|
||||
</div>
|
||||
{form.auto_delete?.sessions && (
|
||||
<p className={`text-xs ${mode === 'none' ? 'text-muted-foreground' : 'text-amber-500'}`}>
|
||||
{t(descKey)}
|
||||
</p>
|
||||
{mode !== 'none' && (
|
||||
<p className="text-xs text-amber-500 flex items-center gap-1">
|
||||
{t('settings.autoDeleteWarning')}
|
||||
</p>
|
||||
|
||||
@@ -16,7 +16,7 @@ const DEFAULT_FORM = {
|
||||
compat: { strip_reference_markers: true },
|
||||
responses: { store_ttl_seconds: 900 },
|
||||
embeddings: { provider: '' },
|
||||
auto_delete: { sessions: false },
|
||||
auto_delete: { mode: 'none' },
|
||||
claude_mapping_text: '{\n "fast": "deepseek-chat",\n "slow": "deepseek-reasoner"\n}',
|
||||
model_aliases_text: '{}',
|
||||
}
|
||||
@@ -38,6 +38,17 @@ function parseJSONMap(raw, fieldName, t) {
|
||||
return parsed
|
||||
}
|
||||
|
||||
function normalizeAutoDeleteMode(raw) {
|
||||
const mode = String(raw?.mode || '').trim().toLowerCase()
|
||||
if (mode === 'none' || mode === 'single' || mode === 'all') {
|
||||
return mode
|
||||
}
|
||||
if (Boolean(raw?.sessions)) {
|
||||
return 'all'
|
||||
}
|
||||
return 'none'
|
||||
}
|
||||
|
||||
function fromServerForm(data) {
|
||||
return {
|
||||
admin: { jwt_expire_hours: Number(data.admin?.jwt_expire_hours || 24) },
|
||||
@@ -57,7 +68,7 @@ function fromServerForm(data) {
|
||||
provider: data.embeddings?.provider || '',
|
||||
},
|
||||
auto_delete: {
|
||||
sessions: Boolean(data.auto_delete?.sessions || false),
|
||||
mode: normalizeAutoDeleteMode(data.auto_delete),
|
||||
},
|
||||
claude_mapping_text: JSON.stringify(data.claude_mapping || {}, null, 2),
|
||||
model_aliases_text: JSON.stringify(data.model_aliases || {}, null, 2),
|
||||
@@ -78,7 +89,7 @@ function toServerPayload(form) {
|
||||
},
|
||||
responses: { store_ttl_seconds: Number(form.responses.store_ttl_seconds) },
|
||||
embeddings: { provider: String(form.embeddings.provider || '').trim() },
|
||||
auto_delete: { sessions: Boolean(form.auto_delete?.sessions) },
|
||||
auto_delete: { mode: normalizeAutoDeleteMode(form.auto_delete) },
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -242,10 +242,16 @@
|
||||
"modelTitle": "Model mapping",
|
||||
"claudeMapping": "Claude mapping (JSON)",
|
||||
"modelAliases": "Model aliases (JSON)",
|
||||
"autoDeleteTitle": "Auto Delete Sessions",
|
||||
"autoDeleteDesc": "When enabled, all sessions will be automatically deleted after each request completes.",
|
||||
"autoDeleteSessions": "Auto delete sessions",
|
||||
"autoDeleteWarning": "Warning: Enabling this will delete all session history after each request. Use with caution.",
|
||||
"autoDeleteTitle": "Session Cleanup Policy",
|
||||
"autoDeleteDesc": "Choose how DeepSeek remote chat records are cleaned up after each request completes.",
|
||||
"autoDeleteMode": "Deletion mode",
|
||||
"autoDeleteNone": "Do not delete",
|
||||
"autoDeleteSingle": "Delete current session",
|
||||
"autoDeleteAll": "Delete all sessions",
|
||||
"autoDeleteNoneDesc": "Keep the remote session after the request completes.",
|
||||
"autoDeleteSingleDesc": "Delete only the remote session created by this request.",
|
||||
"autoDeleteAllDesc": "Delete every remote session for the account after the request completes.",
|
||||
"autoDeleteWarning": "This mode deletes remote chat records. Use with caution.",
|
||||
"backupTitle": "Backup & Restore",
|
||||
"loadExport": "Load current export",
|
||||
"downloadExport": "Download backup file",
|
||||
|
||||
@@ -242,10 +242,16 @@
|
||||
"modelTitle": "模型映射",
|
||||
"claudeMapping": "Claude 映射(JSON)",
|
||||
"modelAliases": "模型别名(JSON)",
|
||||
"autoDeleteTitle": "自动删除会话",
|
||||
"autoDeleteDesc": "开启后,每次请求完成后会自动删除该账号的所有会话记录。",
|
||||
"autoDeleteSessions": "自动删除会话",
|
||||
"autoDeleteWarning": "开启此功能后,每次请求完成都会删除该账号的所有历史会话,请谨慎使用。",
|
||||
"autoDeleteTitle": "会话删除策略",
|
||||
"autoDeleteDesc": "选择每次请求完成后如何清理 DeepSeek 远端聊天记录。",
|
||||
"autoDeleteMode": "删除模式",
|
||||
"autoDeleteNone": "不开启删除",
|
||||
"autoDeleteSingle": "仅删除当前会话",
|
||||
"autoDeleteAll": "删除全部会话",
|
||||
"autoDeleteNoneDesc": "请求结束后保留远端会话,不自动删除。",
|
||||
"autoDeleteSingleDesc": "请求结束后只删除本次请求创建的远端会话。",
|
||||
"autoDeleteAllDesc": "请求结束后清空该账号的全部远端会话。",
|
||||
"autoDeleteWarning": "当前模式会删除远端聊天记录,请谨慎使用。",
|
||||
"backupTitle": "备份与恢复",
|
||||
"loadExport": "加载当前导出",
|
||||
"downloadExport": "下载备份文件",
|
||||
|
||||
Reference in New Issue
Block a user