schedules: schedules,
clock: clock,
logger: logger,
+ openChild: func(ctx context.Context, child *Agent) (*DaemonAgent, error) {
+ return openDaemonAgent(ctx, child, address, auth, compactor, clock, logger.With("name", child.config.Name))
+ },
}, nil
}
schedules *Schedules
clock func() time.Time
logger *slog.Logger
+ openChild func(context.Context, *Agent) (*DaemonAgent, error)
}
// Loop makes the turn loop with its event destination. Only the root has a
// WhatsApp link. Child events stay with their own logs.
func (a *DaemonAgent) Loop(whatsapp *WhatsApp, notify func(Event)) (*TurnLoop, error) {
- return newTurnLoop(a.agent, a.memory, a.subagents, whatsapp, a.schedules, a.client, a.clock, a.logger, notify)
+ loop, err := newTurnLoop(a.agent, a.memory, a.subagents, whatsapp, a.schedules, a.client, a.clock, a.logger, notify)
+ if err != nil {
+ return nil, err
+ }
+
+ loop.openChild = a.openChild
+
+ return loop, nil
}
// Close flushes and closes the subagents and the memory.