From 063acb926817a7204a104671a13681e35b5a3aa8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 9 Aug 2026 14:30:10 -0700 Subject: [PATCH] refactor(gateway): relocate agent turn modules (#121241) --- src/agents/acp-spawn.test.ts | 2 +- .../subagent-spawn.in-process-gateway.test.ts | 2 +- .../agent-admission-controller.ts | 12 ++++----- .../agent-content-phase.ts | 6 ++--- .../agent-dedupe-lifecycle.ts | 18 ++++++------- .../agent-dedupe.ts | 2 +- .../agent-delivery-phase.ts | 6 ++--- .../agent-handler-helpers.ts | 2 +- .../agent-job.timeout-fallback.test.ts | 0 .../agent-job.ts | 0 .../agent-request-preflight.test.ts | 4 +-- .../agent-request-preflight.ts | 8 +++--- .../agent-request-routing.ts | 16 +++++------ .../agent-restart-recovery-context.test.ts | 0 .../agent-restart-recovery-context.ts | 0 .../agent-run-admission-phase.ts | 24 ++++++++--------- .../agent-run-dispatch.ts | 10 +++---- .../agent-run-execution-phase.ts | 12 ++++----- .../agent-session-persist.ts | 12 ++++----- src/gateway/agent-turn/agent-turn-service.ts | 27 +++++++++---------- .../agent-wait-dedupe.test.ts | 2 +- src/gateway/agent-turn/internal-facade.ts | 2 +- .../server-methods/agent-cron-continuation.ts | 6 ++--- .../server-methods/agent-reset-phase.ts | 4 +-- .../server-methods/agent-run-handler.ts | 2 +- .../server-methods/agent-session-prepare.ts | 4 +-- .../agent.abort-integration.test-utils.ts | 4 +-- .../agent.sessions-and-models.test-utils.ts | 2 +- .../chat-abort-authorization.ts | 2 +- .../server-methods/chat-send-admission.ts | 2 +- .../chat-send-dispatch-errors.ts | 2 +- .../server-methods/chat-send-handler.ts | 2 +- .../chat-send-message-injection.ts | 2 +- .../server-methods/chat-send-pre-admission.ts | 2 +- .../cron-creator-authority-admission.ts | 2 +- .../server-methods/server-methods.test.ts | 2 +- src/gateway/server-methods/sessions-abort.ts | 2 +- 37 files changed, 102 insertions(+), 105 deletions(-) rename src/gateway/{server-methods => agent-turn}/agent-admission-controller.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-content-phase.ts (97%) rename src/gateway/{server-methods => agent-turn}/agent-dedupe-lifecycle.ts (93%) rename src/gateway/{server-methods => agent-turn}/agent-dedupe.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-delivery-phase.ts (97%) rename src/gateway/{server-methods => agent-turn}/agent-handler-helpers.ts (99%) rename src/gateway/{server-methods => agent-turn}/agent-job.timeout-fallback.test.ts (100%) rename src/gateway/{server-methods => agent-turn}/agent-job.ts (100%) rename src/gateway/{server-methods => agent-turn}/agent-request-preflight.test.ts (99%) rename src/gateway/{server-methods => agent-turn}/agent-request-preflight.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-request-routing.ts (96%) rename src/gateway/{server-methods => agent-turn}/agent-restart-recovery-context.test.ts (100%) rename src/gateway/{server-methods => agent-turn}/agent-restart-recovery-context.ts (100%) rename src/gateway/{server-methods => agent-turn}/agent-run-admission-phase.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-run-dispatch.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-run-execution-phase.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-session-persist.ts (98%) rename src/gateway/{server-methods => agent-turn}/agent-wait-dedupe.test.ts (99%) diff --git a/src/agents/acp-spawn.test.ts b/src/agents/acp-spawn.test.ts index 6192d705c4f3..16a8ae7ebc22 100644 --- a/src/agents/acp-spawn.test.ts +++ b/src/agents/acp-spawn.test.ts @@ -7,8 +7,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import type { AcpInitializeSessionInput } from "../acp/control-plane/manager.types.js"; import type { SessionEntry } from "../config/sessions/types.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; +import { setGatewayDedupeEntry, waitForAgentJob } from "../gateway/agent-turn/agent-job.js"; import type { CallGatewayOptions } from "../gateway/call.js"; -import { setGatewayDedupeEntry, waitForAgentJob } from "../gateway/server-methods/agent-job.js"; import type { DedupeEntry } from "../gateway/server-shared.js"; import { testing as sessionBindingServiceTesting, diff --git a/src/agents/subagent-spawn.in-process-gateway.test.ts b/src/agents/subagent-spawn.in-process-gateway.test.ts index 23a39ebd8714..3a0a6ae96b78 100644 --- a/src/agents/subagent-spawn.in-process-gateway.test.ts +++ b/src/agents/subagent-spawn.in-process-gateway.test.ts @@ -7,8 +7,8 @@ import { clearRuntimeConfigSnapshot, getRuntimeConfig, } from "../config/config.js"; +import { prepareAgentRequestPreflight } from "../gateway/agent-turn/agent-request-preflight.js"; import { createAgentTurnIo } from "../gateway/agent-turn/io.js"; -import { prepareAgentRequestPreflight } from "../gateway/server-methods/agent-request-preflight.js"; import type { GatewayRequestContext, GatewayRequestOptions, diff --git a/src/gateway/server-methods/agent-admission-controller.ts b/src/gateway/agent-turn/agent-admission-controller.ts similarity index 98% rename from src/gateway/server-methods/agent-admission-controller.ts rename to src/gateway/agent-turn/agent-admission-controller.ts index 3ea9b692796c..701291f7d1cd 100644 --- a/src/gateway/server-methods/agent-admission-controller.ts +++ b/src/gateway/agent-turn/agent-admission-controller.ts @@ -11,8 +11,12 @@ import { beginSessionWorkAdmission, type SessionWorkAdmissionLease, } from "../../sessions/session-lifecycle-admission.js"; -import type { AgentTurnContext, AgentTurnIo } from "../agent-turn/types.js"; import { registerChatAbortController } from "../chat-abort.js"; +import { + assertExpectedExistingSession, + consumeExpectedSessionWorkAdmission, + type ExpectedExistingSessionConstraint, +} from "../server-methods/agent-expected-session.js"; import { loadSessionEntry } from "../session-utils.js"; import type { AgentDedupeLifecycle } from "./agent-dedupe-lifecycle.js"; import { @@ -21,11 +25,7 @@ import { readGatewayDedupeEntry, setAbortedAgentDedupeEntries, } from "./agent-dedupe.js"; -import { - assertExpectedExistingSession, - consumeExpectedSessionWorkAdmission, - type ExpectedExistingSessionConstraint, -} from "./agent-expected-session.js"; +import type { AgentTurnContext, AgentTurnIo } from "./types.js"; export function createAgentAdmissionController(params: { cfg: OpenClawConfig; diff --git a/src/gateway/server-methods/agent-content-phase.ts b/src/gateway/agent-turn/agent-content-phase.ts similarity index 97% rename from src/gateway/server-methods/agent-content-phase.ts rename to src/gateway/agent-turn/agent-content-phase.ts index 8c9d6774e811..94e0642ec9cc 100644 --- a/src/gateway/server-methods/agent-content-phase.ts +++ b/src/gateway/agent-turn/agent-content-phase.ts @@ -29,7 +29,6 @@ import { isInternalNonDeliveryChannel, normalizeMessageChannel, } from "../../utils/message-channel.js"; -import type { AgentTurnContext } from "../agent-turn/types.js"; import { resolveChatAttachmentMaxBytes } from "../chat-attachment-policy.js"; import { MediaOffloadError, @@ -37,14 +36,15 @@ import { parseMessageWithAttachments, type ChatAttachment, } from "../chat-attachments.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import type { GatewayRequestHandlerOptions } from "../server-methods/types.js"; import { loadSessionEntry, resolveGatewayModelSupportsImages, resolveSessionModelRef, } from "../session-utils.js"; import { formatForLog } from "../ws-log.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import type { GatewayRequestHandlerOptions } from "./types.js"; +import type { AgentTurnContext } from "./types.js"; type ExplicitRecipientSession = Awaited< ReturnType< diff --git a/src/gateway/server-methods/agent-dedupe-lifecycle.ts b/src/gateway/agent-turn/agent-dedupe-lifecycle.ts similarity index 93% rename from src/gateway/server-methods/agent-dedupe-lifecycle.ts rename to src/gateway/agent-turn/agent-dedupe-lifecycle.ts index c638ae9e61cb..8bd337cd2062 100644 --- a/src/gateway/server-methods/agent-dedupe-lifecycle.ts +++ b/src/gateway/agent-turn/agent-dedupe-lifecycle.ts @@ -2,8 +2,15 @@ import { randomUUID } from "node:crypto"; import { AGENT_RUN_RESTART_ABORT_STOP_REASON } from "../../agents/run-termination.js"; import { resolveAgentTimeoutMs } from "../../agents/timeout.js"; import { getAgentEventLifecycleGeneration } from "../../infra/agent-events.js"; -import type { AgentTurnContext, AgentTurnIo } from "../agent-turn/types.js"; import { resolveAgentRunExpiresAtMs } from "../chat-abort.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import type { CommittedResetCompletion } from "../server-methods/agent-reset-phase.js"; +import { + buildBareSessionResetResponse, + buildBareSessionResetResult, + sessionResetAckText, +} from "../server-methods/agent-session-reset.js"; +import { emitSessionsChanged } from "../server-methods/session-change-event.js"; import { resolveSessionStoreKey } from "../session-utils.js"; import { isAcceptedAgentDedupePayload, @@ -12,15 +19,8 @@ import { setAbortedAgentDedupeEntries, setGatewayDedupeEntries, } from "./agent-dedupe.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import type { CommittedResetCompletion } from "./agent-reset-phase.js"; import { deleteGatewayDedupeEntries } from "./agent-run-dispatch.js"; -import { - buildBareSessionResetResponse, - buildBareSessionResetResult, - sessionResetAckText, -} from "./agent-session-reset.js"; -import { emitSessionsChanged } from "./session-change-event.js"; +import type { AgentTurnContext, AgentTurnIo } from "./types.js"; export type AgentDedupeLifecycle = ReturnType; diff --git a/src/gateway/server-methods/agent-dedupe.ts b/src/gateway/agent-turn/agent-dedupe.ts similarity index 98% rename from src/gateway/server-methods/agent-dedupe.ts rename to src/gateway/agent-turn/agent-dedupe.ts index 2fa80d055885..ca4ad47198e2 100644 --- a/src/gateway/server-methods/agent-dedupe.ts +++ b/src/gateway/agent-turn/agent-dedupe.ts @@ -1,6 +1,6 @@ import { uniqueStrings } from "@openclaw/normalization-core/string-normalization"; +import type { GatewayRequestContext } from "../server-methods/types.js"; import { setGatewayDedupeEntry } from "./agent-job.js"; -import type { GatewayRequestContext } from "./types.js"; export function resolveAgentDedupeKeys(params: { idempotencyKey: string; diff --git a/src/gateway/server-methods/agent-delivery-phase.ts b/src/gateway/agent-turn/agent-delivery-phase.ts similarity index 97% rename from src/gateway/server-methods/agent-delivery-phase.ts rename to src/gateway/agent-turn/agent-delivery-phase.ts index 8133052c029c..581dbc2f6cd3 100644 --- a/src/gateway/server-methods/agent-delivery-phase.ts +++ b/src/gateway/agent-turn/agent-delivery-phase.ts @@ -16,10 +16,10 @@ import { isInternalNonDeliveryChannel, normalizeMessageChannel, } from "../../utils/message-channel.js"; -import type { AgentTurnContext, AgentTurnPrincipal } from "../agent-turn/types.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import type { GatewayRequestHandlerOptions } from "../server-methods/types.js"; import { formatForLog } from "../ws-log.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import type { GatewayRequestHandlerOptions } from "./types.js"; +import type { AgentTurnContext, AgentTurnPrincipal } from "./types.js"; type DeliveryPlan = Awaited>; diff --git a/src/gateway/server-methods/agent-handler-helpers.ts b/src/gateway/agent-turn/agent-handler-helpers.ts similarity index 99% rename from src/gateway/server-methods/agent-handler-helpers.ts rename to src/gateway/agent-turn/agent-handler-helpers.ts index e22c48310d56..5e96db605c39 100644 --- a/src/gateway/server-methods/agent-handler-helpers.ts +++ b/src/gateway/agent-turn/agent-handler-helpers.ts @@ -21,12 +21,12 @@ import { import type { InputProvenance } from "../../sessions/input-provenance.js"; import { setSafeTimeout } from "../../utils/timer-delay.js"; import { ADMIN_SCOPE } from "../method-scopes.js"; +import type { GatewayRequestHandlerOptions } from "../server-methods/types.js"; import { emitGatewaySessionEndPluginHook, emitGatewaySessionStartPluginHook, } from "../session-reset-service.js"; import { loadSessionEntry, resolveDeletedAgentIdFromSessionKey } from "../session-utils.js"; -import type { GatewayRequestHandlerOptions } from "./types.js"; export const CRON_CONTINUATION_RELEASE_RECOVERY_DELAYS_MS = [250, 1_000, 4_000, 15_000] as const; diff --git a/src/gateway/server-methods/agent-job.timeout-fallback.test.ts b/src/gateway/agent-turn/agent-job.timeout-fallback.test.ts similarity index 100% rename from src/gateway/server-methods/agent-job.timeout-fallback.test.ts rename to src/gateway/agent-turn/agent-job.timeout-fallback.test.ts diff --git a/src/gateway/server-methods/agent-job.ts b/src/gateway/agent-turn/agent-job.ts similarity index 100% rename from src/gateway/server-methods/agent-job.ts rename to src/gateway/agent-turn/agent-job.ts diff --git a/src/gateway/server-methods/agent-request-preflight.test.ts b/src/gateway/agent-turn/agent-request-preflight.test.ts similarity index 99% rename from src/gateway/server-methods/agent-request-preflight.test.ts rename to src/gateway/agent-turn/agent-request-preflight.test.ts index b8b46fb38d8b..1210d48df7fa 100644 --- a/src/gateway/server-methods/agent-request-preflight.test.ts +++ b/src/gateway/agent-turn/agent-request-preflight.test.ts @@ -1,9 +1,9 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { subagentRuns } from "../../agents/subagent-registry-memory.js"; import * as sessionAccessor from "../../config/sessions/session-accessor.js"; -import { createAgentTurnService } from "../agent-turn/agent-turn-service.js"; -import { createAgentTurnIo } from "../agent-turn/io.js"; import { prepareAgentRequestPreflight } from "./agent-request-preflight.js"; +import { createAgentTurnService } from "./agent-turn-service.js"; +import { createAgentTurnIo } from "./io.js"; function runPreflight( swarmOutputSchema?: Record, diff --git a/src/gateway/server-methods/agent-request-preflight.ts b/src/gateway/agent-turn/agent-request-preflight.ts similarity index 98% rename from src/gateway/server-methods/agent-request-preflight.ts rename to src/gateway/agent-turn/agent-request-preflight.ts index 3fe57edb4764..5896421cb130 100644 --- a/src/gateway/server-methods/agent-request-preflight.ts +++ b/src/gateway/agent-turn/agent-request-preflight.ts @@ -18,18 +18,18 @@ import { shouldPreserveUserFacingSessionStateForInputProvenance, } from "../../sessions/input-provenance.js"; import { isSubagentSessionKey } from "../../sessions/session-key-utils.js"; -import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "../agent-turn/types.js"; -import { readGatewayDedupeEntry, resolveAgentDedupeKeys } from "./agent-dedupe.js"; import { resolveExpectedExistingSessionConstraint, type ExpectedExistingSessionConstraint, -} from "./agent-expected-session.js"; +} from "../server-methods/agent-expected-session.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import { readGatewayDedupeEntry, resolveAgentDedupeKeys } from "./agent-dedupe.js"; import { resolveAllowModelOverrideFromClient, resolveCanUseCronRunContinuation, resolveCanUseInternalRuntimeHandoff, } from "./agent-handler-helpers.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; +import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "./types.js"; export type AgentRequestPreflight = { request: AgentRunRequest; diff --git a/src/gateway/server-methods/agent-request-routing.ts b/src/gateway/agent-turn/agent-request-routing.ts similarity index 96% rename from src/gateway/server-methods/agent-request-routing.ts rename to src/gateway/agent-turn/agent-request-routing.ts index e8d00f562dc6..a18c28366896 100644 --- a/src/gateway/server-methods/agent-request-routing.ts +++ b/src/gateway/agent-turn/agent-request-routing.ts @@ -18,18 +18,18 @@ import { isDeliverableMessageChannel, normalizeMessageChannel, } from "../../utils/message-channel.js"; -import type { AgentTurnContext } from "../agent-turn/types.js"; -import { loadSessionEntry, resolveSessionStoreKey } from "../session-utils.js"; -import { formatForLog } from "../ws-log.js"; -import { setGatewayDedupeEntries } from "./agent-dedupe.js"; import { validateExpectedExistingSessionTarget, type ExpectedExistingSessionConstraint, -} from "./agent-expected-session.js"; +} from "../server-methods/agent-expected-session.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import { normalizeRpcAttachmentsToChatAttachments } from "../server-methods/attachment-normalize.js"; +import type { GatewayRequestHandlerOptions } from "../server-methods/types.js"; +import { loadSessionEntry, resolveSessionStoreKey } from "../session-utils.js"; +import { formatForLog } from "../ws-log.js"; +import { setGatewayDedupeEntries } from "./agent-dedupe.js"; import { respondUnavailableAgentSessionForKey } from "./agent-handler-helpers.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js"; -import type { GatewayRequestHandlerOptions } from "./types.js"; +import type { AgentTurnContext } from "./types.js"; type ExplicitRecipientSession = Awaited>; diff --git a/src/gateway/server-methods/agent-restart-recovery-context.test.ts b/src/gateway/agent-turn/agent-restart-recovery-context.test.ts similarity index 100% rename from src/gateway/server-methods/agent-restart-recovery-context.test.ts rename to src/gateway/agent-turn/agent-restart-recovery-context.test.ts diff --git a/src/gateway/server-methods/agent-restart-recovery-context.ts b/src/gateway/agent-turn/agent-restart-recovery-context.ts similarity index 100% rename from src/gateway/server-methods/agent-restart-recovery-context.ts rename to src/gateway/agent-turn/agent-restart-recovery-context.ts diff --git a/src/gateway/server-methods/agent-run-admission-phase.ts b/src/gateway/agent-turn/agent-run-admission-phase.ts similarity index 98% rename from src/gateway/server-methods/agent-run-admission-phase.ts rename to src/gateway/agent-turn/agent-run-admission-phase.ts index 0bfdd1871d21..3032955f1d28 100644 --- a/src/gateway/server-methods/agent-run-admission-phase.ts +++ b/src/gateway/agent-turn/agent-run-admission-phase.ts @@ -22,8 +22,18 @@ import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { claimAgentRunContext } from "../../infra/agent-run-registry.js"; import type { InputProvenance } from "../../sessions/input-provenance.js"; import type { SessionWorkAdmissionLease } from "../../sessions/session-lifecycle-admission.js"; -import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "../agent-turn/types.js"; import { registerChatAbortController, resolveAgentRunExpiresAtMs } from "../chat-abort.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import { + isConfirmedAcpManualSpawnTaskOwner, + registerPluginSubagentRunFromGateway, + resolveGatewayAgentTaskTrackingMode, + type GatewayAgentTaskTrackingMode, +} from "../server-methods/agent-task-tracking.js"; +import { + resolveGatewayCronCreatorAuthorityAdmission, + type GatewayCronCreatorAuthorityAdmission, +} from "../server-methods/cron-creator-authority-admission.js"; import { loadSessionEntry, resolveSessionModelRef } from "../session-utils.js"; import { consumeSubagentCompletionToolHandoff } from "../subagent-completion-tool-handoff.js"; import { formatForLog } from "../ws-log.js"; @@ -34,17 +44,7 @@ import { } from "./agent-dedupe.js"; import type { AgentDeliveryPhaseResult } from "./agent-delivery-phase.js"; import type { RestoredCronContinuation } from "./agent-handler-helpers.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import { - isConfirmedAcpManualSpawnTaskOwner, - registerPluginSubagentRunFromGateway, - resolveGatewayAgentTaskTrackingMode, - type GatewayAgentTaskTrackingMode, -} from "./agent-task-tracking.js"; -import { - resolveGatewayCronCreatorAuthorityAdmission, - type GatewayCronCreatorAuthorityAdmission, -} from "./cron-creator-authority-admission.js"; +import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "./types.js"; export type PreparedAgentRunDispatch = { activeGatewayWorkAdmission: SessionWorkAdmissionLease; diff --git a/src/gateway/server-methods/agent-run-dispatch.ts b/src/gateway/agent-turn/agent-run-dispatch.ts similarity index 98% rename from src/gateway/server-methods/agent-run-dispatch.ts rename to src/gateway/agent-turn/agent-run-dispatch.ts index 34ce7ddc47a8..ed6dff185220 100644 --- a/src/gateway/server-methods/agent-run-dispatch.ts +++ b/src/gateway/agent-turn/agent-run-dispatch.ts @@ -17,15 +17,15 @@ import { defaultRuntime } from "../../runtime.js"; import { createRunningTaskRun } from "../../tasks/detached-task-runtime.js"; import { mapAgentRunTerminalOutcomeToTaskStatus } from "../../tasks/task-registry-common.js"; import { normalizeDeliveryContext } from "../../utils/delivery-context.shared.js"; -import type { AgentTurnContext, AgentTurnIo } from "../agent-turn/types.js"; import type { ChatAbortControllerEntry } from "../chat-abort.js"; -import { formatForLog } from "../ws-log.js"; -import { setGatewayDedupeEntries } from "./agent-dedupe.js"; import { tryFinalizeTrackedAgentTask, type GatewayAgentTaskTrackingMode, -} from "./agent-task-tracking.js"; -import type { GatewayCronCreatorAuthorityAdmission } from "./cron-creator-authority-admission.js"; +} from "../server-methods/agent-task-tracking.js"; +import type { GatewayCronCreatorAuthorityAdmission } from "../server-methods/cron-creator-authority-admission.js"; +import { formatForLog } from "../ws-log.js"; +import { setGatewayDedupeEntries } from "./agent-dedupe.js"; +import type { AgentTurnContext, AgentTurnIo } from "./types.js"; function resolveResolvedAgentTimeoutStopReason( meta: unknown, diff --git a/src/gateway/server-methods/agent-run-execution-phase.ts b/src/gateway/agent-turn/agent-run-execution-phase.ts similarity index 98% rename from src/gateway/server-methods/agent-run-execution-phase.ts rename to src/gateway/agent-turn/agent-run-execution-phase.ts index 43e2d34df407..904fa9828109 100644 --- a/src/gateway/server-methods/agent-run-execution-phase.ts +++ b/src/gateway/agent-turn/agent-run-execution-phase.ts @@ -40,7 +40,11 @@ import { buildRunUserTurnIdempotencyKey, createUserTurnTranscriptRecorder, } from "../../sessions/user-turn-transcript.js"; -import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "../agent-turn/types.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import { createAgentRunModelSelectionHandler } from "../server-methods/agent-run-model-selection.js"; +import { resolveSessionRuntimeCwd } from "../server-methods/agent-session-reset.js"; +import { gatewayClientSenderFields } from "../server-methods/gateway-client-identity.js"; +import { emitSessionsChanged } from "../server-methods/session-change-event.js"; import { reactivateCompletedSubagentSession } from "../session-subagent-reactivation.js"; import { loadSessionEntry } from "../session-utils.js"; import { formatForLog } from "../ws-log.js"; @@ -52,7 +56,6 @@ import { yieldAfterAgentAcceptedAck, type RestoredCronContinuation, } from "./agent-handler-helpers.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; import { resolveAgentRestartRecoveryChannelContext, resolveAgentRestartRecoveryExecutionIdentityAdmission, @@ -62,10 +65,7 @@ import { resolveAbortedAgentStopReason, dispatchAgentRunFromGateway, } from "./agent-run-dispatch.js"; -import { createAgentRunModelSelectionHandler } from "./agent-run-model-selection.js"; -import { resolveSessionRuntimeCwd } from "./agent-session-reset.js"; -import { gatewayClientSenderFields } from "./gateway-client-identity.js"; -import { emitSessionsChanged } from "./session-change-event.js"; +import type { AgentTurnContext, AgentTurnIo, AgentTurnPrincipal } from "./types.js"; export function startAgentRunExecution(params: { prepared: PreparedAgentRunDispatch; diff --git a/src/gateway/server-methods/agent-session-persist.ts b/src/gateway/agent-turn/agent-session-persist.ts similarity index 98% rename from src/gateway/server-methods/agent-session-persist.ts rename to src/gateway/agent-turn/agent-session-persist.ts index 223c32677d2a..cf05ae90af96 100644 --- a/src/gateway/server-methods/agent-session-persist.ts +++ b/src/gateway/agent-turn/agent-session-persist.ts @@ -24,21 +24,21 @@ import { resolveSendPolicy } from "../../sessions/send-policy.js"; import { recordSessionCreated } from "../../sessions/session-state-events.js"; import { getGeneratedMediaTaskIdsForSessionKey } from "../../tasks/task-status-access.js"; import { sessionDeliveryChannel } from "../../utils/delivery-context.shared.js"; -import { formatForLog } from "../ws-log.js"; import { assertExpectedExistingSession, ExpectedExistingSessionChangedError, -} from "./agent-expected-session.js"; +} from "../server-methods/agent-expected-session.js"; +import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; +import type { AgentSessionPatchBuild } from "../server-methods/agent-session-patch.js"; +import type { TrustedSessionCreation } from "../server-methods/session-creation-provenance.js"; +import type { GatewayRequestHandlerOptions } from "../server-methods/types.js"; +import { formatForLog } from "../ws-log.js"; import { cronContinuationHasReusableRuntime, emitAgentSendSessionLifecycleTransition, withSqliteSessionFileMarker, type RestoredCronContinuation, } from "./agent-handler-helpers.js"; -import type { AgentRunRequest } from "./agent-request-types.js"; -import type { AgentSessionPatchBuild } from "./agent-session-patch.js"; -import type { TrustedSessionCreation } from "./session-creation-provenance.js"; -import type { GatewayRequestHandlerOptions } from "./types.js"; export type CronContinuationClaim = { storePath: string; diff --git a/src/gateway/agent-turn/agent-turn-service.ts b/src/gateway/agent-turn/agent-turn-service.ts index fa829795e79f..2e3778c57c09 100644 --- a/src/gateway/agent-turn/agent-turn-service.ts +++ b/src/gateway/agent-turn/agent-turn-service.ts @@ -13,30 +13,27 @@ import { mergeSessionEntry, type SessionEntry } from "../../config/sessions.js"; import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { getAgentEventLifecycleGeneration } from "../../infra/agent-events.js"; import { normalizeDeliveryContext } from "../../utils/delivery-context.shared.js"; -import { createAgentAdmissionController } from "../server-methods/agent-admission-controller.js"; -import { prepareAgentContentPhase } from "../server-methods/agent-content-phase.js"; import { createCronContinuationController } from "../server-methods/agent-cron-continuation.js"; -import { createAgentDedupeLifecycle } from "../server-methods/agent-dedupe-lifecycle.js"; -import { - isAcceptedAgentDedupePayload, - readGatewayDedupeEntry, -} from "../server-methods/agent-dedupe.js"; -import { resolveAgentDeliveryPhase } from "../server-methods/agent-delivery-phase.js"; -import type { RestoredCronContinuation } from "../server-methods/agent-handler-helpers.js"; -import { waitForAgentJob } from "../server-methods/agent-job.js"; -import type { AgentRequestPreflight } from "../server-methods/agent-request-preflight.js"; -import { prepareAgentRequestRouting } from "../server-methods/agent-request-routing.js"; import { runAgentResetPhase } from "../server-methods/agent-reset-phase.js"; -import { prepareAgentRunDispatch } from "../server-methods/agent-run-admission-phase.js"; -import { startAgentRunExecution } from "../server-methods/agent-run-execution-phase.js"; import { buildAgentSessionPatch } from "../server-methods/agent-session-patch.js"; -import { persistAgentSessionPhase } from "../server-methods/agent-session-persist.js"; import { prepareAgentSession } from "../server-methods/agent-session-prepare.js"; import { handleChatAbortRequest } from "../server-methods/chat-abort-handler.js"; import { resolveAgentRunSessionCreation } from "../server-methods/session-creation-provenance.js"; import type { GatewayRequestHandlerOptions, RespondFn } from "../server-methods/shared-types.js"; import { authorizeResolvedSessionMutation } from "../session-sharing.js"; import { formatForLog } from "../ws-log.js"; +import { createAgentAdmissionController } from "./agent-admission-controller.js"; +import { prepareAgentContentPhase } from "./agent-content-phase.js"; +import { createAgentDedupeLifecycle } from "./agent-dedupe-lifecycle.js"; +import { isAcceptedAgentDedupePayload, readGatewayDedupeEntry } from "./agent-dedupe.js"; +import { resolveAgentDeliveryPhase } from "./agent-delivery-phase.js"; +import type { RestoredCronContinuation } from "./agent-handler-helpers.js"; +import { waitForAgentJob } from "./agent-job.js"; +import type { AgentRequestPreflight } from "./agent-request-preflight.js"; +import { prepareAgentRequestRouting } from "./agent-request-routing.js"; +import { prepareAgentRunDispatch } from "./agent-run-admission-phase.js"; +import { startAgentRunExecution } from "./agent-run-execution-phase.js"; +import { persistAgentSessionPhase } from "./agent-session-persist.js"; import type { AgentTurnIo, AgentTurnPrincipal } from "./types.js"; type AgentTurnStartRequest = { diff --git a/src/gateway/server-methods/agent-wait-dedupe.test.ts b/src/gateway/agent-turn/agent-wait-dedupe.test.ts similarity index 99% rename from src/gateway/server-methods/agent-wait-dedupe.test.ts rename to src/gateway/agent-turn/agent-wait-dedupe.test.ts index 364a582be3bc..9e5bda4b559b 100644 --- a/src/gateway/server-methods/agent-wait-dedupe.test.ts +++ b/src/gateway/agent-turn/agent-wait-dedupe.test.ts @@ -1,9 +1,9 @@ import { expectDefined } from "@openclaw/normalization-core"; import { afterEach, describe, expect, it, vi } from "vitest"; import { emitAgentEvent } from "../../infra/agent-events.js"; +import { agentHandlers } from "../server-methods/agent.js"; import type { DedupeEntry } from "../server-shared.js"; import { setGatewayDedupeEntry } from "./agent-job.js"; -import { agentHandlers } from "./agent.js"; function waitThroughGateway( params: { runId: string; timeoutMs: number }, diff --git a/src/gateway/agent-turn/internal-facade.ts b/src/gateway/agent-turn/internal-facade.ts index ec2f6edca9c6..fdcdbc462471 100644 --- a/src/gateway/agent-turn/internal-facade.ts +++ b/src/gateway/agent-turn/internal-facade.ts @@ -5,9 +5,9 @@ import { unwrapGatewayMethodDispatchResponse, } from "../server-in-process-dispatch.js"; import { runWithGatewayRequestEnvelope } from "../server-methods.js"; -import { prepareAgentRequestPreflight } from "../server-methods/agent-request-preflight.js"; import type { AgentRunRequest } from "../server-methods/agent-request-types.js"; import type { GatewayRequestOptions } from "../server-methods/types.js"; +import { prepareAgentRequestPreflight } from "./agent-request-preflight.js"; import { createAgentTurnService } from "./agent-turn-service.js"; import { captureAgentTurnPrincipal } from "./principal.js"; import type { AgentTurnFrame, AgentTurnIo } from "./types.js"; diff --git a/src/gateway/server-methods/agent-cron-continuation.ts b/src/gateway/server-methods/agent-cron-continuation.ts index 9becef897116..1a49f3df8ead 100644 --- a/src/gateway/server-methods/agent-cron-continuation.ts +++ b/src/gateway/server-methods/agent-cron-continuation.ts @@ -6,13 +6,13 @@ import { getAgentEventLifecycleGeneration } from "../../infra/agent-events.js"; import { runWithGatewayIndependentRootWorkContinuation } from "../../process/gateway-work-admission.js"; import { parseCronRunScopeSuffix } from "../../sessions/session-key-utils.js"; import { hasNewGeneratedMediaTaskForSessionKey } from "../../tasks/task-status-access.js"; -import { formatForLog } from "../ws-log.js"; import { CRON_CONTINUATION_RELEASE_RECOVERY_DELAYS_MS, waitForCronContinuationReleaseRecovery, withoutCronRunContinuation, -} from "./agent-handler-helpers.js"; -import type { CronContinuationClaim } from "./agent-session-persist.js"; +} from "../agent-turn/agent-handler-helpers.js"; +import type { CronContinuationClaim } from "../agent-turn/agent-session-persist.js"; +import { formatForLog } from "../ws-log.js"; import { emitSessionsChanged } from "./session-change-event.js"; import type { GatewayRequestHandlerOptions } from "./types.js"; diff --git a/src/gateway/server-methods/agent-reset-phase.ts b/src/gateway/server-methods/agent-reset-phase.ts index c708ba46b284..99e0b9822afc 100644 --- a/src/gateway/server-methods/agent-reset-phase.ts +++ b/src/gateway/server-methods/agent-reset-phase.ts @@ -10,10 +10,10 @@ import { import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { assertAgentRunLifecycleGenerationCurrent } from "../../infra/agent-events.js"; import { AGENT_SESSION_RESET_COMMAND_RE } from "../agent-command-policy.js"; +import { setGatewayDedupeEntries } from "../agent-turn/agent-dedupe.js"; +import { clientHasAdminScope } from "../agent-turn/agent-handler-helpers.js"; import { ADMIN_SCOPE } from "../method-scopes.js"; import { formatForLog } from "../ws-log.js"; -import { setGatewayDedupeEntries } from "./agent-dedupe.js"; -import { clientHasAdminScope } from "./agent-handler-helpers.js"; import type { AgentRunRequest } from "./agent-request-types.js"; import { buildBareSessionResetResponse, diff --git a/src/gateway/server-methods/agent-run-handler.ts b/src/gateway/server-methods/agent-run-handler.ts index eae59e11d95f..ce2ed0eac08d 100644 --- a/src/gateway/server-methods/agent-run-handler.ts +++ b/src/gateway/server-methods/agent-run-handler.ts @@ -3,10 +3,10 @@ import { hasGatewayClientCap, } from "../../../packages/gateway-protocol/src/client-info.js"; import { validateAgentParams } from "../../../packages/gateway-protocol/src/index.js"; +import { prepareAgentRequestPreflight } from "../agent-turn/agent-request-preflight.js"; import { createAgentTurnService } from "../agent-turn/agent-turn-service.js"; import { createAgentTurnIo } from "../agent-turn/io.js"; import { captureAgentTurnPrincipal } from "../agent-turn/principal.js"; -import { prepareAgentRequestPreflight } from "./agent-request-preflight.js"; import type { AgentRunRequest } from "./agent-request-types.js"; import type { GatewayRequestHandlers } from "./types.js"; import { assertValidParams } from "./validation.js"; diff --git a/src/gateway/server-methods/agent-session-prepare.ts b/src/gateway/server-methods/agent-session-prepare.ts index 52e6423f2e39..86669a94d39d 100644 --- a/src/gateway/server-methods/agent-session-prepare.ts +++ b/src/gateway/server-methods/agent-session-prepare.ts @@ -24,11 +24,11 @@ import { isRecoverableTerminalSessionStatus } from "../../config/sessions/termin import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { parseCronRunScopeSuffix } from "../../sessions/session-key-utils.js"; import { sessionDeliveryChannel } from "../../utils/delivery-context.shared.js"; -import { loadSessionEntry } from "../session-utils.js"; import { respondDeletedAgentSession, type RestoredCronContinuation, -} from "./agent-handler-helpers.js"; +} from "../agent-turn/agent-handler-helpers.js"; +import { loadSessionEntry } from "../session-utils.js"; import type { AgentRunRequest } from "./agent-request-types.js"; import type { GatewayRequestHandlerOptions } from "./types.js"; diff --git a/src/gateway/server-methods/agent.abort-integration.test-utils.ts b/src/gateway/server-methods/agent.abort-integration.test-utils.ts index f17dc889adf7..4e003e2217e4 100644 --- a/src/gateway/server-methods/agent.abort-integration.test-utils.ts +++ b/src/gateway/server-methods/agent.abort-integration.test-utils.ts @@ -4,10 +4,10 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { registerExecApprovalFollowupRuntimeHandoff } from "../../agents/bash-tools.exec-approval-followup-state.js"; import type { InternalSessionEntry as SessionEntry } from "../../config/sessions.js"; import { runExclusiveSessionLifecycleMutation } from "../../sessions/session-lifecycle-admission.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; +import { prepareAgentRunDispatch } from "../agent-turn/agent-run-admission-phase.js"; import { createAgentTurnIo } from "../agent-turn/io.js"; import { resolveAgentRunExpiresAtMs } from "../chat-abort.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; -import { prepareAgentRunDispatch } from "./agent-run-admission-phase.js"; import { getAgentTestMocks, makeContext, diff --git a/src/gateway/server-methods/agent.sessions-and-models.test-utils.ts b/src/gateway/server-methods/agent.sessions-and-models.test-utils.ts index ea4bba5c0bcc..223a7c80cbf0 100644 --- a/src/gateway/server-methods/agent.sessions-and-models.test-utils.ts +++ b/src/gateway/server-methods/agent.sessions-and-models.test-utils.ts @@ -18,8 +18,8 @@ import { } from "../../tasks/task-registry.js"; import { setDetachedTaskLifecycleRuntime } from "../../tasks/task-runtime.test-helpers.js"; import { withTempDir } from "../../test-helpers/temp-dir.js"; +import { dispatchAgentRunFromGateway } from "../agent-turn/agent-run-dispatch.js"; import { createAgentTurnIo } from "../agent-turn/io.js"; -import { dispatchAgentRunFromGateway } from "./agent-run-dispatch.js"; import { registerPluginSubagentRunFromGateway } from "./agent-task-tracking.js"; import { applyGatewaySubagentRegistryTestDeps, diff --git a/src/gateway/server-methods/chat-abort-authorization.ts b/src/gateway/server-methods/chat-abort-authorization.ts index f18cfd54baae..59439992b4cc 100644 --- a/src/gateway/server-methods/chat-abort-authorization.ts +++ b/src/gateway/server-methods/chat-abort-authorization.ts @@ -2,11 +2,11 @@ import { uniqueStrings } from "@openclaw/normalization-core/string-normalization"; import { normalizeAgentId } from "../../routing/session-key.js"; import { parseAgentSessionKey } from "../../sessions/session-key-utils.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import type { ChatAbortControllerEntry } from "../chat-abort.js"; import { ADMIN_SCOPE } from "../method-scopes.js"; import { createChatAbortMarker } from "../server-chat-state.js"; import { pendingChatSendDedupeKey } from "../server-shared.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { normalizeOptionalChatText as normalizeOptionalText, normalizeUnknownChatText as normalizeUnknownText, diff --git a/src/gateway/server-methods/chat-send-admission.ts b/src/gateway/server-methods/chat-send-admission.ts index 9b4a6fbbd6df..768ec5ef6ea6 100644 --- a/src/gateway/server-methods/chat-send-admission.ts +++ b/src/gateway/server-methods/chat-send-admission.ts @@ -15,11 +15,11 @@ import { import { getAgentEventLifecycleGeneration } from "../../infra/agent-events.js"; import { claimAgentRunContext, clearAgentRunContext } from "../../infra/agent-run-registry.js"; import { beginSessionWorkAdmission } from "../../sessions/session-lifecycle-admission.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { registerChatAbortController, resolveChatRunExpiresAtMs } from "../chat-abort.js"; import { PENDING_CHAT_SEND_DEDUPE_PREFIX, type DedupeEntry } from "../server-shared.js"; import { loadSessionEntry } from "../session-utils.js"; import { formatForLog } from "../ws-log.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { buildAbortedChatSendPayload, readPreRegisteredRun, diff --git a/src/gateway/server-methods/chat-send-dispatch-errors.ts b/src/gateway/server-methods/chat-send-dispatch-errors.ts index 33731d97d0c0..a8e2ab7ca47b 100644 --- a/src/gateway/server-methods/chat-send-dispatch-errors.ts +++ b/src/gateway/server-methods/chat-send-dispatch-errors.ts @@ -3,10 +3,10 @@ import { resolveDefaultAgentId } from "../../agents/agent-scope.js"; import { clearAgentRunContext } from "../../infra/agent-run-registry.js"; import { retainGatewayRootWorkAdmissionContinuation } from "../../process/gateway-work-admission.js"; import type { UserTurnTranscriptRecorder } from "../../sessions/user-turn-transcript.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { chatAbortMarkerTimestampMs } from "../server-chat-state.js"; import { persistGatewaySessionLifecycleEvent } from "../session-lifecycle-state.js"; import { formatForLog } from "../ws-log.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { buildAbortedChatSendPayload } from "./chat-abort-authorization.js"; import { broadcastChatError, broadcastChatFinal } from "./chat-broadcast.js"; import type { AdmittedChatSend } from "./chat-send-admission.js"; diff --git a/src/gateway/server-methods/chat-send-handler.ts b/src/gateway/server-methods/chat-send-handler.ts index e407fca8e523..0eb9eaad41c2 100644 --- a/src/gateway/server-methods/chat-send-handler.ts +++ b/src/gateway/server-methods/chat-send-handler.ts @@ -16,9 +16,9 @@ import { } from "../../infra/diagnostics-timeline.js"; import { retainGatewayRootWorkAdmissionContinuation } from "../../process/gateway-work-admission.js"; import { isOperatorUiClient } from "../../utils/message-channel.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { updateChatRunProvider } from "../chat-abort.js"; import type { ChatRunTiming } from "../server-chat-state.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { broadcastChatError, broadcastChatFinal } from "./chat-broadcast.js"; import { hasGatewayAdminScope } from "./chat-origin-routing.js"; import { terminalizeRestartSafeChatAdmission } from "./chat-restart-recovery.js"; diff --git a/src/gateway/server-methods/chat-send-message-injection.ts b/src/gateway/server-methods/chat-send-message-injection.ts index a6dde7520a2c..f53acbb098ec 100644 --- a/src/gateway/server-methods/chat-send-message-injection.ts +++ b/src/gateway/server-methods/chat-send-message-injection.ts @@ -18,7 +18,7 @@ import { updateSessionEntry } from "../../config/sessions/session-accessor.js"; import { isDiagnosticsEnabled } from "../../infra/diagnostic-events.js"; import { logMessageProcessed, logMessageReceived } from "../../logging/diagnostic.js"; import { getGlobalHookRunner } from "../../plugins/hook-runner-global.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { broadcastChatFinal } from "./chat-broadcast.js"; import { buildChatSendReplyInjectionText } from "./chat-send-reply-context.js"; import type { NormalizedChatSendRequest } from "./chat-send-request.js"; diff --git a/src/gateway/server-methods/chat-send-pre-admission.ts b/src/gateway/server-methods/chat-send-pre-admission.ts index f3e19ebb5b9a..c5c43efaf2fc 100644 --- a/src/gateway/server-methods/chat-send-pre-admission.ts +++ b/src/gateway/server-methods/chat-send-pre-admission.ts @@ -4,10 +4,10 @@ import { resolveSessionWorkStartError } from "../../config/sessions.js"; import { SESSION_ROUTING_CHANGED_ERROR_REASON } from "../../config/sessions/main-session.js"; import { resolveSendPolicy } from "../../sessions/send-policy.js"; import { sessionDeliveryChannel } from "../../utils/delivery-context.shared.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { chatAbortMarkerTimestampMs } from "../server-chat-state.js"; import { PENDING_CHAT_SEND_DEDUPE_PREFIX } from "../server-shared.js"; import { loadSessionEntry } from "../session-utils.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { buildAbortedChatSendPayload, readPreRegisteredRun, diff --git a/src/gateway/server-methods/cron-creator-authority-admission.ts b/src/gateway/server-methods/cron-creator-authority-admission.ts index ff741e8d8b21..f657fefbbf4f 100644 --- a/src/gateway/server-methods/cron-creator-authority-admission.ts +++ b/src/gateway/server-methods/cron-creator-authority-admission.ts @@ -1,5 +1,5 @@ import type { InputProvenance } from "../../sessions/input-provenance.js"; -import { clientHasAdminScope } from "./agent-handler-helpers.js"; +import { clientHasAdminScope } from "../agent-turn/agent-handler-helpers.js"; import type { AgentRunRequest } from "./agent-request-types.js"; import type { GatewayClient } from "./shared-types.js"; diff --git a/src/gateway/server-methods/server-methods.test.ts b/src/gateway/server-methods/server-methods.test.ts index 3c93679e4330..fc6cf53ec530 100644 --- a/src/gateway/server-methods/server-methods.test.ts +++ b/src/gateway/server-methods/server-methods.test.ts @@ -28,6 +28,7 @@ import { } from "../../infra/system-run-approval-binding.js"; import { resetLogger, setLoggerOverride } from "../../logging.js"; import { createOpenClawTestState } from "../../test-utils/openclaw-test-state.js"; +import { waitForAgentJob } from "../agent-turn/agent-job.js"; import { DEFAULT_CHAT_HISTORY_TEXT_MAX_CHARS, augmentChatHistoryWithCanvasBlocks, @@ -39,7 +40,6 @@ import { import { ExecApprovalManager } from "../exec-approval-manager.js"; import { createChatRunState } from "../server-chat-state.js"; import { HEALTH_REFRESH_INTERVAL_MS } from "../server-constants.js"; -import { waitForAgentJob } from "./agent-job.js"; import { injectTimestamp, timestampOptsFromConfig } from "./agent-timestamp.js"; import { normalizeRpcAttachmentsToChatAttachments } from "./attachment-normalize.js"; import { createExecApprovalHandlers } from "./exec-approval.js"; diff --git a/src/gateway/server-methods/sessions-abort.ts b/src/gateway/server-methods/sessions-abort.ts index e3679919e1a3..b9c9504e5a24 100644 --- a/src/gateway/server-methods/sessions-abort.ts +++ b/src/gateway/server-methods/sessions-abort.ts @@ -17,6 +17,7 @@ import { } from "../../config/sessions.js"; import type { OpenClawConfig } from "../../config/types.openclaw.js"; import { normalizeAgentId, parseAgentSessionKey } from "../../routing/session-key.js"; +import { setGatewayDedupeEntry } from "../agent-turn/agent-job.js"; import { resolveSessionKeyForRun } from "../server-session-key.js"; import { resolveRequestedSessionAgentId as resolveRequestedGlobalAgentId } from "../session-request-agent.js"; import { @@ -28,7 +29,6 @@ import { import { loadSessionEntry } from "../session-utils.js"; import { asWorkerInferenceControl } from "../worker-environments/inference-control.js"; import { resolveWorkerSessionTarget } from "../worker-environments/session-target.js"; -import { setGatewayDedupeEntry } from "./agent-job.js"; import { handleChatAbortRequestWithLifecycle } from "./chat-abort-handler.js"; import { emitSessionsChanged } from "./session-change-event.js"; import { requireSessionKey } from "./sessions-shared.js";