MCPcopy Index your code
hub / github.com/docker/docker-agent / drainAndEmitSteered

Method drainAndEmitSteered

pkg/runtime/loop.go:92–114  ·  view source on GitHub ↗

drainAndEmitSteered drains all messages from the steer queue and injects them into the session as individual user messages. When multiple messages are drained, a "\n" is appended to the content of every non-last message. Some chat templates concatenate consecutive user messages without a separator b

(ctx context.Context, sess *session.Session, a *agent.Agent, events EventSink)

Source from the content-addressed store, hash-verified

90// Returns drained=true with messageCountBefore set when any messages
91// were drained and emitted; otherwise drained=false.
92func (r *LocalRuntime) drainAndEmitSteered(ctx context.Context, sess *session.Session, a *agent.Agent, events EventSink) steerResult {
93 steered := r.steerQueue.Drain(ctx)
94 if len(steered) == 0 {
95 return steerResult{}
96 }
97 messageCountBefore := len(sess.OwnMessages())
98 contents := make([]string, 0, len(steered))
99 for i, sm := range steered {
100 contents = append(contents, sm.Content)
101 if i < len(steered)-1 {
102 sm = appendNewlineToQueuedMessage(sm)
103 }
104 r.appendSteerAndEmit(sess, sm, events)
105 }
106 stop, stopMsg, ctxMsgs := r.executeUserSteeringMessagesSubmitHooks(ctx, sess, a, contents, events)
107 return steerResult{
108 drained: true,
109 messageCountBefore: messageCountBefore,
110 stop: stop,
111 stopMsg: stopMsg,
112 contextMsgs: ctxMsgs,
113 }
114}
115
116// steerResult is the outcome of a drainAndEmitSteered call: whether any
117// messages were drained, the pre-drain message count (for

Callers 4

runStreamLoopMethod · 0.95
runTurnMethod · 0.95

Calls 5

appendSteerAndEmitMethod · 0.95
OwnMessagesMethod · 0.80
DrainMethod · 0.65