fix(cron): publish agent response to bus after ProcessDirectWithChannel

When a cron job with deliver=false runs, the agent response was silently
discarded with a misleading comment "Will be sent by AgentLoop". The Run
loop is never involved in cron execution — ProcessDirectWithChannel bypasses
it entirely. As a result, Karen's response to scheduled tasks was computed
but never delivered to Slack (or any other channel).

Fix: explicitly publish the response via msgBus.PublishOutbound after
ProcessDirectWithChannel returns, consistent with how command and
deliver=true jobs already handle their output.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Eric Jacksch 2026-03-20 10:46:12 -04:00
parent de1342f7fe
commit 9cff725226

View file

@ -341,7 +341,14 @@ func (t *CronTool) ExecuteJob(ctx context.Context, job *cron.CronJob) string {
return fmt.Sprintf("Error: %v", err)
}
// Response is automatically sent via MessageBus by AgentLoop
_ = response // Will be sent by AgentLoop
if response != "" {
pubCtx, pubCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer pubCancel()
t.msgBus.PublishOutbound(pubCtx, bus.OutboundMessage{
Channel: channel,
ChatID: chatID,
Content: response,
})
}
return "ok"
}