From 6010d074f754d142ee1134416bcd9a4d5290a3db Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 1 Oct 2026 06:05:51 -0700 Subject: [PATCH] refactor: remove unused session alias argument (#161135) * refactor: remove unused session alias argument * test(gateway): show heartbeat follow-up failure context --- src/agents/code-mode-swarm.runtime.ts | 4 ++-- .../subagents/registry/subagent-active-context.ts | 8 ++------ .../subagents/registry/subagent-control-scope.ts | 8 ++------ src/agents/subagents/spawn/acp-spawn-requester.ts | 8 ++------ .../subagents/spawn/subagent-spawn-ownership.ts | 12 ++---------- src/agents/tools/agents-list-tool.ts | 8 ++------ src/agents/tools/cron-tool-context.ts | 4 ++-- src/agents/tools/cron-tool.ts | 8 ++++---- src/agents/tools/session-status-session-resolve.ts | 1 - src/agents/tools/sessions-access.ts | 6 +----- src/agents/tools/sessions-list-tool.ts | 12 ++---------- src/agents/tools/sessions-resolution.test.ts | 13 ++++--------- src/agents/tools/sessions-resolution.ts | 2 -- src/auto-reply/reply/abort-operation.ts | 4 ++-- src/auto-reply/reply/commands-subagents/shared.ts | 4 ++-- src/auto-reply/reply/explicit-steer-routing.ts | 4 ++-- src/gateway/session-swarm-summary.test.ts | 8 ++------ src/status/status-text.ts | 4 ++-- 18 files changed, 35 insertions(+), 83 deletions(-) diff --git a/src/agents/code-mode-swarm.runtime.ts b/src/agents/code-mode-swarm.runtime.ts index 31cd4fe07908..c95fc4193e4e 100644 --- a/src/agents/code-mode-swarm.runtime.ts +++ b/src/agents/code-mode-swarm.runtime.ts @@ -37,8 +37,8 @@ function resolveCodeModeRequesterSessionKey(ctx: ToolSearchToolContext): string if (!sessionKey) { throw new ToolInputError("code mode swarm globals require session and run identity."); } - const { mainKey, alias } = resolveMainSessionAlias(ctx.runtimeConfig ?? ctx.config ?? {}); - return resolveInternalSessionKey({ key: sessionKey, alias, mainKey }); + const { alias } = resolveMainSessionAlias(ctx.runtimeConfig ?? ctx.config ?? {}); + return resolveInternalSessionKey({ key: sessionKey, alias }); } function resolveCodeModeSwarmGroupId(ctx: ToolSearchToolContext): string { diff --git a/src/agents/subagents/registry/subagent-active-context.ts b/src/agents/subagents/registry/subagent-active-context.ts index fdb44ba68ca7..af50c1034b6d 100644 --- a/src/agents/subagents/registry/subagent-active-context.ts +++ b/src/agents/subagents/registry/subagent-active-context.ts @@ -80,12 +80,8 @@ export async function buildActiveSubagentRuntimeContext(params: { if (!rawControllerSessionKey) { return undefined; } - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); - const controllerSessionKey = resolveInternalSessionKey({ - key: rawControllerSessionKey, - alias, - mainKey, - }); + const { alias } = resolveMainSessionAlias(params.cfg); + const controllerSessionKey = resolveInternalSessionKey({ key: rawControllerSessionKey, alias }); const agentId = params.controllerAgentId ?? parseAgentSessionKey(controllerSessionKey)?.agentId; if (!agentId) { return undefined; diff --git a/src/agents/subagents/registry/subagent-control-scope.ts b/src/agents/subagents/registry/subagent-control-scope.ts index 27e03b8d1113..3aa34b98cbff 100644 --- a/src/agents/subagents/registry/subagent-control-scope.ts +++ b/src/agents/subagents/registry/subagent-control-scope.ts @@ -51,13 +51,9 @@ export function resolveSubagentControllerIdentity(params: { agentSessionKey?: string; agentId?: string; }): Omit { - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); + const { alias } = resolveMainSessionAlias(params.cfg); const callerRaw = params.agentSessionKey?.trim() || alias; - const callerSessionKey = resolveInternalSessionKey({ - key: callerRaw, - alias, - mainKey, - }); + const callerSessionKey = resolveInternalSessionKey({ key: callerRaw, alias }); const controllerAgentId = resolveSessionAgentId({ config: params.cfg, sessionKey: callerSessionKey, diff --git a/src/agents/subagents/spawn/acp-spawn-requester.ts b/src/agents/subagents/spawn/acp-spawn-requester.ts index 0ef9c4a5194f..f9db50fa42a7 100644 --- a/src/agents/subagents/spawn/acp-spawn-requester.ts +++ b/src/agents/subagents/spawn/acp-spawn-requester.ts @@ -77,14 +77,10 @@ export function resolveRequesterInternalSessionKey(params: { cfg: OpenClawConfig; requesterSessionKey?: string; }): string { - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); + const { alias } = resolveMainSessionAlias(params.cfg); const requesterSessionKey = normalizeOptionalString(params.requesterSessionKey); return requesterSessionKey - ? resolveInternalSessionKey({ - key: requesterSessionKey, - alias, - mainKey, - }) + ? resolveInternalSessionKey({ key: requesterSessionKey, alias }) : alias; } diff --git a/src/agents/subagents/spawn/subagent-spawn-ownership.ts b/src/agents/subagents/spawn/subagent-spawn-ownership.ts index d3cd2357aefa..e79b352f2280 100644 --- a/src/agents/subagents/spawn/subagent-spawn-ownership.ts +++ b/src/agents/subagents/spawn/subagent-spawn-ownership.ts @@ -13,19 +13,11 @@ export function resolveSubagentSpawnOwnership(params: { }) { const { mainKey, alias } = resolveMainSessionAlias(params.cfg); const controllerSessionKey = params.agentSessionKey - ? resolveInternalSessionKey({ - key: params.agentSessionKey, - alias, - mainKey, - }) + ? resolveInternalSessionKey({ key: params.agentSessionKey, alias }) : alias; const completionOwnerKey = params.completionOwnerKey?.trim(); const completionRequesterSessionKey = completionOwnerKey - ? resolveInternalSessionKey({ - key: completionOwnerKey, - alias, - mainKey, - }) + ? resolveInternalSessionKey({ key: completionOwnerKey, alias }) : controllerSessionKey; // Completion ownership can differ from control ownership when a parent proxies the spawn. const completionRequesterDisplayKey = resolveDisplaySessionKey({ diff --git a/src/agents/tools/agents-list-tool.ts b/src/agents/tools/agents-list-tool.ts index 494abc921aad..7af6ae68d08d 100644 --- a/src/agents/tools/agents-list-tool.ts +++ b/src/agents/tools/agents-list-tool.ts @@ -65,14 +65,10 @@ export function createAgentsListTool(opts?: { outputSchema: AgentsListOutputSchema, execute: async () => { const cfg = getRuntimeConfig(); - const { mainKey, alias } = resolveMainSessionAlias(cfg); + const { alias } = resolveMainSessionAlias(cfg); const requesterInternalKey = typeof opts?.agentSessionKey === "string" && opts.agentSessionKey.trim() - ? resolveInternalSessionKey({ - key: opts.agentSessionKey, - alias, - mainKey, - }) + ? resolveInternalSessionKey({ key: opts.agentSessionKey, alias }) : alias; const requesterAgentId = resolveSessionAgentIds({ config: cfg, diff --git a/src/agents/tools/cron-tool-context.ts b/src/agents/tools/cron-tool-context.ts index 9c25d4c49699..522a8c234035 100644 --- a/src/agents/tools/cron-tool-context.ts +++ b/src/agents/tools/cron-tool-context.ts @@ -51,8 +51,8 @@ export async function buildReminderContextLines(params: { return []; } const cfg = getRuntimeConfig(); - const { mainKey, alias } = resolveMainSessionAlias(cfg); - const resolvedKey = resolveInternalSessionKey({ key: sessionKey, alias, mainKey }); + const { alias } = resolveMainSessionAlias(cfg); + const resolvedKey = resolveInternalSessionKey({ key: sessionKey, alias }); try { const res = await params.callGatewayTool<{ messages: Array }>( "chat.history", diff --git a/src/agents/tools/cron-tool.ts b/src/agents/tools/cron-tool.ts index 446c204acc84..9a4b27593d4c 100644 --- a/src/agents/tools/cron-tool.ts +++ b/src/agents/tools/cron-tool.ts @@ -490,9 +490,9 @@ export function createCronTool(opts?: CronToolOptions, deps?: CronToolDeps): Any : opts?.creatorToolAllowlistCaptureRef; capCronJobToolsAllowOnCreate(job, creatorToolAllowlist); assertInheritedCronToolCaptureReady(job, creatorToolAllowlistCaptureRef); - const { mainKey, alias } = resolveMainSessionAlias(runtimeConfig); + const { alias } = resolveMainSessionAlias(runtimeConfig); const resolvedSessionKey = opts?.agentSessionKey - ? resolveInternalSessionKey({ key: opts.agentSessionKey, alias, mainKey }) + ? resolveInternalSessionKey({ key: opts.agentSessionKey, alias }) : undefined; const sessionTarget = normalizeLowercaseStringOrEmpty(job.sessionTarget); if (!("sessionKey" in job) && resolvedSessionKey && sessionTarget !== "isolated") { @@ -678,11 +678,11 @@ export function createCronTool(opts?: CronToolOptions, deps?: CronToolDeps): Any : "next-heartbeat"; // An omitted target wakes the originating conversation, not the // heartbeat lane. Gateway owns target validation and authorization. - const { mainKey, alias } = resolveMainSessionAlias(runtimeConfig); + const { alias } = resolveMainSessionAlias(runtimeConfig); const explicitSessionKey = readToolStringParam(params, "sessionKey"); const explicitAgentId = readToolStringParam(params, "agentId"); const inferredSessionKey = opts?.agentSessionKey - ? resolveInternalSessionKey({ key: opts.agentSessionKey, alias, mainKey }) + ? resolveInternalSessionKey({ key: opts.agentSessionKey, alias }) : undefined; const sessionKey = explicitSessionKey ?? inferredSessionKey; // Pair an explicit session with its own agent; caller defaults must diff --git a/src/agents/tools/session-status-session-resolve.ts b/src/agents/tools/session-status-session-resolve.ts index a42fd7dc8e78..57bc1c603bff 100644 --- a/src/agents/tools/session-status-session-resolve.ts +++ b/src/agents/tools/session-status-session-resolve.ts @@ -27,7 +27,6 @@ export function resolveSessionStatusEntry(params: { const internal = resolveInternalSessionKey({ key: keyRaw, alias: params.alias, - mainKey: params.mainKey, requesterInternalKey: params.requesterInternalKey, }); diff --git a/src/agents/tools/sessions-access.ts b/src/agents/tools/sessions-access.ts index 4fb4ff6ddabf..847e69b92db4 100644 --- a/src/agents/tools/sessions-access.ts +++ b/src/agents/tools/sessions-access.ts @@ -330,11 +330,7 @@ export function resolveSandboxedSessionToolContext(params: { const visibility = resolveSandboxSessionToolsVisibility(params.cfg); const requesterSessionKey = normalizeOptionalString(params.agentSessionKey); const requesterInternalKey = requesterSessionKey - ? resolveInternalSessionKey({ - key: requesterSessionKey, - alias, - mainKey, - }) + ? resolveInternalSessionKey({ key: requesterSessionKey, alias }) : undefined; const effectiveRequesterKey = requesterInternalKey ?? alias; const restrictToSpawned = diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index 730aa391e447..12a71a261e2f 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -515,20 +515,12 @@ export function createSessionsListTool(opts?: { updatedAt: typeof row.updatedAt === "number" ? row.updatedAt : 0, }, sessionId, - sessionKey: resolveInternalSessionKey({ - key, - alias, - mainKey, - }), + sessionKey: resolveInternalSessionKey({ key, alias }), agentId: resolvedAgentId, }); } if (messageLimit > 0) { - const resolvedKey = resolveInternalSessionKey({ - key, - alias, - mainKey, - }); + const resolvedKey = resolveInternalSessionKey({ key, alias }); historyTargets.push({ row, resolvedKey }); } rows.push(row); diff --git a/src/agents/tools/sessions-resolution.test.ts b/src/agents/tools/sessions-resolution.test.ts index 025854e6ba61..575d8326d919 100644 --- a/src/agents/tools/sessions-resolution.test.ts +++ b/src/agents/tools/sessions-resolution.test.ts @@ -97,12 +97,10 @@ describe("session key display/internal mapping", () => { }); it("maps input main to alias for internal routing", () => { - expect(resolveInternalSessionKey({ key: "main", alias: "global", mainKey: "main" })).toBe( - "global", + expect(resolveInternalSessionKey({ key: "main", alias: "global" })).toBe("global"); + expect(resolveInternalSessionKey({ key: "agent:ops:main", alias: "global" })).toBe( + "agent:ops:main", ); - expect( - resolveInternalSessionKey({ key: "agent:ops:main", alias: "global", mainKey: "main" }), - ).toBe("agent:ops:main"); }); it("maps current to requester session key", () => { @@ -110,16 +108,13 @@ describe("session key display/internal mapping", () => { resolveInternalSessionKey({ key: "current", alias: "global", - mainKey: "main", requesterInternalKey: "agent:support:main", }), ).toBe("agent:support:main"); }); it("preserves literal current when no requester key is provided", () => { - expect(resolveInternalSessionKey({ key: "current", alias: "global", mainKey: "main" })).toBe( - "current", - ); + expect(resolveInternalSessionKey({ key: "current", alias: "global" })).toBe("current"); }); it("maps interactive client ids to the requester session", () => { diff --git a/src/agents/tools/sessions-resolution.ts b/src/agents/tools/sessions-resolution.ts index e13b567d48c0..0ee0c0db0c9a 100644 --- a/src/agents/tools/sessions-resolution.ts +++ b/src/agents/tools/sessions-resolution.ts @@ -51,7 +51,6 @@ export function resolveDisplaySessionKey(params: { key: string; alias: string; m export function resolveInternalSessionKey(params: { key: string; alias: string; - mainKey: string; requesterInternalKey?: string; }) { if (params.key === "current") { @@ -370,7 +369,6 @@ export async function resolveSessionReference(params: { const resolvedKey = resolveInternalSessionKey({ key: raw, alias: params.alias, - mainKey: params.mainKey, requesterInternalKey: params.requesterInternalKey, }); const semanticAliasAgentId = diff --git a/src/auto-reply/reply/abort-operation.ts b/src/auto-reply/reply/abort-operation.ts index c61f8994be8b..9ef1beba4bca 100644 --- a/src/auto-reply/reply/abort-operation.ts +++ b/src/auto-reply/reply/abort-operation.ts @@ -149,8 +149,8 @@ function normalizeRequesterSessionKey( if (!cleaned) { return undefined; } - const { mainKey, alias } = resolveMainSessionAlias(cfg); - return resolveInternalSessionKey({ key: cleaned, alias, mainKey }); + const { alias } = resolveMainSessionAlias(cfg); + return resolveInternalSessionKey({ key: cleaned, alias }); } export async function stopSubagentsForRequester(params: { diff --git a/src/auto-reply/reply/commands-subagents/shared.ts b/src/auto-reply/reply/commands-subagents/shared.ts index ce4b917de797..c86c0266be03 100644 --- a/src/auto-reply/reply/commands-subagents/shared.ts +++ b/src/auto-reply/reply/commands-subagents/shared.ts @@ -98,8 +98,8 @@ export function resolveRequesterSessionKey( if (!raw) { return undefined; } - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); - return resolveInternalSessionKey({ key: raw, alias, mainKey }); + const { alias } = resolveMainSessionAlias(params.cfg); + return resolveInternalSessionKey({ key: raw, alias }); } export function buildSubagentsHelp() { diff --git a/src/auto-reply/reply/explicit-steer-routing.ts b/src/auto-reply/reply/explicit-steer-routing.ts index 765e9a3a069c..2ec1424c0d18 100644 --- a/src/auto-reply/reply/explicit-steer-routing.ts +++ b/src/auto-reply/reply/explicit-steer-routing.ts @@ -48,8 +48,8 @@ function resolveSteerSourceSessionKey(params: { return undefined; } - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); - return resolveInternalSessionKey({ key: raw, alias, mainKey }); + const { alias } = resolveMainSessionAlias(params.cfg); + return resolveInternalSessionKey({ key: raw, alias }); } /** diff --git a/src/gateway/session-swarm-summary.test.ts b/src/gateway/session-swarm-summary.test.ts index d133e094ae63..4433f87a7e24 100644 --- a/src/gateway/session-swarm-summary.test.ts +++ b/src/gateway/session-swarm-summary.test.ts @@ -158,12 +158,8 @@ describe("parent Swarm outcome projection", () => { cfg: globalConfig, sessionKey: `agent:other:${suffix}`, }); - const { alias, mainKey } = resolveMainSessionAlias(globalConfig); - const requesterKey = resolveInternalSessionKey({ - key: admitted.canonicalKey, - alias, - mainKey, - }); + const { alias } = resolveMainSessionAlias(globalConfig); + const requesterKey = resolveInternalSessionKey({ key: admitted.canonicalKey, alias }); expect(requesterKey).toBe(suffix === "global" ? "agent:other:global" : "global"); await withCollectors( [ diff --git a/src/status/status-text.ts b/src/status/status-text.ts index d378328ae2e6..fc0952eef34f 100644 --- a/src/status/status-text.ts +++ b/src/status/status-text.ts @@ -477,8 +477,8 @@ export async function buildStatusReplyParts( let subagentsLine: string | undefined; if (sessionKey) { - const { mainKey, alias } = resolveMainSessionAlias(cfg); - const requesterKey = resolveInternalSessionKey({ key: sessionKey, alias, mainKey }); + const { alias } = resolveMainSessionAlias(cfg); + const requesterKey = resolveInternalSessionKey({ key: sessionKey, alias }); const { buildControlledSubagentRunsReadContext, buildSubagentsStatusLine } = await loadStatusSubagentsRuntime(); const subagentReadContext = await buildControlledSubagentRunsReadContext(