diff --git a/agent/app/service/agents_hermes.go b/agent/app/service/agents_hermes.go index 902c70fa3..226834457 100644 --- a/agent/app/service/agents_hermes.go +++ b/agent/app/service/agents_hermes.go @@ -159,15 +159,19 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig, allowFrom := splitHermesEnvList(envMap["TELEGRAM_ALLOWED_USERS"]) requireMention := extractBoolValue(childMap(cfg, "telegram")["require_mention"], false) - dmPolicy := "pairing" + dmPolicy := "" if extractHermesEnvBool(envMap, "TELEGRAM_ALLOW_ALL_USERS", false) { dmPolicy = "open" } else if len(allowFrom) > 0 { dmPolicy = "allowlist" + } else if envMap["TELEGRAM_BOT_TOKEN"] != "" { + dmPolicy = "pairing" } - groupPolicy := "open" + groupPolicy := "" if requireMention { groupPolicy = "allowlist" + } else if envMap["TELEGRAM_BOT_TOKEN"] != "" { + groupPolicy = "open" } token := envMap["TELEGRAM_BOT_TOKEN"] result := &dto.AgentTelegramConfig{ @@ -177,8 +181,8 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig, RequireMention: requireMention, GroupPolicy: groupPolicy, GroupAllowFrom: []string{}, - Streaming: "partial", - DefaultAccount: "default", + Streaming: "", + DefaultAccount: "", } if token != "" { result.Bots = []dto.AgentTelegramBot{ @@ -192,7 +196,7 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig, BotToken: token, DmPolicy: dmPolicy, GroupPolicy: groupPolicy, - Streaming: "partial", + Streaming: "", }, } } @@ -250,16 +254,20 @@ func readHermesDiscordChannelConfig(confDir string) (*dto.AgentDiscordConfig, er } allowFrom := splitHermesEnvList(envMap["DISCORD_ALLOWED_USERS"]) - requireMention := extractBoolValue(childMap(cfg, "discord")["require_mention"], true) - dmPolicy := "pairing" + requireMention := extractBoolValue(childMap(cfg, "discord")["require_mention"], false) + dmPolicy := "" if extractHermesEnvBool(envMap, "DISCORD_ALLOW_ALL_USERS", false) { dmPolicy = "open" } else if len(allowFrom) > 0 { dmPolicy = "allowlist" + } else if envMap["DISCORD_BOT_TOKEN"] != "" { + dmPolicy = "pairing" } - groupPolicy := "open" + groupPolicy := "" if requireMention { groupPolicy = "allowlist" + } else if envMap["DISCORD_BOT_TOKEN"] != "" { + groupPolicy = "open" } token := envMap["DISCORD_BOT_TOKEN"] result := &dto.AgentDiscordConfig{ @@ -268,7 +276,7 @@ func readHermesDiscordChannelConfig(confDir string) (*dto.AgentDiscordConfig, er AllowFrom: allowFrom, RequireMention: requireMention, GroupPolicy: groupPolicy, - DefaultAccount: "default", + DefaultAccount: "", } if token != "" { result.Bots = []dto.AgentDiscordBot{ diff --git a/agent/app/service/agents_hermes_channels.go b/agent/app/service/agents_hermes_channels.go index 4670ea784..1c5eb84d0 100644 --- a/agent/app/service/agents_hermes_channels.go +++ b/agent/app/service/agents_hermes_channels.go @@ -48,14 +48,8 @@ func readHermesQQBotChannelConfig(confDir string) (*dto.AgentQQBotConfig, error) appID := envMap["QQ_APP_ID"] clientSecret := envMap["QQ_CLIENT_SECRET"] dmPolicy := extractStringValue(extra["dm_policy"]) - if dmPolicy == "" { - dmPolicy = "open" - } allowFrom := splitHermesEnvList(envMap["QQ_ALLOWED_USERS"]) groupPolicy := extractStringValue(extra["group_policy"]) - if groupPolicy == "" { - groupPolicy = "open" - } groupAllowFrom := splitHermesEnvList(envMap["QQ_GROUP_ALLOWED_USERS"]) result := &dto.AgentQQBotConfig{ @@ -181,18 +175,8 @@ func readHermesWecomChannelConfig(confDir string) (*dto.AgentWecomConfig, error) platform := childMap(childMap(cfg, "platforms"), "wecom") allowFrom := splitHermesEnvList(envMap["WECOM_ALLOWED_USERS"]) groupAllowFrom := splitHermesEnvList(envMap["WECOM_GROUP_ALLOWED_USERS"]) - dmPolicy := "pairing" - if envMap["WECOM_DM_POLICY"] == "open" { - dmPolicy = "open" - } else if len(allowFrom) > 0 { - dmPolicy = "allowlist" - } else if policy := envMap["WECOM_DM_POLICY"]; policy != "" { - dmPolicy = policy - } + dmPolicy := envMap["WECOM_DM_POLICY"] groupPolicy := envMap["WECOM_GROUP_POLICY"] - if groupPolicy == "" { - groupPolicy = "open" - } botID := envMap["WECOM_BOT_ID"] secret := envMap["WECOM_SECRET"] @@ -309,22 +293,24 @@ func readHermesDingTalkChannelConfig(confDir string) (*dto.AgentDingTalkConfig, platform := childMap(childMap(cfg, "platforms"), "dingtalk") extra := childMap(platform, "extra") + clientID := envMap["DINGTALK_CLIENT_ID"] + clientSecret := envMap["DINGTALK_CLIENT_SECRET"] allowFrom := splitHermesEnvList(envMap["DINGTALK_ALLOWED_USERS"]) - dmPolicy := "pairing" + dmPolicy := "" if extractHermesEnvBool(envMap, "DINGTALK_ALLOW_ALL_USERS", false) { dmPolicy = "open" } else if len(allowFrom) > 0 { dmPolicy = "allowlist" } else if extractStringValue(extra["unauthorized_dm_behavior"]) == "ignore" { dmPolicy = "disabled" + } else if clientID != "" || clientSecret != "" { + dmPolicy = "pairing" } - clientID := envMap["DINGTALK_CLIENT_ID"] - clientSecret := envMap["DINGTALK_CLIENT_SECRET"] result := &dto.AgentDingTalkConfig{ Enabled: extractBoolValue(platform["enabled"], clientID != "" && clientSecret != ""), DmPolicy: dmPolicy, AllowFrom: allowFrom, - GroupPolicy: "open", + GroupPolicy: "", GroupAllowFrom: []string{}, } if clientID != "" || clientSecret != "" { @@ -422,29 +408,28 @@ func readHermesFeishuChannelConfig(confDir string) (*dto.AgentFeishuConfig, erro } platform := childMap(childMap(cfg, "platforms"), "feishu") + appID := envMap["FEISHU_APP_ID"] + appSecret := envMap["FEISHU_APP_SECRET"] allowFrom := splitHermesEnvList(envMap["FEISHU_ALLOWED_USERS"]) - dmPolicy := "pairing" + dmPolicy := "" if extractHermesEnvBool(envMap, "FEISHU_ALLOW_ALL_USERS", false) { dmPolicy = "open" } else if len(allowFrom) > 0 { dmPolicy = "allowlist" + } else if appID != "" || appSecret != "" { + dmPolicy = "pairing" } groupPolicy := envMap["FEISHU_GROUP_POLICY"] - if groupPolicy == "" { - groupPolicy = "allowlist" - } - appID := envMap["FEISHU_APP_ID"] - appSecret := envMap["FEISHU_APP_SECRET"] result := &dto.AgentFeishuConfig{ Enabled: extractBoolValue(platform["enabled"], appID != "" && appSecret != ""), - ThreadSession: true, - ReplyMode: "auto", + ThreadSession: false, + ReplyMode: "", Streaming: false, - RequireMention: "true", + RequireMention: "", GroupPolicy: groupPolicy, GroupAllowFrom: []string{}, - Domain: firstHermesEnvValue(envMap, "FEISHU_DOMAIN", "feishu"), - ConnectionMode: firstHermesEnvValue(envMap, "FEISHU_CONNECTION_MODE", "websocket"), + Domain: envMap["FEISHU_DOMAIN"], + ConnectionMode: envMap["FEISHU_CONNECTION_MODE"], } if appID != "" || appSecret != "" { result.Bots = []dto.AgentFeishuBot{ @@ -595,13 +580,6 @@ func firstHermesFeishuBot(bots []dto.AgentFeishuBot) dto.AgentFeishuBot { return bots[0] } -func firstHermesEnvValue(envMap map[string]string, key string, defaultValue string) string { - if envMap[key] != "" { - return envMap[key] - } - return defaultValue -} - func buildHermesWeixinLoginArgs(containerName string) []string { return buildHermesDockerExecCommandArgs( containerName, diff --git a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/dingtalk.vue b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/dingtalk.vue index a9b72b97e..6578276c3 100644 --- a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/dingtalk.vue +++ b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/dingtalk.vue @@ -15,19 +15,9 @@ - - - - {{ t('aiTools.agents.allowFromHelper') }} - {{ t('commons.button.save') }} @@ -63,8 +53,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message'; interface DingTalkForm { clientId: string; clientSecret: string; - dmPolicy: 'pairing' | 'open' | 'allowlist' | 'disabled'; - allowFromText: string; + dmPolicy: 'pairing' | 'open' | 'disabled'; } const { t } = useI18n(); @@ -79,36 +68,12 @@ const form = reactive({ clientId: '', clientSecret: '', dmPolicy: 'pairing', - allowFromText: '', }); -const parseTextList = (value: string): string[] => { - return Array.from( - new Set( - String(value || '') - .split(/\r?\n/) - .map((item) => item.trim()) - .filter(Boolean), - ), - ); -}; - const rules = reactive({ clientId: [Rules.requiredInput], clientSecret: [Rules.requiredInput], dmPolicy: [Rules.requiredSelect], - allowFromText: [ - { - validator: (_rule, value, callback) => { - if (form.dmPolicy === 'allowlist' && parseTextList(String(value || '')).length === 0) { - callback(new Error(t('aiTools.agents.allowFromRequired'))); - return; - } - callback(); - }, - trigger: 'blur', - }, - ], }); const load = async (id: number) => { @@ -116,10 +81,15 @@ const load = async (id: number) => { pairingCode.value = ''; const res = await getAgentDingTalkConfig({ agentId: id }); configured.value = !!res.data?.enabled; + if (!configured.value) { + form.clientId = ''; + form.clientSecret = ''; + form.dmPolicy = 'pairing'; + return; + } form.clientId = res.data?.bots?.[0]?.clientId || ''; form.clientSecret = res.data?.bots?.[0]?.clientSecret || ''; - form.dmPolicy = (res.data?.dmPolicy as DingTalkForm['dmPolicy']) || 'pairing'; - form.allowFromText = (res.data?.allowFrom || []).join('\n'); + form.dmPolicy = res.data?.dmPolicy === 'disabled' ? 'disabled' : res.data?.dmPolicy === 'open' ? 'open' : 'pairing'; }; const save = async () => { @@ -133,7 +103,7 @@ const save = async () => { agentId: agentId.value, enabled: true, dmPolicy: form.dmPolicy, - allowFrom: form.dmPolicy === 'allowlist' ? parseTextList(form.allowFromText) : [], + allowFrom: [], groupPolicy: 'open', groupAllowFrom: [], separateSessionByConversation: true, @@ -211,12 +181,3 @@ defineExpose({ load, }); - - diff --git a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/discord.vue b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/discord.vue index c9913e33b..dc7bc7745 100644 --- a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/discord.vue +++ b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/discord.vue @@ -12,18 +12,8 @@ - - - - {{ t('aiTools.agents.allowFromHelper') }} - @@ -61,8 +51,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message'; interface DiscordForm { token: string; - dmPolicy: 'pairing' | 'open' | 'allowlist'; - allowFromText: string; + dmPolicy: 'pairing' | 'open'; requireMention: boolean; } @@ -76,34 +65,13 @@ const pairingCode = ref(''); const configured = ref(false); const form = reactive({ token: '', - dmPolicy: 'pairing', - allowFromText: '', + dmPolicy: 'open', requireMention: true, }); -const parseTextList = (value: string): string[] => { - return Array.from( - new Set( - value - .split(/\r?\n/) - .map((item) => item.trim()) - .filter(Boolean), - ), - ); -}; - -const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => { - if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) { - callback(); - return; - } - callback(new Error(t('aiTools.agents.allowFromRequired'))); -}; - const rules = reactive({ token: [Rules.requiredInput], dmPolicy: [Rules.requiredSelect], - allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }], }); const load = async (id: number) => { @@ -111,9 +79,14 @@ const load = async (id: number) => { pairingCode.value = ''; const res = await getAgentDiscordConfig({ agentId: id }); configured.value = !!res.data?.enabled; + if (!configured.value) { + form.token = ''; + form.dmPolicy = 'open'; + form.requireMention = true; + return; + } form.token = res.data?.bots?.[0]?.token || ''; - form.dmPolicy = (res.data?.dmPolicy as DiscordForm['dmPolicy']) || 'pairing'; - form.allowFromText = (res.data?.allowFrom || []).join('\n'); + form.dmPolicy = res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open'; form.requireMention = res.data?.requireMention ?? true; }; @@ -124,13 +97,12 @@ const save = async () => { await formRef.value.validate(); saving.value = true; try { - const allowFrom = parseTextList(form.allowFromText); const groupPolicy = form.requireMention ? 'allowlist' : 'open'; await updateAgentDiscordConfig({ agentId: agentId.value, enabled: true, dmPolicy: form.dmPolicy, - allowFrom, + allowFrom: [], requireMention: form.requireMention, groupPolicy, proxy: '', @@ -200,12 +172,3 @@ defineExpose({ load, }); - - diff --git a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/feishu.vue b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/feishu.vue index bb11af585..013bd64a6 100644 --- a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/feishu.vue +++ b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/feishu.vue @@ -13,34 +13,16 @@ - + - - - - - {{ t('commons.button.save') }} @@ -61,7 +43,7 @@ - - diff --git a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/telegram.vue b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/telegram.vue index ad7b7f53c..f14495543 100644 --- a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/telegram.vue +++ b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/telegram.vue @@ -12,18 +12,8 @@ - - - - {{ t('aiTools.agents.allowFromHelper') }} - @@ -61,8 +51,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message'; interface TelegramForm { botToken: string; - dmPolicy: 'pairing' | 'open' | 'allowlist'; - allowFromText: string; + dmPolicy: 'pairing' | 'open'; requireMention: boolean; } @@ -76,34 +65,13 @@ const pairingCode = ref(''); const configured = ref(false); const form = reactive({ botToken: '', - dmPolicy: 'pairing', - allowFromText: '', - requireMention: false, + dmPolicy: 'open', + requireMention: true, }); -const parseTextList = (value: string): string[] => { - return Array.from( - new Set( - value - .split(/\r?\n/) - .map((item) => item.trim()) - .filter(Boolean), - ), - ); -}; - -const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => { - if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) { - callback(); - return; - } - callback(new Error(t('aiTools.agents.allowFromRequired'))); -}; - const rules = reactive({ botToken: [Rules.requiredInput], dmPolicy: [Rules.requiredSelect], - allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }], }); const load = async (id: number) => { @@ -111,10 +79,15 @@ const load = async (id: number) => { pairingCode.value = ''; const res = await getAgentTelegramConfig({ agentId: id }); configured.value = !!res.data?.enabled; + if (!configured.value) { + form.botToken = ''; + form.dmPolicy = 'open'; + form.requireMention = true; + return; + } form.botToken = res.data?.bots?.[0]?.botToken || ''; - form.dmPolicy = (res.data?.dmPolicy as TelegramForm['dmPolicy']) || 'pairing'; - form.allowFromText = (res.data?.allowFrom || []).join('\n'); - form.requireMention = res.data?.requireMention || false; + form.dmPolicy = res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open'; + form.requireMention = res.data?.requireMention ?? true; }; const save = async () => { @@ -124,13 +97,12 @@ const save = async () => { await formRef.value.validate(); saving.value = true; try { - const allowFrom = parseTextList(form.allowFromText); const groupPolicy = form.requireMention ? 'allowlist' : 'open'; await updateAgentTelegramConfig({ agentId: agentId.value, enabled: true, dmPolicy: form.dmPolicy, - allowFrom, + allowFrom: [], requireMention: form.requireMention, groupPolicy, groupAllowFrom: [], @@ -205,12 +177,3 @@ defineExpose({ load, }); - - diff --git a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/wecom.vue b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/wecom.vue index dd05ff7a3..d28c8ab9f 100644 --- a/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/wecom.vue +++ b/frontend/src/views/ai/agents/agent/config/tabs/channels/hermes/wecom.vue @@ -15,39 +15,15 @@ - - - - {{ t('aiTools.agents.allowFromHelper') }} - - - - - {{ t('aiTools.agents.groupAllowFromHelper') }} - {{ t('commons.button.save') }} @@ -81,10 +57,8 @@ import { Rules } from '@/global/form-rules'; import { MsgSuccess, MsgWarning } from '@/utils/message'; interface WecomForm { - dmPolicy: 'pairing' | 'open' | 'allowlist' | 'disabled'; - allowFromText: string; - groupPolicy: 'open' | 'allowlist' | 'disabled'; - groupAllowFromText: string; + dmPolicy: 'pairing' | 'open' | 'disabled'; + groupPolicy: 'open' | 'disabled'; botId: string; secret: string; } @@ -98,46 +72,15 @@ const agentId = ref(0); const pairingCode = ref(''); const configured = ref(false); const form = reactive({ - dmPolicy: 'pairing', - allowFromText: '', + dmPolicy: 'open', groupPolicy: 'open', - groupAllowFromText: '', botId: '', secret: '', }); -const parseTextList = (value: string): string[] => { - return Array.from( - new Set( - String(value || '') - .split(/\r?\n/) - .map((item) => item.trim()) - .filter(Boolean), - ), - ); -}; - -const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => { - if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) { - callback(); - return; - } - callback(new Error(t('aiTools.agents.allowFromRequired'))); -}; - -const validateGroupAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => { - if (form.groupPolicy !== 'allowlist' || parseTextList(value).length > 0) { - callback(); - return; - } - callback(new Error(t('aiTools.agents.allowFromRequired'))); -}; - const rules = reactive({ dmPolicy: [Rules.requiredSelect], - allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }], groupPolicy: [Rules.requiredSelect], - groupAllowFromText: [{ validator: validateGroupAllowFrom, trigger: 'blur' }], botId: [Rules.requiredInput], secret: [Rules.requiredInput], }); @@ -147,10 +90,16 @@ const load = async (id: number) => { pairingCode.value = ''; const res = await getAgentWecomConfig({ agentId: id }); configured.value = !!res.data?.enabled; - form.dmPolicy = (res.data?.dmPolicy as WecomForm['dmPolicy']) || 'pairing'; - form.allowFromText = (res.data?.allowFrom || []).join('\n'); - form.groupPolicy = (res.data?.groupPolicy as WecomForm['groupPolicy']) || 'open'; - form.groupAllowFromText = (res.data?.groupAllowFrom || []).join('\n'); + if (!configured.value) { + form.dmPolicy = 'open'; + form.groupPolicy = 'open'; + form.botId = ''; + form.secret = ''; + return; + } + form.dmPolicy = + res.data?.dmPolicy === 'disabled' ? 'disabled' : res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open'; + form.groupPolicy = res.data?.groupPolicy === 'disabled' ? 'disabled' : 'open'; form.botId = res.data?.botId || ''; form.secret = res.data?.secret || ''; }; @@ -166,9 +115,9 @@ const save = async () => { agentId: agentId.value, enabled: true, dmPolicy: form.dmPolicy, - allowFrom: parseTextList(form.allowFromText), + allowFrom: [], groupPolicy: form.groupPolicy, - groupAllowFrom: parseTextList(form.groupAllowFromText), + groupAllowFrom: [], botId: form.botId, secret: form.secret, }); @@ -231,12 +180,3 @@ defineExpose({ load, }); - -