/** * Structural types for the cordis services apes-sidebar consumes. * * PHASE 1: the sidebar tab + session types now come from the REAL * `dsh-better-sidebar` package (type-only imports in `src/client/index.tsx`): * `TabDescriptor` / `TabComponentProps` / `BetterSidebarService` / * `SidebarSessionSummary` / `SidebarSessionList`. The Phase 0 placeholder * mirrors (`ApesSidebarTabDescriptor`, `ApesSidebarService`, * `ApesSessionSummary`, `ApesSessionList`, `ApesSessionsService`, and the * `ApesContext` intersection) were deleted — they are superseded by the * peer's authoritative types and would drift. * * What remains here is the ONE service face apes-sidebar still defines * itself: the locale runtime mirror (`ApesLocaleService`). `dsh-better-sidebar` * publishes its own `SidebarLocaleService`, but locales.ts pre-dates the type * import and stays on this local mirror to keep the i18n module independent * of the peer (it must compile even when the peer is absent). * * This file must stay FREE of Node.js types: it is part of the * CLIENT-reachable declaration graph, so a Node import here would leak into * browser-only consumer builds. */ /** * The client locale service face (mirror of dsh-client-locale's LocaleRuntime). * Only the slices apes-sidebar's i18n module touches: snapshot read, snapshot * subscription, and per-namespace dictionary registration. */ export interface ApesLocaleService { getSnapshot(): { active: string } subscribe(fn: () => void): () => void register(ns: string, locale: string, dict: Record): () => void }