diff --git a/frontends/desktop/static/app.js b/frontends/desktop/static/app.js
index 0676819a..3214a5c9 100644
--- a/frontends/desktop/static/app.js
+++ b/frontends/desktop/static/app.js
@@ -751,6 +751,12 @@ bindClick('ga-source-btn', async (e) => {
});
bindClick('ga-source-clear-btn', async (e) => {
e.stopPropagation();
+ const confirmed = await showConfirmDialog({
+ title: t('confirm.gaSourceClearTitle'),
+ message: t('confirm.gaSourceClear'),
+ okText: t('set.gaSourceClear'),
+ });
+ if (!confirmed) return;
try {
showChanToast(t('sys.gaSourceSwitching'), '', 'ok');
await window.ga.clearGaSource();
diff --git a/frontends/desktop/static/fallback.html b/frontends/desktop/static/fallback.html
index 39caafca..d676d451 100644
--- a/frontends/desktop/static/fallback.html
+++ b/frontends/desktop/static/fallback.html
@@ -21,7 +21,7 @@ button:disabled{opacity:.4;cursor:not-allowed}
#status{margin-top:1rem;font-size:.85rem;min-height:1.2em}
.err{color:#dc2626}.ok{color:#16a34a}
-
+
diff --git a/frontends/desktop/static/i18n.js b/frontends/desktop/static/i18n.js
index 185fd0cb..79773213 100644
--- a/frontends/desktop/static/i18n.js
+++ b/frontends/desktop/static/i18n.js
@@ -29,7 +29,13 @@
'customPreset.removeTitle': '删除',
'customPreset.editTitle': '编辑',
'builtinPreset.restoreBtn': '恢复默认预设',
- 'set.appearance': '外观', 'set.plainUi': '素色', 'set.fontSize': '聊天字号', 'set.lang': '语言', 'set.model': '模型', 'set.addModel': '添加模型', 'set.features': '功能', 'set.importMykey': '导入已有模型配置(mykey.py)', 'set.exportMykey': '导出当前模型配置', 'set.importMemory': '导入已有记忆与会话记录(选择 GenericAgent 根目录)', 'set.gaSource': '接入独立 GenericAgent 源码(把桌面版当作壳)', 'set.gaSourceClear': '取消接入,改用内置版本', 'set.gaSourceCurrent': '当前接入', 'set.serviceManager': '后台服务管理',
+ 'set.appearance': '外观', 'set.plainUi': '素色', 'set.fontSize': '聊天字号', 'set.lang': '语言', 'set.model': '模型', 'set.addModel': '添加模型', 'set.features': '功能', 'set.importMykey': '导入模型配置', 'set.exportMykey': '导出模型配置', 'set.importMemory': '导入记忆与会话记录', 'set.gaSource': '接入外部 GenericAgent 源码', 'set.gaSourceClear': '改用内置版本', 'set.gaSourceCurrent': '当前接入', 'set.serviceManager': '后台服务管理',
+ 'set.importMykeyTip': '从 mykey.py 导入已有的模型与 API 配置',
+ 'set.exportMykeyTip': '将当前模型与 API 配置导出为 mykey.py',
+ 'set.importMemoryTip': '从另一个 GenericAgent 根目录导入记忆、模型响应和会话记录',
+ 'set.gaSourceTip': '选择包含 agentmain.py 的 GenericAgent 根目录,桌面端将使用其中的后端源码',
+ 'set.gaSourceClearTip': '取消接入当前外部源码,切换回安装包内置的 GenericAgent 版本',
+ 'set.serviceManagerTip': '查看并管理消息通道与后台进程的运行状态和日志',
'shortcut.askConfirm': '是否在桌面创建 GenericAgent 快捷方式?',
'appearance.light': '浅色', 'appearance.dark': '深色',
'set.noModels': '暂无模型,点击下方添加',
@@ -53,6 +59,8 @@
'err.modelSave': '保存失败', 'err.modelSwitch': '切换模型失败', 'err.modelRequired': '请填写模型、API Key 和 API 地址',
'err.modelDelete': '删除失败', 'err.modelDeleteLast': '至少保留一个模型',
'confirm.modelDelete': '确定删除该模型配置?',
+ 'confirm.gaSourceClearTitle': '改用内置版本?',
+ 'confirm.gaSourceClear': '取消接入后,桌面端将停止使用当前外部 GenericAgent 源码,并切换回安装包内置版本。是否继续?',
'model.aggregation': '渠道组(自动故障转移)', 'model.aggregationShort': '渠道组', 'model.aggregationDesc': '按顺序尝试,失败自动切换到下一个',
'model.emptyMixin': '尚未加入模型',
'model.addToMixin': '加入渠道组', 'model.inMixin': '已在渠道组', 'model.removeFromMixin': '移出渠道组', 'model.alreadyInMixin': '已在渠道组中', 'model.dragReorder': '拖拽调整顺序',
@@ -214,7 +222,13 @@
'customPreset.removeTitle': 'Delete',
'customPreset.editTitle': 'Edit',
'builtinPreset.restoreBtn': 'Restore defaults',
- 'set.appearance': 'Appearance', 'set.plainUi': 'Plain', 'set.fontSize': 'Chat font size', 'set.lang': 'Language', 'set.model': 'Model', 'set.addModel': 'Add model', 'set.features': 'Features', 'set.importMykey': 'Import model config (mykey.py)', 'set.exportMykey': 'Export current model config', 'set.importMemory': 'Import existing memory & sessions (select GenericAgent root)', 'set.gaSource': 'Connect to a separate GenericAgent source (use desktop as a shell)', 'set.gaSourceClear': 'Disconnect, use the bundled version', 'set.gaSourceCurrent': 'Connected to', 'set.serviceManager': 'Service manager',
+ 'set.appearance': 'Appearance', 'set.plainUi': 'Plain', 'set.fontSize': 'Chat font size', 'set.lang': 'Language', 'set.model': 'Model', 'set.addModel': 'Add model', 'set.features': 'Features', 'set.importMykey': 'Import model config', 'set.exportMykey': 'Export model config', 'set.importMemory': 'Import memory and sessions', 'set.gaSource': 'Connect external GenericAgent source', 'set.gaSourceClear': 'Use bundled version', 'set.gaSourceCurrent': 'Connected to', 'set.serviceManager': 'Service manager',
+ 'set.importMykeyTip': 'Import existing model and API settings from mykey.py',
+ 'set.exportMykeyTip': 'Export the current model and API settings as mykey.py',
+ 'set.importMemoryTip': 'Import memory, model responses, and sessions from another GenericAgent root directory',
+ 'set.gaSourceTip': 'Select a GenericAgent root containing agentmain.py and use its backend source code',
+ 'set.gaSourceClearTip': 'Disconnect the current external source and switch back to the bundled GenericAgent version',
+ 'set.serviceManagerTip': 'View and manage message channels, background processes, and their logs',
'shortcut.askConfirm': 'Create a desktop shortcut for GenericAgent?',
'appearance.light': 'Light', 'appearance.dark': 'Dark',
'set.noModels': 'No models yet — add one below',
@@ -238,6 +252,8 @@
'err.modelSave': 'Save failed', 'err.modelSwitch': 'Failed to switch model', 'err.modelRequired': 'Model, API Key and base URL are required',
'err.modelDelete': 'Delete failed', 'err.modelDeleteLast': 'At least one model is required',
'confirm.modelDelete': 'Delete this model profile?',
+ 'confirm.gaSourceClearTitle': 'Use the bundled version?',
+ 'confirm.gaSourceClear': 'The desktop app will stop using the current external GenericAgent source and switch back to its bundled version. Continue?',
'model.aggregation': 'Channel group (auto failover)', 'model.aggregationShort': 'Channel group', 'model.aggregationDesc': 'Tries in order, switches to the next on failure',
'model.emptyMixin': 'No models added yet',
'model.addToMixin': 'Add to channel', 'model.inMixin': 'In channel', 'model.removeFromMixin': 'Remove from channel', 'model.alreadyInMixin': 'Already in the channel', 'model.dragReorder': 'Drag to reorder',
diff --git a/frontends/desktop/static/index.html b/frontends/desktop/static/index.html
index 586075ef..2b6a7f4c 100644
--- a/frontends/desktop/static/index.html
+++ b/frontends/desktop/static/index.html
@@ -640,29 +640,29 @@
-