UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

35 lines (34 loc) • 1.54 kB
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; } }