export type FederatedHttpMethod = "GET" | "POST" | "PUT" | "DELETE"; export const PI_PACKAGE_MUTATION_PROXY_TIMEOUT_MS = 5 * 60_000; export interface FederatedHttpRouteSpec { method: FederatedHttpMethod; path: string; timeoutMs?: number; } export const FEDERATED_HTTP_ROUTES = [ { method: "GET", path: "/pi-web/status" }, { method: "GET", path: "/config" }, { method: "PUT", path: "/config" }, { method: "GET", path: "/plugins" }, { method: "GET", path: "/pi-packages" }, { method: "POST", path: "/pi-packages/install", timeoutMs: PI_PACKAGE_MUTATION_PROXY_TIMEOUT_MS }, { method: "POST", path: "/pi-packages/remove", timeoutMs: PI_PACKAGE_MUTATION_PROXY_TIMEOUT_MS }, { method: "POST", path: "/pi-packages/update", timeoutMs: PI_PACKAGE_MUTATION_PROXY_TIMEOUT_MS }, { method: "GET", path: "/projects" }, { method: "POST", path: "/projects" }, { method: "DELETE", path: "/projects/:projectId" }, { method: "GET", path: "/project-directories" }, { method: "GET", path: "/projects/:projectId/workspaces" }, { method: "DELETE", path: "/projects/:projectId/workspaces/:workspaceId" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/tree" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/file" }, { method: "PUT", path: "/projects/:projectId/workspaces/:workspaceId/file" }, { method: "DELETE", path: "/projects/:projectId/workspaces/:workspaceId/file" }, { method: "POST", path: "/projects/:projectId/workspaces/:workspaceId/file/move" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/file/preview" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/files" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/git/status" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/git/diff" }, { method: "GET", path: "/projects/:projectId/workspaces/:workspaceId/terminals" }, { method: "POST", path: "/projects/:projectId/workspaces/:workspaceId/terminals" }, { method: "DELETE", path: "/projects/:projectId/workspaces/:workspaceId/terminals" }, { method: "POST", path: "/projects/:projectId/workspaces/:workspaceId/terminals/:terminalId/continue" }, { method: "DELETE", path: "/projects/:projectId/workspaces/:workspaceId/terminals/:terminalId" }, { method: "POST", path: "/projects/:projectId/workspaces/:workspaceId/terminal-command-runs" }, { method: "GET", path: "/terminal-command-runs" }, { method: "GET", path: "/terminal-command-runs/:runId" }, { method: "POST", path: "/terminal-command-runs/:runId/cancel" }, { method: "GET", path: "/files" }, { method: "GET", path: "/activity" }, { method: "GET", path: "/sessions" }, { method: "POST", path: "/sessions" }, { method: "POST", path: "/sessions/cleanup/preview" }, { method: "POST", path: "/sessions/cleanup" }, { method: "POST", path: "/sessions/bulk/archive" }, { method: "POST", path: "/sessions/bulk/delete-archived" }, { method: "GET", path: "/sessions/:sessionId/messages" }, { method: "GET", path: "/sessions/:sessionId/status" }, { method: "GET", path: "/sessions/:sessionId/models" }, { method: "POST", path: "/sessions/:sessionId/model" }, { method: "POST", path: "/sessions/:sessionId/model/cycle" }, { method: "GET", path: "/sessions/:sessionId/thinking-levels" }, { method: "POST", path: "/sessions/:sessionId/thinking-level" }, { method: "POST", path: "/sessions/:sessionId/thinking-level/cycle" }, { method: "GET", path: "/sessions/:sessionId/commands" }, { method: "POST", path: "/sessions/:sessionId/prompt" }, { method: "POST", path: "/sessions/:sessionId/queue/clear" }, { method: "POST", path: "/sessions/:sessionId/attachments" }, { method: "POST", path: "/sessions/:sessionId/shell" }, { method: "POST", path: "/sessions/:sessionId/commands/run" }, { method: "POST", path: "/sessions/:sessionId/commands/respond" }, { method: "POST", path: "/sessions/:sessionId/abort" }, { method: "POST", path: "/sessions/:sessionId/stop" }, { method: "POST", path: "/sessions/:sessionId/archive" }, { method: "POST", path: "/sessions/:sessionId/archive-tree" }, { method: "POST", path: "/sessions/:sessionId/restore" }, { method: "DELETE", path: "/sessions/:sessionId" }, { method: "POST", path: "/sessions/:sessionId/reload" }, { method: "POST", path: "/sessions/:sessionId/detach-parent" }, { method: "GET", path: "/auth/providers" }, { method: "POST", path: "/auth/api-key" }, { method: "POST", path: "/auth/logout" }, { method: "POST", path: "/auth/oauth" }, { method: "GET", path: "/auth/oauth/:flowId" }, { method: "POST", path: "/auth/oauth/:flowId/respond" }, { method: "POST", path: "/auth/oauth/:flowId/cancel" }, ] as const satisfies readonly FederatedHttpRouteSpec[]; export const FEDERATED_WEBSOCKET_ROUTES = [ "/events", "/sessions/events", "/sessions/:sessionId/events", "/projects/:projectId/workspaces/:workspaceId/terminals/:terminalId/socket", ] as const satisfies readonly string[];