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,
});
-
-