mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-10-02 13:13:16 +00:00
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
|
|
const STORAGE_KEY = (threadId: string) => `open-swe:pending-prompts:${threadId}`;
|
||
|
|
|
||
|
|
export interface PendingPrompt {
|
||
|
|
prompt: string;
|
||
|
|
insertAt: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
function isPendingPrompt(value: unknown): value is PendingPrompt {
|
||
|
|
return (
|
||
|
|
typeof value === "object" &&
|
||
|
|
value !== null &&
|
||
|
|
typeof (value as PendingPrompt).prompt === "string" &&
|
||
|
|
typeof (value as PendingPrompt).insertAt === "number"
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function safeRead(threadId: string): PendingPrompt[] {
|
||
|
|
if (typeof window === "undefined") return [];
|
||
|
|
try {
|
||
|
|
const raw = window.sessionStorage.getItem(STORAGE_KEY(threadId));
|
||
|
|
if (!raw) return [];
|
||
|
|
const parsed = JSON.parse(raw);
|
||
|
|
return Array.isArray(parsed) ? parsed.filter(isPendingPrompt) : [];
|
||
|
|
} catch {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function safeWrite(threadId: string, prompts: PendingPrompt[]): void {
|
||
|
|
if (typeof window === "undefined") return;
|
||
|
|
if (prompts.length === 0) {
|
||
|
|
window.sessionStorage.removeItem(STORAGE_KEY(threadId));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
window.sessionStorage.setItem(STORAGE_KEY(threadId), JSON.stringify(prompts));
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getPendingPrompts(threadId: string): PendingPrompt[] {
|
||
|
|
return safeRead(threadId);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function addPendingPrompt(threadId: string, prompt: string, insertAt: number): void {
|
||
|
|
safeWrite(threadId, [...safeRead(threadId), { prompt, insertAt }]);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function dropPendingPrompts(
|
||
|
|
threadId: string,
|
||
|
|
predicate: (entry: PendingPrompt) => boolean,
|
||
|
|
): PendingPrompt[] {
|
||
|
|
const next = safeRead(threadId).filter((p) => !predicate(p));
|
||
|
|
safeWrite(threadId, next);
|
||
|
|
return next;
|
||
|
|
}
|