Re-add pi-web-access

This commit is contained in:
2026-02-19 22:23:48 +00:00
parent c242a0ca53
commit 774492f279
31 changed files with 8666 additions and 1 deletions

View File

@@ -0,0 +1,71 @@
import type { ExtensionContext } from "@mariozechner/pi-coding-agent";
import type { ExtractedContent } from "./extract.js";
import type { SearchResult } from "./perplexity.js";
const CACHE_TTL_MS = 60 * 60 * 1000;
export interface QueryResultData {
query: string;
answer: string;
results: SearchResult[];
error: string | null;
}
export interface StoredSearchData {
id: string;
type: "search" | "fetch";
timestamp: number;
queries?: QueryResultData[];
urls?: ExtractedContent[];
}
const storedResults = new Map<string, StoredSearchData>();
export function generateId(): string {
return Date.now().toString(36) + Math.random().toString(36).slice(2, 8);
}
export function storeResult(id: string, data: StoredSearchData): void {
storedResults.set(id, data);
}
export function getResult(id: string): StoredSearchData | null {
return storedResults.get(id) ?? null;
}
export function getAllResults(): StoredSearchData[] {
return Array.from(storedResults.values());
}
export function deleteResult(id: string): boolean {
return storedResults.delete(id);
}
export function clearResults(): void {
storedResults.clear();
}
function isValidStoredData(data: unknown): data is StoredSearchData {
if (!data || typeof data !== "object") return false;
const d = data as Record<string, unknown>;
if (typeof d.id !== "string" || !d.id) return false;
if (d.type !== "search" && d.type !== "fetch") return false;
if (typeof d.timestamp !== "number") return false;
if (d.type === "search" && !Array.isArray(d.queries)) return false;
if (d.type === "fetch" && !Array.isArray(d.urls)) return false;
return true;
}
export function restoreFromSession(ctx: ExtensionContext): void {
storedResults.clear();
const now = Date.now();
for (const entry of ctx.sessionManager.getBranch()) {
if (entry.type === "custom" && entry.customType === "web-search-results") {
const data = entry.data;
if (isValidStoredData(data) && now - data.timestamp < CACHE_TTL_MS) {
storedResults.set(data.id, data);
}
}
}
}