refactor: share provider replay hook params

This commit is contained in:
Peter Steinberger
2026-04-19 04:40:22 +01:00
parent 3eed321081
commit dfe2e81829

View File

@@ -52,6 +52,37 @@ type ModelSnapshotEntry = {
modelId?: string;
};
type ProviderReplayHookParams = {
config?: OpenClawConfig;
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
provider: string;
modelId?: string;
modelApi?: string | null;
model?: ProviderRuntimeModel;
sessionId?: string;
};
function createProviderReplayPluginParams(params: ProviderReplayHookParams) {
const context = {
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
provider: params.provider,
modelId: params.modelId,
modelApi: params.modelApi,
model: params.model,
sessionId: params.sessionId,
};
return {
provider: params.provider,
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
context,
};
}
function buildInterSessionPrefix(message: AgentMessage): string {
const provenance = normalizeInputProvenance((message as { provenance?: unknown }).provenance);
if (!provenance) {
@@ -476,28 +507,21 @@ export async function sanitizeSessionHistory(params: {
})
: false;
const provider = params.provider?.trim();
const providerSanitized =
provider && provider.length > 0
? await sanitizeProviderReplayHistoryWithPlugin({
provider,
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
context: {
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
provider,
modelId: params.modelId,
modelApi: params.modelApi,
model: params.model,
sessionId: params.sessionId,
messages: sanitizedCompactionUsage,
allowedToolNames: params.allowedToolNames,
sessionState: createProviderReplaySessionState(params.sessionManager),
},
})
: undefined;
let providerSanitized: AgentMessage[] | undefined;
if (provider && provider.length > 0) {
const pluginParams = createProviderReplayPluginParams({ ...params, provider });
const providerResult = await sanitizeProviderReplayHistoryWithPlugin({
...pluginParams,
context: {
...pluginParams.context,
sessionId: params.sessionId ?? "",
messages: sanitizedCompactionUsage,
allowedToolNames: params.allowedToolNames,
sessionState: createProviderReplaySessionState(params.sessionManager),
},
});
providerSanitized = providerResult ?? undefined;
}
const sanitizedWithProvider = providerSanitized ?? sanitizedCompactionUsage;
if (hasSnapshot && (!priorSnapshot || modelChanged)) {
@@ -551,20 +575,11 @@ export async function validateReplayTurns(params: {
});
const provider = params.provider?.trim();
if (provider) {
const pluginParams = createProviderReplayPluginParams({ ...params, provider });
const providerValidated = await validateProviderReplayTurnsWithPlugin({
provider,
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
...pluginParams,
context: {
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
provider,
modelId: params.modelId,
modelApi: params.modelApi,
model: params.model,
sessionId: params.sessionId,
...pluginParams.context,
messages: params.messages,
},
});