@sema-agent/core
Version:
Stateless, task-oriented AI agent core
35 lines (34 loc) • 1.54 kB
JavaScript
import { canonicalize, REGISTRY_SHAPE_DERIVES_PATHS, scopeDirFor, scopeRegistryShape } from "./layout.js";
import { sessionAccountWriteHome } from "./delegation-settlement.js";
export async function sessionWriteHomeOf(input) {
const { memoryDir, controlDir, sessionId, contributions } = input;
try {
if (!REGISTRY_SHAPE_DERIVES_PATHS[scopeRegistryShape(controlDir)])
return undefined;
if (contributions === undefined)
return undefined;
let newest;
for (const [id, at] of contributions) {
if (newest === undefined || at > newest.at || (at === newest.at && id > newest.id))
newest = { id, at };
}
const account = sessionAccountWriteHome(controlDir, sessionId);
const sources = [];
const fromAccount = async () => account?.writeScope;
const fromNewest = async () => (newest === undefined ? undefined : (await input.readEntries([newest.id])).find((e) => e.id === newest.id)?.scope);
if (account !== undefined && (newest === undefined || account.openedAt >= newest.at))
sources.push(fromAccount, fromNewest);
else
sources.push(fromNewest, fromAccount);
let scope;
for (const source of sources) {
scope = await source();
if (scope !== undefined)
break;
}
return scope === undefined ? undefined : canonicalize(scopeDirFor(memoryDir, controlDir, scope));
}
catch {
return undefined;
}
}