Skip to content

Commit e32fc45

Browse files
fix(diagnostics): clear stale session activity
1 parent df54898 commit e32fc45

4 files changed

Lines changed: 49 additions & 5 deletions

File tree

src/auto-reply/reply/session-reset-cleanup.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,32 @@ describe("clearSessionResetRuntimeState", () => {
106106
).toBe("tool_call");
107107
});
108108

109+
it("clears key-only diagnostic activity for explicitly retired session keys", () => {
110+
markDiagnosticToolStartedForTest({
111+
sessionKey: "agent:main:telegram:chat-1",
112+
runId: "run-old-key-only",
113+
toolName: "bash",
114+
toolCallId: "tool-old-key-only",
115+
});
116+
117+
const result = clearSessionResetRuntimeState({
118+
sessionKeys: ["agent:main:telegram:chat-1"],
119+
retiredSessionKeys: ["agent:main:telegram:chat-1"],
120+
});
121+
122+
expect(result.diagnosticActivityCleared).toEqual({
123+
activeEmbeddedRunsCleared: 0,
124+
activeToolsCleared: 1,
125+
activeModelCallsCleared: 0,
126+
activitiesCleared: 1,
127+
});
128+
expect(
129+
getDiagnosticSessionActivitySnapshot({
130+
sessionKey: "agent:main:telegram:chat-1",
131+
}).activeWorkKind,
132+
).toBeUndefined();
133+
});
134+
109135
it("can defer retired-session diagnostic cleanup until the active run settles", () => {
110136
markDiagnosticEmbeddedRunStarted({
111137
sessionId: "session-active",

src/auto-reply/reply/session-reset-cleanup.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ export type ClearSessionResetRuntimeStateResult = ClearSessionQueueResult & {
1313
export type ClearSessionResetRuntimeStateParams = {
1414
sessionKeys: Array<string | undefined>;
1515
retiredSessionIds?: Array<string | undefined>;
16+
retiredSessionKeys?: Array<string | undefined>;
1617
clearRetiredDiagnosticActivity?: boolean;
1718
};
1819

20+
type RetiredSessionDiagnosticRef = {
21+
sessionId?: string;
22+
sessionKey?: string;
23+
};
24+
1925
const emptyDiagnosticActivityResult = (): ClearDiagnosticSessionActivityResult => ({
2026
activeEmbeddedRunsCleared: 0,
2127
activeToolsCleared: 0,
@@ -24,11 +30,13 @@ const emptyDiagnosticActivityResult = (): ClearDiagnosticSessionActivityResult =
2430
});
2531

2632
export function clearRetiredSessionDiagnosticActivity(
27-
retiredSessionIds: Array<string | undefined>,
33+
retiredSessionRefs: Array<RetiredSessionDiagnosticRef | string | undefined>,
2834
): ClearDiagnosticSessionActivityResult {
29-
return retiredSessionIds.reduce<ClearDiagnosticSessionActivityResult>((acc, key) => {
35+
return retiredSessionRefs.reduce<ClearDiagnosticSessionActivityResult>((acc, ref) => {
36+
const sessionRef = typeof ref === "string" ? { sessionId: ref } : ref;
3037
const result = clearDiagnosticSessionActivity({
31-
sessionId: key,
38+
sessionId: sessionRef?.sessionId,
39+
sessionKey: sessionRef?.sessionKey,
3240
reason: "session_reset",
3341
});
3442
acc.activeEmbeddedRunsCleared += result.activeEmbeddedRunsCleared;
@@ -42,6 +50,7 @@ export function clearRetiredSessionDiagnosticActivity(
4250
export function clearSessionResetRuntimeState({
4351
sessionKeys,
4452
retiredSessionIds = [],
53+
retiredSessionKeys = [],
4554
clearRetiredDiagnosticActivity = true,
4655
}: ClearSessionResetRuntimeStateParams): ClearSessionResetRuntimeStateResult {
4756
const cleared = clearSessionQueues([...sessionKeys, ...retiredSessionIds]);
@@ -52,7 +61,10 @@ export function clearSessionResetRuntimeState({
5261
}
5362

5463
const diagnosticActivityCleared = clearRetiredDiagnosticActivity
55-
? clearRetiredSessionDiagnosticActivity(retiredSessionIds)
64+
? clearRetiredSessionDiagnosticActivity([
65+
...retiredSessionIds.map((sessionId) => ({ sessionId })),
66+
...retiredSessionKeys.map((sessionKey) => ({ sessionKey })),
67+
])
5668
: emptyDiagnosticActivityResult();
5769

5870
return {

src/auto-reply/reply/session.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ export async function initSessionState(params: {
489489
clearSessionResetRuntimeState({
490490
sessionKeys: [sessionKey],
491491
retiredSessionIds: [previousSessionEntry.sessionId],
492+
retiredSessionKeys: [sessionKey],
492493
});
493494
}
494495

src/gateway/session-reset-service.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,12 @@ async function ensureSessionRuntimeCleanup(params: {
396396
const ended = await waitForEmbeddedAgentRunEnd(params.sessionId, 15_000);
397397
clearBootstrapSnapshot(params.target.canonicalKey);
398398
if (ended) {
399-
clearRetiredSessionDiagnosticActivity([params.sessionId]);
399+
clearRetiredSessionDiagnosticActivity([
400+
{
401+
sessionId: params.sessionId,
402+
sessionKey: params.target.canonicalKey,
403+
},
404+
]);
400405
await retireSessionMcpRuntime({
401406
sessionId: params.sessionId,
402407
reason: "gateway-session-cleanup",

0 commit comments

Comments
 (0)