import type { SavedPromptAttachment, SessionBulkArchiveResponse, SessionBulkDeleteArchivedResponse, SessionBulkMutationRef, } from "../../shared/apiTypes.js"; import type { ClientArchiveSessionsResponse, ClientCommand, ClientCommandResult, ClientMessagePage, ClientSession, ClientSessionCleanupExecuteResponse, ClientSessionCleanupPreviewResponse, ClientSessionModel, ClientSessionRef, ClientSessionStatus, ClientThinkingLevel, } from "../types.js"; import type { NormalizedSessionCleanupRequest } from "./sessionCleanup.js"; export type SessionRouteRef = ClientSessionRef; export type SessionRouteLookup = string | SessionRouteRef; /** * Route-facing session contract for PI WEB's HTTP/WebSocket API. * * Keep this surface neutral: implementations may be backed by the native Pi SDK, * an out-of-process agent bridge, or another daemon. Pi-specific lifecycle hooks * such as auth-change handling and daemon shutdown stay on the concrete service. */ export interface SessionRouteService { list(cwd: string): Promise; start(cwd: string): Promise; messages(ref: SessionRouteLookup, page?: { before?: number; limit?: number }): Promise; status(ref: SessionRouteLookup): Promise; availableModels(ref: SessionRouteLookup): Promise; setModel(ref: SessionRouteLookup, provider: string, modelId: string): Promise; cycleModel(ref: SessionRouteLookup, direction: "forward" | "backward"): Promise; availableThinkingLevels(ref: SessionRouteLookup): Promise; setThinkingLevel(ref: SessionRouteLookup, level: string): Promise; cycleThinkingLevel(ref: SessionRouteLookup): Promise; commands(ref: SessionRouteLookup): Promise; prompt(ref: SessionRouteLookup, text: unknown, streamingBehavior?: unknown, attachments?: unknown): Promise; saveAttachments(ref: SessionRouteLookup, attachments: unknown, folder?: string): Promise; cleanupPreview(request: NormalizedSessionCleanupRequest): Promise; cleanup(request: NormalizedSessionCleanupRequest): Promise; archiveMany(refs: readonly SessionBulkMutationRef[]): Promise; deleteArchivedMany(refs: readonly SessionBulkMutationRef[]): Promise; shell(ref: SessionRouteLookup, text: string): Promise; runCommand(ref: SessionRouteLookup, text: string): Promise; respondToCommand(ref: SessionRouteLookup, requestId: string, value: string): Promise; abort(ref: SessionRouteLookup): Promise; stop(ref: SessionRouteLookup): void | Promise; archive(ref: SessionRouteLookup): Promise; archiveTree(ref: SessionRouteLookup): Promise; restore(ref: SessionRouteLookup): Promise; deleteArchived(ref: SessionRouteLookup): Promise; reload(ref: SessionRouteLookup): Promise; detachParent(ref: SessionRouteLookup): Promise; }