





















@@ -102,9 +102,62 @@ describe("classifySessionAttention", () => {
102102recoveryEligible: false,
103103},
104104},
105-])("$name", ({ activity, expected, queueDepth }) => {
105+{
106+name: "idle queued stale model activity without active embedded run",
107+state: "idle" as const,
108+queueDepth: 1,
109+activity: {
110+activeWorkKind: "model_call" as const,
111+hasActiveEmbeddedRun: false,
112+lastProgressAgeMs: 31_000,
113+lastProgressReason: "model_call:started",
114+},
115+expected: {
116+eventType: "session.stuck",
117+reason: "queued_work_without_active_run",
118+classification: "stale_session_state",
119+recoveryEligible: true,
120+},
121+},
122+{
123+name: "idle queued stale tool_call activity without active embedded run",
124+state: "idle" as const,
125+queueDepth: 1,
126+activity: {
127+activeWorkKind: "tool_call" as const,
128+hasActiveEmbeddedRun: false,
129+activeToolAgeMs: 31_000,
130+lastProgressAgeMs: 31_000,
131+lastProgressReason: "tool:shell:started",
132+},
133+expected: {
134+eventType: "session.stuck",
135+reason: "queued_work_without_active_run",
136+classification: "stale_session_state",
137+recoveryEligible: true,
138+},
139+},
140+{
141+name: "processing session with orphaned activity is not recoverable",
142+state: "processing" as const,
143+queueDepth: 1,
144+activity: {
145+activeWorkKind: "model_call" as const,
146+hasActiveEmbeddedRun: false,
147+lastProgressAgeMs: 31_000,
148+},
149+expected: {
150+eventType: "session.stalled",
151+reason: "active_work_without_progress",
152+classification: "stalled_agent_run",
153+activeWorkKind: "model_call",
154+recoveryEligible: false,
155+},
156+},
157+])("$name", ({ activity, expected, queueDepth, state }) => {
106158expect(
107159classifySessionAttention({
160+ state,
108161 queueDepth,
109162 activity,
110163staleMs: 30_000,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。