43 lines
982 B
TypeScript
43 lines
982 B
TypeScript
import { join } from "node:path";
|
|
|
|
import { config } from "../config.js";
|
|
import {
|
|
atomicWriteJson,
|
|
ensureDirectory,
|
|
readJsonFile,
|
|
removeFileIfExists,
|
|
} from "../utils/fileStore.js";
|
|
|
|
export type ToolSessionContext = {
|
|
actorKey: string;
|
|
clientSessionId: string;
|
|
projectId?: string;
|
|
projectKey: string;
|
|
sessionId: string;
|
|
traceId: string;
|
|
};
|
|
|
|
export class ToolSessionContextStore {
|
|
constructor(private readonly baseDir = config.SESSION_CONTEXT_STORAGE_DIR) {}
|
|
|
|
async initialize() {
|
|
await ensureDirectory(this.baseDir);
|
|
}
|
|
|
|
async write(context: ToolSessionContext) {
|
|
await atomicWriteJson(this.filePath(context.sessionId), context);
|
|
}
|
|
|
|
async read(sessionId: string) {
|
|
return await readJsonFile<ToolSessionContext>(this.filePath(sessionId));
|
|
}
|
|
|
|
async remove(sessionId: string) {
|
|
await removeFileIfExists(this.filePath(sessionId));
|
|
}
|
|
|
|
private filePath(sessionId: string) {
|
|
return join(this.baseDir, `${sessionId}.json`);
|
|
}
|
|
}
|