File size: 4,987 Bytes
eb3f11e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | import type { LlmRuntime } from "@openclaw/ai";
import type { ThinkLevel } from "../../auto-reply/thinking.js";
import type { OpenClawConfig } from "../../config/types.openclaw.js";
import { getModelProviderRuntimePluginHandle } from "../../plugins/provider-hook-runtime.js";
import type { ProviderRuntimeModel } from "../../plugins/provider-runtime-model.types.js";
import { resolveProviderTextTransforms } from "../../plugins/provider-runtime.js";
import { wrapStreamFnTextTransforms } from "../plugin-text-transforms.js";
import type { AgentRuntimePlan } from "../runtime-plan/types.js";
import { applyExtraParamsToAgent } from "./extra-params.js";
import {
resolveEmbeddedAgentApiKey,
resolveEmbeddedAgentBaseStreamFn,
resolveEmbeddedAgentStream,
} from "./stream-resolution.js";
import { mapThinkingLevelForProvider } from "./utils.js";
export async function prepareCompactionSessionAgent(params: {
session: { agent: { streamFn?: unknown } };
llmRuntime: LlmRuntime;
providerStreamFn: unknown;
sessionId: string;
signal: AbortSignal;
effectiveModel: ProviderRuntimeModel;
resolvedApiKey?: string;
authStorage: unknown;
config?: OpenClawConfig;
provider: string;
modelId: string;
thinkLevel: ThinkLevel;
sessionAgentId: string;
effectiveWorkspace: string;
agentDir: string;
runtimePlan?: AgentRuntimePlan;
sessionKey?: string;
sandboxToolPolicy?: { allow?: string[]; deny?: string[] };
messageProvider?: string;
agentAccountId?: string | null;
groupId?: string | null;
groupChannel?: string | null;
groupSpace?: string | null;
spawnedBy?: string | null;
senderId?: string | null;
senderName?: string | null;
senderUsername?: string | null;
senderE164?: string | null;
}) {
const authStorage =
params.authStorage &&
typeof params.authStorage === "object" &&
"getApiKey" in params.authStorage &&
typeof params.authStorage.getApiKey === "function"
? (params.authStorage as {
getApiKey(provider: string): Promise<string | undefined>;
})
: undefined;
const transportApiKey = authStorage
? await resolveEmbeddedAgentApiKey({
provider: params.effectiveModel.provider,
resolvedApiKey: params.resolvedApiKey,
authStorage,
})
: params.resolvedApiKey;
params.session.agent.streamFn = resolveEmbeddedAgentStream({
llmRuntime: params.llmRuntime,
currentStreamFn: resolveEmbeddedAgentBaseStreamFn({ session: params.session as never }),
providerStreamFn: params.providerStreamFn as never,
sessionId: params.sessionId,
signal: params.signal,
model: params.effectiveModel,
resolvedApiKey: params.resolvedApiKey,
transportAuthAvailable: Boolean(transportApiKey?.trim()),
authProfileId: params.runtimePlan?.auth.forwardedAuthProfileId,
authStorage: params.authStorage as never,
}).streamFn;
const providerTextTransforms = resolveProviderTextTransforms({
provider: params.provider,
config: params.config,
workspaceDir: params.effectiveWorkspace,
runtimeHandle: getModelProviderRuntimePluginHandle(params.effectiveModel),
});
if (providerTextTransforms) {
params.session.agent.streamFn = wrapStreamFnTextTransforms({
streamFn: params.session.agent.streamFn as never,
input: providerTextTransforms.input,
output: providerTextTransforms.output,
transformSystemPrompt: false,
}) as never;
}
const providerThinkingLevel = mapThinkingLevelForProvider(params.thinkLevel);
const preparedRuntimeExtraParams = params.runtimePlan?.transport.resolveExtraParams({
thinkingLevel: providerThinkingLevel,
agentId: params.sessionAgentId,
workspaceDir: params.effectiveWorkspace,
model: params.effectiveModel,
});
const extraParams = applyExtraParamsToAgent(
params.session.agent as never,
params.config,
params.provider,
params.modelId,
undefined,
providerThinkingLevel,
params.sessionAgentId,
params.effectiveWorkspace,
params.effectiveModel,
params.agentDir,
undefined,
{
...(preparedRuntimeExtraParams ? { preparedExtraParams: preparedRuntimeExtraParams } : {}),
nativeWebSearchPolicyContext: {
// Summaries have no tool loop; provider-hosted tools must not inherit
// the originating conversation's broader web-search authority.
sessionKey: params.sessionKey,
webSearchEnabled: false,
runtimeToolAllowlist: [],
sandboxToolPolicy: params.sandboxToolPolicy,
messageProvider: params.messageProvider,
agentAccountId: params.agentAccountId,
groupId: params.groupId,
groupChannel: params.groupChannel,
groupSpace: params.groupSpace,
spawnedBy: params.spawnedBy,
senderId: params.senderId,
senderName: params.senderName,
senderUsername: params.senderUsername,
senderE164: params.senderE164,
},
},
);
return { ...extraParams, transportApiKey };
}
|