diff --git a/cmd/clawgo/cmd_gateway.go b/cmd/clawgo/cmd_gateway.go index 79f95e6..6e62448 100644 --- a/cmd/clawgo/cmd_gateway.go +++ b/cmd/clawgo/cmd_gateway.go @@ -938,6 +938,21 @@ func buildHeartbeatService(cfg *config.Config, msgBus *bus.MessageBus) *heartbea func buildAutonomyEngine(cfg *config.Config, msgBus *bus.MessageBus) *autonomy.Engine { a := cfg.Agents.Defaults.Autonomy + notifyAllowFrom := []string{} + switch strings.ToLower(a.NotifyChannel) { + case "telegram": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.Telegram.AllowFrom...) + case "feishu": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.Feishu.AllowFrom...) + case "whatsapp": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.WhatsApp.AllowFrom...) + case "discord": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.Discord.AllowFrom...) + case "qq": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.QQ.AllowFrom...) + case "dingtalk": + notifyAllowFrom = append(notifyAllowFrom, cfg.Channels.DingTalk.AllowFrom...) + } return autonomy.NewEngine(autonomy.Options{ Enabled: a.Enabled, TickIntervalSec: a.TickIntervalSec, @@ -959,6 +974,6 @@ func buildAutonomyEngine(cfg *config.Config, msgBus *bus.MessageBus) *autonomy.E Workspace: cfg.WorkspacePath(), DefaultNotifyChannel: a.NotifyChannel, DefaultNotifyChatID: a.NotifyChatID, - NotifyAllowChats: a.NotifyAllowChats, + NotifyAllowFrom: notifyAllowFrom, }, msgBus) } diff --git a/config.example.json b/config.example.json index 40444e8..e75d04d 100644 --- a/config.example.json +++ b/config.example.json @@ -29,8 +29,7 @@ "waiting_resume_debounce_sec": 5, "allowed_task_keywords": [], "notify_channel": "", - "notify_chat_id": "", - "notify_allow_chats": [] + "notify_chat_id": "" }, "texts": { "no_response_fallback": "I've completed processing but have no response to give.", diff --git a/pkg/autonomy/engine.go b/pkg/autonomy/engine.go index 803ea8d..2276620 100644 --- a/pkg/autonomy/engine.go +++ b/pkg/autonomy/engine.go @@ -29,7 +29,7 @@ type Options struct { Workspace string DefaultNotifyChannel string DefaultNotifyChatID string - NotifyAllowChats []string + NotifyAllowFrom []string NotifyCooldownSec int NotifySameReasonCooldownSec int QuietHours string @@ -643,9 +643,9 @@ func (e *Engine) shouldNotify(key string, reason string) bool { if strings.TrimSpace(e.opts.DefaultNotifyChannel) == "" || strings.TrimSpace(e.opts.DefaultNotifyChatID) == "" { return false } - if len(e.opts.NotifyAllowChats) > 0 { + if len(e.opts.NotifyAllowFrom) > 0 { allowed := false - for _, c := range e.opts.NotifyAllowChats { + for _, c := range e.opts.NotifyAllowFrom { if c == e.opts.DefaultNotifyChatID { allowed = true break diff --git a/pkg/autonomy/engine_notify_allowlist_test.go b/pkg/autonomy/engine_notify_allowlist_test.go index 35ea282..f4bee8f 100644 --- a/pkg/autonomy/engine_notify_allowlist_test.go +++ b/pkg/autonomy/engine_notify_allowlist_test.go @@ -2,11 +2,11 @@ package autonomy import "testing" -func TestShouldNotify_RespectsNotifyAllowChats(t *testing.T) { +func TestShouldNotify_RespectsNotifyAllowFrom(t *testing.T) { e := &Engine{opts: Options{ DefaultNotifyChannel: "telegram", DefaultNotifyChatID: "chat-1", - NotifyAllowChats: []string{"chat-2", "chat-3"}, + NotifyAllowFrom: []string{"chat-2", "chat-3"}, NotifyCooldownSec: 1, NotifySameReasonCooldownSec: 1, }} @@ -14,7 +14,7 @@ func TestShouldNotify_RespectsNotifyAllowChats(t *testing.T) { t.Fatalf("expected notify to be blocked when chat not in allowlist") } - e.opts.NotifyAllowChats = []string{"chat-1"} + e.opts.NotifyAllowFrom = []string{"chat-1"} if !e.shouldNotify("k2", "") { t.Fatalf("expected notify to pass when chat in allowlist") } diff --git a/pkg/config/config.go b/pkg/config/config.go index 8275250..faa1246 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -61,7 +61,6 @@ type AutonomyConfig struct { AllowedTaskKeywords []string `json:"allowed_task_keywords" env:"CLAWGO_AGENTS_DEFAULTS_AUTONOMY_ALLOWED_TASK_KEYWORDS"` NotifyChannel string `json:"notify_channel" env:"CLAWGO_AGENTS_DEFAULTS_AUTONOMY_NOTIFY_CHANNEL"` NotifyChatID string `json:"notify_chat_id" env:"CLAWGO_AGENTS_DEFAULTS_AUTONOMY_NOTIFY_CHAT_ID"` - NotifyAllowChats []string `json:"notify_allow_chats" env:"CLAWGO_AGENTS_DEFAULTS_AUTONOMY_NOTIFY_ALLOW_CHATS"` } type AgentTextConfig struct { @@ -333,7 +332,6 @@ func DefaultConfig() *Config { AllowedTaskKeywords: []string{}, NotifyChannel: "", NotifyChatID: "", - NotifyAllowChats: []string{}, }, Texts: AgentTextConfig{ NoResponseFallback: "I've completed processing but have no response to give.",