From 528f296cfc7cf048cb01b8fa85b0dc35645b9a3a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 19 Apr 2026 05:04:19 +0100 Subject: [PATCH] refactor: share acp identity construction --- src/acp/runtime/session-identity.ts | 65 ++++++++++++++++++----------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/src/acp/runtime/session-identity.ts b/src/acp/runtime/session-identity.ts index bac2156ce3e..16f51be9756 100644 --- a/src/acp/runtime/session-identity.ts +++ b/src/acp/runtime/session-identity.ts @@ -51,6 +51,36 @@ function normalizeIdentity( }; } +type IdentityIds = Pick; + +function readIdentityIdsFromHandle(handle: AcpRuntimeHandle): IdentityIds { + return { + acpxRecordId: normalizeText((handle as { acpxRecordId?: unknown }).acpxRecordId), + acpxSessionId: normalizeText(handle.backendSessionId), + agentSessionId: normalizeText(handle.agentSessionId), + }; +} + +function buildSessionIdentity(params: { + ids: IdentityIds; + state: SessionAcpIdentity["state"]; + source: SessionAcpIdentitySource; + now: number; +}): SessionAcpIdentity | undefined { + const { acpxRecordId, acpxSessionId, agentSessionId } = params.ids; + if (!acpxRecordId && !acpxSessionId && !agentSessionId) { + return undefined; + } + return { + state: params.state, + ...(acpxRecordId ? { acpxRecordId } : {}), + ...(acpxSessionId ? { acpxSessionId } : {}), + ...(agentSessionId ? { agentSessionId } : {}), + source: params.source, + lastUpdatedAt: params.now, + }; +} + export function resolveSessionIdentityFromMeta( meta: SessionAcpMeta | undefined, ): SessionAcpIdentity | undefined { @@ -152,40 +182,25 @@ export function createIdentityFromEnsure(params: { handle: AcpRuntimeHandle; now: number; }): SessionAcpIdentity | undefined { - const acpxRecordId = normalizeText((params.handle as { acpxRecordId?: unknown }).acpxRecordId); - const acpxSessionId = normalizeText(params.handle.backendSessionId); - const agentSessionId = normalizeText(params.handle.agentSessionId); - if (!acpxRecordId && !acpxSessionId && !agentSessionId) { - return undefined; - } - return { + return buildSessionIdentity({ + ids: readIdentityIdsFromHandle(params.handle), state: "pending", - ...(acpxRecordId ? { acpxRecordId } : {}), - ...(acpxSessionId ? { acpxSessionId } : {}), - ...(agentSessionId ? { agentSessionId } : {}), source: "ensure", - lastUpdatedAt: params.now, - }; + now: params.now, + }); } export function createIdentityFromHandleEvent(params: { handle: AcpRuntimeHandle; now: number; }): SessionAcpIdentity | undefined { - const acpxRecordId = normalizeText((params.handle as { acpxRecordId?: unknown }).acpxRecordId); - const acpxSessionId = normalizeText(params.handle.backendSessionId); - const agentSessionId = normalizeText(params.handle.agentSessionId); - if (!acpxRecordId && !acpxSessionId && !agentSessionId) { - return undefined; - } - return { - state: agentSessionId ? "resolved" : "pending", - ...(acpxRecordId ? { acpxRecordId } : {}), - ...(acpxSessionId ? { acpxSessionId } : {}), - ...(agentSessionId ? { agentSessionId } : {}), + const ids = readIdentityIdsFromHandle(params.handle); + return buildSessionIdentity({ + ids, + state: ids.agentSessionId ? "resolved" : "pending", source: "event", - lastUpdatedAt: params.now, - }; + now: params.now, + }); } export function createIdentityFromStatus(params: {