/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/app/src/utils/session-route.ts
39 строк
1 KB
Luke Parker
fix(app): resolve target session lineage outside router transition (#34838)
02 июл 2026, 07:24
Не верифицирован
02 июл 2026, 07:24
39dfbb5
Код
Авторство
О чём код?
import { base64Encode } from "@opencode-ai/core/util/encode" import { ServerConnection } from "@/context/server" import { decode64 } from "@/utils/base64" export function sessionHref(server: ServerConnection.Key, sessionID: string) { return `/server/${base64Encode(server)}/session/${sessionID}` } export function legacySessionHref(directory: string, sessionID: string) { return `/${base64Encode(directory)}/session/${sessionID}` } export function requireServerKey(segment: string | undefined) { const key = decode64(segment) if (!key || base64Encode(key) !== segment) throw new Error("Invalid server route") return ServerConnection.Key.make(key) } export function legacySessionServer( tabs: readonly { type: "session"; server: ServerConnection.Key; sessionId: string }[], sessionID: string, active: ServerConnection.Key, ) { const matches = tabs.filter((tab) => tab.sessionId === sessionID) return matches.find((tab) => tab.server === active)?.server ?? (matches.length === 1 ? matches[0]?.server : active) } type SessionParent = { id: string; parentID?: string } export async function rootSession<T extends SessionParent>(session: T, get: (sessionID: string) => Promise<T>) { const seen = new Set([session.id]) let current = session while (current.parentID) { if (seen.has(current.parentID)) throw new Error(`Session parent cycle: ${current.parentID}`) seen.add(current.parentID) current = await get(current.parentID) } return current }