openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
51 lines (50 loc) • 2.36 kB
JavaScript
import { t as pruneMapToMaxSize } from "./map-size-CNcWiFKu.js";
import { w as workspaceFileSourceIdentitiesMatch, y as loadWorkspaceBootstrapFiles } from "./workspace-ConDEamr.js";
//#region src/agents/bootstrap-cache.ts
/**
* Per-session workspace bootstrap snapshot cache.
* Reuses unchanged bootstrap file arrays while refreshing each turn so edits
* become visible to long-lived agent sessions.
*/
const MAX_BOOTSTRAP_SNAPSHOTS = 64;
const cache = /* @__PURE__ */ new Map();
function bootstrapFilesEqual(previous, next) {
if (previous.length !== next.length) return false;
return previous.every((file, index) => {
const updated = next[index];
return updated !== void 0 && file.name === updated.name && file.path === updated.path && file.content === updated.content && file.missing === updated.missing && workspaceFileSourceIdentitiesMatch(file, updated);
});
}
/** Load bootstrap files for a session, reusing the prior snapshot when content is unchanged. */
async function getOrLoadBootstrapFiles(params) {
pruneMapToMaxSize(cache, MAX_BOOTSTRAP_SNAPSHOTS);
const existing = cache.get(params.sessionKey);
const files = await loadWorkspaceBootstrapFiles(params.workspaceDir);
if (existing && existing.workspaceDir === params.workspaceDir && bootstrapFilesEqual(existing.files, files)) {
cache.delete(params.sessionKey);
cache.set(params.sessionKey, existing);
return existing.files;
}
cache.set(params.sessionKey, {
workspaceDir: params.workspaceDir,
files
});
pruneMapToMaxSize(cache, MAX_BOOTSTRAP_SNAPSHOTS);
return files;
}
/** Drop one cached bootstrap snapshot. */
function clearBootstrapSnapshot(sessionKey) {
cache.delete(sessionKey);
}
/** Clear bootstrap state when a visible session rolls over to a new backing session. */
function clearBootstrapSnapshotOnSessionRollover(params) {
if (!params.sessionKey || !params.previousSessionId) return;
clearBootstrapSnapshot(params.sessionKey);
}
/** Clear bootstrap state after an in-log lifecycle boundary is durably appended. */
function clearBootstrapSnapshotOnSessionBoundary(params) {
if (!params.boundaryAppended || !params.sessionKey) return;
clearBootstrapSnapshot(params.sessionKey);
}
//#endregion
export { getOrLoadBootstrapFiles as i, clearBootstrapSnapshotOnSessionBoundary as n, clearBootstrapSnapshotOnSessionRollover as r, clearBootstrapSnapshot as t };