Structural observability events, layered onto LoopEvent (additive,
not a replacement, so nothing already consuming LoopEvents breaks). Emitted
at the same call sites loop.ts already defines: around each
Provider.generate/stream call, around the existing parallel tool
dispatch, around the existing onToolApproval hook, and once per
runAgentLoop() call (and again around brick.ask()'s own invocation of
it, annotated with a brickName).
Structural observability events, layered onto LoopEvent (additive, not a replacement, so nothing already consuming
LoopEvents breaks). Emitted at the same call sitesloop.tsalready defines: around eachProvider.generate/streamcall, around the existing parallel tool dispatch, around the existingonToolApprovalhook, and once perrunAgentLoop()call (and again aroundbrick.ask()'s own invocation of it, annotated with abrickName).