mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 11:51:37 +00:00
refactor: harden reset notice + cron delivery target flow
This commit is contained in:
@@ -51,6 +51,76 @@ import { appendUntrustedContext } from "./untrusted-context.js";
|
||||
type AgentDefaults = NonNullable<OpenClawConfig["agents"]>["defaults"];
|
||||
type ExecOverrides = Pick<ExecToolDefaults, "host" | "security" | "ask" | "node">;
|
||||
|
||||
function buildResetSessionNoticeText(params: {
|
||||
provider: string;
|
||||
model: string;
|
||||
defaultProvider: string;
|
||||
defaultModel: string;
|
||||
}): string {
|
||||
const modelLabel = `${params.provider}/${params.model}`;
|
||||
const defaultLabel = `${params.defaultProvider}/${params.defaultModel}`;
|
||||
return modelLabel === defaultLabel
|
||||
? `✅ New session started · model: ${modelLabel}`
|
||||
: `✅ New session started · model: ${modelLabel} (default: ${defaultLabel})`;
|
||||
}
|
||||
|
||||
function resolveResetSessionNoticeRoute(params: {
|
||||
ctx: MsgContext;
|
||||
command: ReturnType<typeof buildCommandContext>;
|
||||
}): {
|
||||
channel: Parameters<typeof routeReply>[0]["channel"];
|
||||
to: string;
|
||||
} | null {
|
||||
const commandChannel = params.command.channel?.trim().toLowerCase();
|
||||
const fallbackChannel =
|
||||
commandChannel && commandChannel !== "webchat"
|
||||
? (commandChannel as Parameters<typeof routeReply>[0]["channel"])
|
||||
: undefined;
|
||||
const channel = params.ctx.OriginatingChannel ?? fallbackChannel;
|
||||
const to = params.ctx.OriginatingTo ?? params.command.from ?? params.command.to;
|
||||
if (!channel || channel === "webchat" || !to) {
|
||||
return null;
|
||||
}
|
||||
return { channel, to };
|
||||
}
|
||||
|
||||
async function sendResetSessionNotice(params: {
|
||||
ctx: MsgContext;
|
||||
command: ReturnType<typeof buildCommandContext>;
|
||||
sessionKey: string;
|
||||
cfg: OpenClawConfig;
|
||||
accountId: string | undefined;
|
||||
threadId: string | number | undefined;
|
||||
provider: string;
|
||||
model: string;
|
||||
defaultProvider: string;
|
||||
defaultModel: string;
|
||||
}): Promise<void> {
|
||||
const route = resolveResetSessionNoticeRoute({
|
||||
ctx: params.ctx,
|
||||
command: params.command,
|
||||
});
|
||||
if (!route) {
|
||||
return;
|
||||
}
|
||||
await routeReply({
|
||||
payload: {
|
||||
text: buildResetSessionNoticeText({
|
||||
provider: params.provider,
|
||||
model: params.model,
|
||||
defaultProvider: params.defaultProvider,
|
||||
defaultModel: params.defaultModel,
|
||||
}),
|
||||
},
|
||||
channel: route.channel,
|
||||
to: route.to,
|
||||
sessionKey: params.sessionKey,
|
||||
accountId: params.accountId,
|
||||
threadId: params.threadId,
|
||||
cfg: params.cfg,
|
||||
});
|
||||
}
|
||||
|
||||
type RunPreparedReplyParams = {
|
||||
ctx: MsgContext;
|
||||
sessionCtx: TemplateContext;
|
||||
@@ -318,26 +388,18 @@ export async function runPreparedReply(
|
||||
}
|
||||
}
|
||||
if (resetTriggered && command.isAuthorizedSender) {
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
const channel = ctx.OriginatingChannel || (command.channel as any);
|
||||
const to = ctx.OriginatingTo || command.from || command.to;
|
||||
if (channel && to) {
|
||||
const modelLabel = `${provider}/${model}`;
|
||||
const defaultLabel = `${defaultProvider}/${defaultModel}`;
|
||||
const text =
|
||||
modelLabel === defaultLabel
|
||||
? `✅ New session started · model: ${modelLabel}`
|
||||
: `✅ New session started · model: ${modelLabel} (default: ${defaultLabel})`;
|
||||
await routeReply({
|
||||
payload: { text },
|
||||
channel,
|
||||
to,
|
||||
sessionKey,
|
||||
accountId: ctx.AccountId,
|
||||
threadId: ctx.MessageThreadId,
|
||||
cfg,
|
||||
});
|
||||
}
|
||||
await sendResetSessionNotice({
|
||||
ctx,
|
||||
command,
|
||||
sessionKey,
|
||||
cfg,
|
||||
accountId: ctx.AccountId,
|
||||
threadId: ctx.MessageThreadId,
|
||||
provider,
|
||||
model,
|
||||
defaultProvider,
|
||||
defaultModel,
|
||||
});
|
||||
}
|
||||
const sessionIdFinal = sessionId ?? crypto.randomUUID();
|
||||
const sessionFile = resolveSessionFilePath(
|
||||
|
||||
Reference in New Issue
Block a user