openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
48 lines (47 loc) • 1.8 kB
JavaScript
import { t as createLazyImportLoader } from "./lazy-promise-BONnzNfb.js";
//#region src/auto-reply/reply/session-fork.ts
/**
* Default max parent token count beyond which thread/session parent forking is skipped.
* This prevents new thread sessions from inheriting near-full parent context.
* See #26905.
*/
const DEFAULT_PARENT_FORK_MAX_TOKENS = 1e5;
const sessionForkRuntimeLoader = createLazyImportLoader(() => import("./session-fork.runtime.js"));
function loadSessionForkRuntime() {
return sessionForkRuntimeLoader.load();
}
function formatParentForkTooLargeMessage(params) {
return `Parent context is too large to fork (${params.parentTokens}/${params.maxTokens} tokens); starting with isolated context instead.`;
}
/** Decides whether parent context is small enough to fork into a child session. */
async function resolveParentForkDecision(params) {
const maxTokens = DEFAULT_PARENT_FORK_MAX_TOKENS;
const parentTokens = await resolveParentForkTokenCount({
parentEntry: params.parentEntry,
storePath: params.storePath
});
if (typeof parentTokens === "number" && parentTokens > maxTokens) return {
status: "skip",
reason: "parent-too-large",
maxTokens,
parentTokens,
message: formatParentForkTooLargeMessage({
parentTokens,
maxTokens
})
};
return {
status: "fork",
maxTokens,
...typeof parentTokens === "number" ? { parentTokens } : {}
};
}
/** Forks a new session transcript from a parent session. */
async function forkSessionFromParent(params) {
return (await loadSessionForkRuntime()).forkSessionFromParentRuntime(params);
}
async function resolveParentForkTokenCount(params) {
return (await loadSessionForkRuntime()).resolveParentForkTokenCountRuntime(params);
}
//#endregion
export { resolveParentForkDecision as n, forkSessionFromParent as t };