openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
52 lines (51 loc) • 3.01 kB
JavaScript
import { t as createSubsystemLogger } from "./subsystem-Dy2tqXOS.js";
import { t as getGlobalHookRunner } from "./hook-runner-global-0kfmMG4T.js";
import { Y as consumeAdjustedParamsForToolCall } from "./agent-tools.before-tool-call-Bb7DJuFB.js";
import { l as applyTranscriptSenderIdentityToWrite } from "./user-turn-transcript.message-LcwHBB2I.js";
import { t as extractAssistantPhaseText } from "./chat-message-content-Dws_XUEQ.js";
//#region src/agents/harness/hook-helpers.ts
const log = createSubsystemLogger("agents/harness");
/** Runs best-effort after-tool-call hooks for a completed tool invocation. */
async function runAgentHarnessAfterToolCallHook(params) {
const adjustedArgs = consumeAdjustedParamsForToolCall(params.toolCallId, params.runId);
const resolvedArgs = adjustedArgs && typeof adjustedArgs === "object" ? adjustedArgs : params.startArgs;
const eventArgs = structuredClone(resolvedArgs);
const hookRunner = getGlobalHookRunner();
if (!hookRunner?.hasHooks("after_tool_call")) return;
try {
await hookRunner.runAfterToolCall({
toolName: params.toolName,
params: eventArgs,
...params.runId ? { runId: params.runId } : {},
toolCallId: params.toolCallId,
...params.result ? { result: params.result } : {},
...params.error ? { error: params.error } : {},
...params.startedAt != null ? { durationMs: Date.now() - params.startedAt } : {}
}, {
toolName: params.toolName,
...params.agentId ? { agentId: params.agentId } : {},
...params.sessionId ? { sessionId: params.sessionId } : {},
...params.sessionKey ? { sessionKey: params.sessionKey } : {},
...params.runId ? { runId: params.runId } : {},
...params.channelId ? { channelId: params.channelId } : {},
toolCallId: params.toolCallId
});
} catch (error) {
log.warn(`after_tool_call hook failed: tool=${params.toolName} error=${String(error)}`);
}
}
/** Runs before-message-write hooks and returns the possibly rewritten message. */
function runAgentHarnessBeforeMessageWriteHook(params) {
const sourceText = params.prepareAssistantTranscriptMessage && params.message.role === "assistant" && Reflect.get(params.message, "display") !== false ? extractAssistantPhaseText(params.message) : void 0;
const hookRunner = getGlobalHookRunner();
const message = !params.skipBeforeMessageWriteHooks && hookRunner?.hasHooks("before_message_write") ? applyTranscriptSenderIdentityToWrite(params.message, () => {
const result = hookRunner.runBeforeMessageWrite({ message: params.message }, {
agentId: params.agentId,
sessionKey: params.sessionKey
});
return result?.block ? null : result?.message ?? params.message;
}) ?? null : params.message;
return message?.role === "assistant" && Reflect.get(message, "display") !== false && sourceText !== void 0 && params.prepareAssistantTranscriptMessage ? params.prepareAssistantTranscriptMessage(message, sourceText) : message;
}
//#endregion
export { runAgentHarnessBeforeMessageWriteHook as n, runAgentHarnessAfterToolCallHook as t };