package loop import ( "context" "git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/capacity" ) // capStateKey 是每 Run capacity 状态累加器的 context key。 type capStateKey struct{} // capStateAccum 持有一个 Run 的可变 capacity 状态,使该状态 // 能跨多步工具循环演进(quiet→awake→full),且不在并发 run 之间 // 泄漏。它挂在 Run 顶部播种的 context 上。 type capStateAccum struct { state capacity.State } // withCapState 返回携带 acc 的 context。 func withCapState(ctx context.Context, acc *capStateAccum) context.Context { return context.WithValue(ctx, capStateKey{}, acc) } // capState 返回 ctx 上的累加器;未播种时返回一个全新的 quiet // 累加器(为在 Run 之外调用 toolSchemas 的调用方提供的防御性兜底, // 此处状态本就不应持久化)。 func capState(ctx context.Context) *capStateAccum { if acc, ok := ctx.Value(capStateKey{}).(*capStateAccum); ok { return acc } return &capStateAccum{state: capacity.StateQuiet} }