You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
dash: model the per-wait ping plan in the keep-alive calculator and recommendation #868
The dashboard's keep-alive calculator and recommendation model a fixed ping count (K) per idle span. Since #867, the live proxy picks the count from what the thread waits for (#858). The panel labels its numbers as the "fixed K (plan off)" model. So the figures a manager sees are not the policy that runs.
What we found
pingSpans (dash/keepalive.go) selects spans by turn >= 1 AND prefix >= ? and charges maxPings or PingsPerSpan(gap, idle, maxPings) per span.
The live plan (keepalive/waitplan.go, Policy.WaitPings) gives:
Read each span's wait cause and tool history from requests: stop_reason, waiting_for, wait_tool, open_background, open_teammate, and whether the thread called a tool before.
Apply the plan per span through the same function the keeper uses (Policy.WaitPings and the no-tool rule). Do not copy the rule.
Give the calculator a current rung again, for the live plan. Let the recommendation compare "plan on" with fixed-K rungs.
Add a test that pins the dashboard model to the keeper's plan, so they cannot drift apart.
Data dependence: metadata only. It uses the same columns the proxy already writes.
This changes what the dashboard shows, not what the proxy does.
Open questions
For an expiry, the previous request's wait cause decides the plan. Is it always on the same thread row in requests, or does a subagent's row need a join?
Activity
fix(dash): model the 1-hour tier, retry waits and the effective plan (#…
fix(proxy): a covering strategy decides the dashboard plan before a c…