返回 DeepSeek-Reasonix
nested_sink.go
根目录 / internal / agent / nested_sink.go
1 package agent
2
3 import (
4 "reasonix/internal/event"
5 )
6
7 // nestedSink is the event view a fleet or parallel_tasks item runs under: tool
8 // events are re-parented, usage is attributed to the sub-agent, everything else
9 // is dropped. It is a type rather than a func sink because optional sink
10 // capabilities are forwarded by method, and a bare func sink swallowed every
11 // delegation audit a fleet child produced.
12 type nestedSink struct {
13 // Audits are accounting, not presentation: the embedded forwarder passes
14 // every optional capability straight through to the parent.
15 event.AuditForwarder
16 parentID string
17 parent event.Sink
18 }
19
20 func (s nestedSink) Emit(e event.Event) {
21 switch e.Kind {
22 case event.ToolDispatch, event.ToolResult, event.ToolProgress, event.ToolResultPreview:
23 e.Tool.ParentID = s.parentID
24 e.Tool.ID = s.parentID + "/" + e.Tool.ID
25 s.parent.Emit(e)
26 case event.Usage:
27 if e.UsageSource == "" {
28 e.UsageSource = event.UsageSourceSubagent
29 }
30 s.parent.Emit(e)
31 }
32 }
33
33 lines GO