refactor: break runtime import cycles

This commit is contained in:
Peter Steinberger
2026-04-09 03:51:31 +01:00
parent 0fbaef799f
commit 0c278bb93c
40 changed files with 217 additions and 154 deletions

View File

@@ -7,7 +7,7 @@ import type {
} from "../../context-engine/types.js";
import { formatErrorMessage } from "../../infra/errors.js";
import { emitSessionTranscriptUpdate } from "../../sessions/transcript-events.js";
import { getRawSessionAppendMessage } from "../session-tool-result-guard.js";
import { getRawSessionAppendMessage } from "../session-raw-append-message.js";
import { acquireSessionWriteLock } from "../session-write-lock.js";
import { log } from "./logger.js";

View File

@@ -0,0 +1,24 @@
import type { SessionManager } from "@mariozechner/pi-coding-agent";
const RAW_APPEND_MESSAGE = Symbol("openclaw.session.rawAppendMessage");
export type SessionManagerWithRawAppend = SessionManager & {
[RAW_APPEND_MESSAGE]?: SessionManager["appendMessage"];
};
/**
* Return the unguarded appendMessage implementation for a session manager.
*/
export function getRawSessionAppendMessage(
sessionManager: SessionManager,
): SessionManager["appendMessage"] {
const rawAppend = (sessionManager as SessionManagerWithRawAppend)[RAW_APPEND_MESSAGE];
return rawAppend ?? sessionManager.appendMessage.bind(sessionManager);
}
export function setRawSessionAppendMessage(
sessionManager: SessionManager,
appendMessage: SessionManager["appendMessage"],
): void {
(sessionManager as SessionManagerWithRawAppend)[RAW_APPEND_MESSAGE] = appendMessage;
}

View File

@@ -11,14 +11,13 @@ import {
DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS,
truncateToolResultMessage,
} from "./pi-embedded-runner/tool-result-truncation.js";
import {
getRawSessionAppendMessage,
setRawSessionAppendMessage,
} from "./session-raw-append-message.js";
import { createPendingToolCallState } from "./session-tool-result-state.js";
import { makeMissingToolResult, sanitizeToolCallInputs } from "./session-transcript-repair.js";
import { extractToolCallsFromAssistant, extractToolResultId } from "./tool-call-id.js";
const RAW_APPEND_MESSAGE = Symbol("openclaw.session.rawAppendMessage");
type SessionManagerWithRawAppend = SessionManager & {
[RAW_APPEND_MESSAGE]?: SessionManager["appendMessage"];
};
/**
* Truncate oversized text content blocks in a tool result message.
@@ -63,15 +62,7 @@ function normalizePersistedToolResultName(
return toolResult;
}
/**
* Return the unguarded appendMessage implementation for a session manager.
*/
export function getRawSessionAppendMessage(
sessionManager: SessionManager,
): SessionManager["appendMessage"] {
const rawAppend = (sessionManager as SessionManagerWithRawAppend)[RAW_APPEND_MESSAGE];
return rawAppend ?? sessionManager.appendMessage.bind(sessionManager);
}
export { getRawSessionAppendMessage };
export function installSessionToolResultGuard(
sessionManager: SessionManager,
@@ -115,7 +106,7 @@ export function installSessionToolResultGuard(
getPendingIds: () => string[];
} {
const originalAppend = getRawSessionAppendMessage(sessionManager);
(sessionManager as SessionManagerWithRawAppend)[RAW_APPEND_MESSAGE] = originalAppend;
setRawSessionAppendMessage(sessionManager, originalAppend);
const pendingState = createPendingToolCallState();
const persistMessage = (message: AgentMessage) => {
const transformer = opts?.transformMessageForPersistence;

View File

@@ -11,4 +11,4 @@ export { resolveExternalBestEffortDeliveryTarget } from "../infra/outbound/best-
export { createBoundDeliveryRouter } from "../infra/outbound/bound-delivery-router.js";
export { resolveConversationIdFromTargets } from "../infra/outbound/conversation-id.js";
export { getGlobalHookRunner } from "../plugins/hook-runner-global.js";
export { isEmbeddedPiRunActive, queueEmbeddedPiMessage } from "./pi-embedded.js";
export { isEmbeddedPiRunActive, queueEmbeddedPiMessage } from "./pi-embedded-runner/runs.js";

View File

@@ -10,4 +10,4 @@ export {
isEmbeddedPiRunActive,
queueEmbeddedPiMessage,
waitForEmbeddedPiRunEnd,
} from "./pi-embedded.js";
} from "./pi-embedded-runner/runs.js";

View File

@@ -15,7 +15,7 @@ import { formatErrorMessage } from "../infra/errors.js";
import { isSubagentSessionKey, parseAgentSessionKey } from "../routing/session-key.js";
import { INTERNAL_MESSAGE_CHANNEL } from "../utils/message-channel.js";
import { AGENT_LANE_SUBAGENT } from "./lanes.js";
import { abortEmbeddedPiRun } from "./pi-embedded.js";
import { abortEmbeddedPiRun } from "./pi-embedded-runner/runs.js";
import {
readLatestAssistantReplySnapshot,
waitForAgentRunAndReadUpdatedAssistantReply,